گرووی (زبان برنامهنویسی)
گرووی (به انگلیسی: 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 + yourScoreassert 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()