Groovy

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Groovy
Groovy-logo.svg
פרדיגמות תכנות מונחה-עצמים, תכנות אימפרטיבי, סקריפטים, תכנות פונקציונלי
מתכנן Guillaume Laforge
גרסה אחרונה 2.1.7 (6 בספטמבר 2013)
טיפוסיות דינמית, חזקה, ברווז
מימושים Java Virtual Machine
הושפעה על ידי Java, Python, Ruby, Perl, Smalltalk, Objective-C
אתר http://groovy.codehaus.org

Groovy (גְּרוּבִי) היא שפת תכנות מונחית-עצמים עבור הפלטפורמה של ג'אווה. זוהי שפה דינמית, בעלת מאפיינים דומים לשפות Python, Ruby, Perl ו-Smalltalk. השפה יכולה לשמש גם כשפת תסריט עבור הפלטפורמה של ג'אווה.

Groovy משתמשת בתחביר מבוסס סוגריים מסולסלים בדומה לשפת Java. קוד המקור של השפה עובר הידור דינמי ל-bytecode עבור המכונה הווירטואלית של ג'אווה (JVM), והוא יכול לעבוד עם קוד וספריות שנכתבו בשפת Java. כמו כן, ברוב המקרים קוד Java יחשב תקין תחבירית גם ב-Groovy. גרסה 1.0 של Groovy שוחררה ב-2 בינואר 2007.

מאפייני השפה[עריכת קוד מקור | עריכה]

מרבית קבצי Java התקינים (valid), אבל לא כולם, הם גם קובצי Groovy תקינים. למרות ששתי השפות דומות, הקוד של Groovy יכול להיות קומפקטי יותר בגלל שהוא לא דורש את כל האלמנטים שג'אווה דורשת. זה מאפשר למתכנתי ג'אווה ללמוד את שפת Groovy בצורה הדרגתית על ידי התחלה מסינטקס מוכר של ג'אווה, לפני שהספיקו להכיר את כל הדקויות של השפה החדשה.

בין המאפיינים של Groovy שלא קיימים ב-Java, נכללת תמיכה בטיפוסים סטטיים ובטיפוסים דינמיים (באמצעות המילה השמורה def), סְגוֹרים (closures), העמסת אופרטורים, תחביר מובנה לרשימות ומילונים, תמיכה מובנית בביטויים רגולריים, איטרטורים פולימורפיים, ביטויים המוטמעים בתוך מחרוזות, מתודות עזר נוספות, וניווט בטוח באמצעות האופרטור ".?" שמבצע בדיקה אוטומטית האם מצביעים ל-null (לדוגמה: ()variable?.method או variable?.field).

את התחביר של Groovy ניתן להפוך להרבה יותר קומפקטי מזה של ג'אווה. לדוגמה, את קטע הקוד הבא בשפת ג'אווה (גרסאות 5 ומעלה):

 for (String it : new String[] {"Rod", "Carlos", "Chris"})
     if (it.length() <= 4)
         System.out.println(it);

ניתן לבטא ב-Groovy בצורה הבאה:

 ["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}

Groovy מספקת תמיכה מובנית בשפות תגיות כגון XML ו-HTML, באמצעות תחביר DOM מובנה (inline). תכונה זו מאפשרת להגדיר ולשלוט על נתונים מסוגים שונים תוך שימוש בסינטקס ומתודולוגיות תכנות אחידים ותמציתיים.

להבדיל מג'אווה, קוד מקור של Groovy ניתן להרצה כסקריפט (שלא עבר הידור), במידה והוא מורכב מקוד שנמצא מחוץ להגדרה של מחלקה, או אם זוהי מחלקה עם מתודת main, או במידה וזהו Runnable GroovyTestCase. סקריפט Groovy עובר ניתוח (parsing) והידור במלואו לפני שהוא רץ (בדומה ל-Perl ו-Ruby). זה מתרחש מאחורי הקלעים, והגרסה המהודרת אינה נשמרת כתוצר של התהליך.

GroovyBeans הם גרסה של Groovy ל-JavaBeans. מנוע השפה מייצר מתודות get ו-set באופן מרומז (implicitly). בדוגמת הקוד שלמטה, המתודות (setColor(String color ו-()getColor נוצרות באופן מרומז; בשורות 7 ו-8 מודגמת קריאה מפורשת למתודות אלה, ובשורות 10 ו-11, שבהן נראה כאילו ניגשים למשתנה color בצורה ישירה, בעצם מתבצעת קריאה מרומזת למתודות ה-get וה-set.

class AGroovyBean {
  String color
}
 
def myGroovyBean = new AGroovyBean()
 
myGroovyBean.setColor('blue') // 7
assert myGroovyBean.getColor() == 'blue' // 8
 
myGroovyBean.color = 'red' // 10
assert myGroovyBean.color == 'red' // 11

Groovy מספקת תחביר פשוט ואחיד לטיפול במבני נתונים של רשימות ומילונים (maps), אשר מזכיר את הסינטקס של ג'אווה למערכים:

def movieList = ['Dersu Uzala', 'Ran', 'Seven Samurai']  //looks like an array, but is a list
assert movieList[2] == 'Seven Samurai'
movieList[3] = 'Casablanca'  //adds an element to the list
assert movieList.size() == 4
 
def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ]  //declares a map
assert monthMap['March'] == 31  //accesses an entry
monthMap['April'] = 30  //adds an entry to the map
assert monthMap.size() == 4

קישורים חיצוניים[עריכת קוד מקור | עריכה]