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

گرووی  زبان برنامه‌نویسی پویایی است که برای ماشین مجازی جاوا ایجاد شده‌است، و هم می‌تواند مفسر اجرا شود، یا اینکه کامپایل شود.کتاب Beginning Groovy and Grails, From Novice to Professional این زبان از زبان‌هایی مانند روبی، پایتون، پرل، اسمال‌تاک، و همچنین جاوا تأثیر گرفته‌است.

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

 ویژگی‌های گرووی 
 برنامه‌نویسی شی‌گرا 
همه چیز در گرووی یک شی است.کتاب Grails 1.1 Web Application Development گرووی تمام عملگرها را به صورت فراخوانی تابع پیاده‌سازی می‌کند. این باعث می‌شود که کد زیر:
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()

 منابع 

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

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