طراحی شده توسط | جمیز استراچان |
---|---|
ظهوریافته در | ۲۰۰۳ |
انتشار پایدار | ۲.۰.۵
/ ۴ اکتبر ۲۰۱۲ |
بنسازه رایانش | ماشین مجازی جاوا |
سیستمعامل | چندسکویی |
پروانه | پروانه آپاچی نسخه ۲ |
وبگاه |
گرووی (به انگلیسی: Groovy) زبان برنامهنویسی پویایی است که برای ماشین مجازی جاوا ایجاد شدهاست، و هم میتواند مفسر اجرا شود، یا اینکه کامپایل شود.[۱] این زبان از زبانهایی مانند روبی، پایتون، پرل، اسمالتاک، و همچنین جاوا تأثیر گرفتهاست.[۱]
گرووی توسط اسپرینگسورس، که بخشی از ویامویر است توسعه داده میشود.[۲]
همه چیز در گرووی یک شی است.[۳] گرووی تمام عملگرها را به صورت فراخوانی تابع پیادهسازی میکند. این باعث میشود که کد زیر:
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()