گرووی (زبان برنامهنویسی)
گرووی (به انگلیسی: Groovy) زبان برنامهنویسی پویایی است که برای ماشین مجازی جاوا ایجاد شدهاست، و هم میتواند مفسر اجرا شود، یا اینکه کامپایل شود.[1] این زبان از زبانهایی مانند روبی، پایتون، پرل، اسمالتاک، و همچنین جاوا تأثیر گرفتهاست.[1]
طراحی شده توسط | جمیز استراچان |
---|---|
ظهوریافته در | ۲۰۰۳ |
انتشار پایدار | ۲.۰.۵
۴ اکتبر ۲۰۱۲ |
بنسازه رایانش | ماشین مجازی جاوا |
سیستمعامل | چندسکویی |
پروانه | پروانه آپاچی نسخه ۲ |
وبگاه |
گرووی توسط اسپرینگسورس، که بخشی از ویامویر است توسعه داده میشود.[2]
ویژگیهای گرووی
برنامهنویسی شیگرا
همه چیز در گرووی یک شی است.[3] گرووی تمام عملگرها را به صورت فراخوانی تابع پیادهسازی میکند. این باعث میشود که کد زیر:
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
برنامهنویسی تابعی
برنامهنویسی تابعی سبکی از برنامهنویسی است که بر روی استفاده از توابع، بدون استفاده از متغیرهای حالت و گامهای رویهای، برای حل مسایل محاسباتی تأکید میکند.
توابع گرووی میتوانند برای تعریف توابعی به کار روند که هیچ گام رویهای ندارند.[4] به عنوان مثال تابع فاکتوریل را میتوان به صورت زیر پیادهسازی کرد:
def fac(n) { n == 0 ? 1 : n * fac(n - 1) }
بستارها
یک بستار در گرووی تکهای از کد است که تعریف میشود و در نکتهای دیگر اجرا میشود.[5] بستارها میتوانند به متغیرهای حوزهای که بستار در آن تعریف شده دسترسی داشته باشد. به این متغیرها، متغیرهای آزاد میگویند. به نمونه زیر توجه کنید:
def adder(n) {
return { num -> num + n }
}
def add5 = adder(5)
println add5(7) // prints 12
پویا بودن
در گرووی میتوان ساختار کلاسهای تعریف شده را در زمان اجرا تغییر داد. میتوان در زمان به یک کلاس متغیر یا تابع جدید اضافه کرد.[3]
نوعگذاری قوی و نوعگذاری شل
هنگام تعریف یک متغیر در گرووی نیازی به مشخص کردن نوع آن نیست.[3] به عنوان نمونه:
def someObject = "some value";
هنگامی که کد بالا به بایتکد جاوا ترجمه میشود، معادل کد زیر در جاوا خواهد بود:
GroovyObject someObject = "some value";
همچنین نوعگذاری قوی نیز در گرووی پشتیبانی میشود.[3] به عنوان نمونه کد زیر نیز در گرووی مجاز است:
String someObject = "some value";
یکپارچهسازی مستقیم با جاوا
کلاسهای گرووی به بایتکد جاوا ترجمه میشوند، و میتوان کلاسهای جاوا را در گرووی، و کلاسهای گرووی را در جاوا استفاده کرد.[3] به عنوان نمونه در زیر یک کلاس در جاوا و یک کلاس در گرووی مشاهده میکنید که از یکدیگر استفاده میکنند:
کلاس تعریف شده در جاوا:
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()
منابع
- کتاب Beginning Groovy and Grails, From Novice to Professional
- «نوار کناری وبگاه رسمی گرووی». بایگانیشده از اصلی در ۱۳ فوریه ۲۰۱۲. دریافتشده در ۲۸ اکتبر ۲۰۱۲.
- کتاب Grails 1.1 Web Application Development
- «مستندات گرووی - برنامهنویسی تابعی». بایگانیشده از اصلی در ۸ اکتبر ۲۰۱۲. دریافتشده در ۲۸ اکتبر ۲۰۱۲.
- «مستندات گرووی - بستارها». بایگانیشده از اصلی در ۲۲ مه ۲۰۱۲. دریافتشده در ۲۸ اکتبر ۲۰۱۲.