گرووی (زبان برنامه‌نویسی)

گرووی  زبان برنامه‌نویسی پویایی است که برای ماشین مجازی جاوا ایجاد شده‌است، و هم می‌تواند مفسر اجرا شود، یا اینکه کامپایل شود. این زبان از زبان‌هایی مانند روبی، پایتون، پرل، اسمال‌تاک، و همچنین جاوا تأثیر گرفته‌است.

گرووی توسط اسپرینگ‌سورس، که بخشی از وی‌ام‌ویر است توسعه داده می‌شود.

ویژگی‌های گرووی

برنامه‌نویسی شی‌گرا 
همه چیز در گرووی یک شی است. گرووی تمام عملگرها را به صورت فراخوانی تابع پیاده‌سازی می‌کند. این باعث می‌شود که کد زیر:
1 + 1
به صورت زیر اجرا شود:
1.plus(1)

این به معنی این است که می‌توان در گرووی عملگرها را رونویسی کرد. در زیر مثالی از رونویسی عملگر plus را مشاهده می‌کنید:

class Score {
   int value;
   public Score plus (Score other) {
      return new Score(value: value + other.value)
   }
}

Score myScore = new Score(value: 88)
Score yourScore = new Score(value: 89)
Score totalScore = myScore + yourScore

assert totalScore == 177

برنامه‌نویسی تابعی 
برنامه‌نویسی تابعی سبکی از برنامه‌نویسی است که بر روی استفاده از توابع، بدون استفاده از متغیرهای حالت و گام‌های رویه‌ای، برای حل مسایل محاسباتی تأکید می‌کند.

توابع گرووی می‌توانند برای تعریف توابعی به کار روند که هیچ گام رویه‌ای ندارند. به عنوان مثال تابع فاکتوریل را می‌توان به صورت زیر پیاده‌سازی کرد:
def fac(n) { n == 0 ? 1 : n * fac(n - 1) }

بستارها 
یک بستار در گرووی تکه‌ای از کد است که تعریف می‌شود و در نکته‌ای دیگر اجرا می‌شود. بستارها می‌توانند به متغیرهای حوزه‌ای که بستار در آن تعریف شده دسترسی داشته باشد. به این متغیرها، متغیرهای آزاد می‌گویند. به نمونه زیر توجه کنید:

def adder(n) {
   return { num -> num + n }
}

def add5 = adder(5)

println add5(7) // prints 12

پویا بودن 
در گرووی می‌توان ساختار کلاس‌های تعریف شده را در زمان اجرا تغییر داد. می‌توان در زمان به یک کلاس متغیر یا تابع جدید اضافه کرد.

نوع‌گذاری قوی و نوع‌گذاری شل 
هنگام تعریف یک متغیر در گرووی نیازی به مشخص کردن نوع آن نیست. به عنوان نمونه:
def someObject = "some value";

هنگامی که کد بالا به بایت‌کد جاوا ترجمه می‌شود، معادل کد زیر در جاوا خواهد بود:
GroovyObject someObject = "some value";

همچنین نوع‌گذاری قوی نیز در گرووی پشتیبانی می‌شود. به عنوان نمونه کد زیر نیز در گرووی مجاز است:
String someObject = "some value";

یکپارچه‌سازی مستقیم با جاوا 
کلاس‌های گرووی به بایت‌کد جاوا ترجمه می‌شوند، و می‌توان کلاس‌های جاوا را در گرووی، و کلاس‌های گرووی را در جاوا استفاده کرد. به عنوان نمونه در زیر یک کلاس در جاوا و یک کلاس در گرووی مشاهده می‌کنید که از یکدیگر استفاده می‌کنند:

کلاس تعریف شده در جاوا:
public class AClassInJava {
    public static void main(String[] args) {
        new AClassInJava().printMessage();
        new AClassInGroovy().printMessage();
    }
    public void printMessage() {
       System.out.println("Hello from Java");
    }
}

و کلاس تعریف شده در گرووی:
class AClassInGroovy{
    def printMessage() {
        println "Hello from Groovy"
    }
}
new AClassInJava().printMessage()
new AClassInGroovy().printMessage()

منابع

پیوند به بیرون 
 وب‌گاه رسمی گرووی

خانواده زبان برنامه‌نویسی جاوا
زبان‌های اسکریپت‌نویسی
زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۰۳ (میلادی)
زبان‌های برنامه‌نویسی ساخته‌شده در دهه ۲۰۰۰ (میلادی)
زبان‌های برنامه‌نویسی سطح بالا
زبان‌های برنامه‌نویسی شیءگرا
زبان‌های برنامه‌نویسی ماشین مجازی جاوا
زبان‌های برنامه‌نویسی ماشینی پویا
معرفی‌شده‌های ۲۰۰۳ (میلادی)
نرم‌افزارهای آزاد چندسکویی
نرم‌افزارهای چندسکویی
نرم‌افزارهایی که از پروانه آپاچی استفاده می‌کنند