گرووی (زبان برنامهنویسی)
| گونه | رویهای شئگرا برنامهنویسی تابعی |
|---|---|
| منتشر شده در | ۲۰۰۳ |
| طراح(ها) | جمیز استراچان |
| آخرین نسخه پایدار | ۲.۰.۵ (۴ اکتبر ۲۰۱۲) |
| سیستمعامل | چندسکویی |
| سکو | ماشین مجازی جاوا |
| تاثیر گرفته از | جاوا، پایتون، روبی، پرل، اسمالتاک، آبجکتیو-سی |
| اجازهنامه | پروانه آپاچی نسخه ۲ |
| وبگاه | groovy.codehaus.org |
گرووی (به انگلیسی: 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()
منابع [ویرایش]
- ↑ ۱٫۰ ۱٫۱ کتاب Beginning Groovy and Grails, From Novice to Professional
- ↑ نوار کناری وبگاه رسمی گرووی
- ↑ ۳٫۰ ۳٫۱ ۳٫۲ ۳٫۳ ۳٫۴ کتاب Grails 1.1 Web Application Development
- ↑ مستندات گرووی - برنامهنویسی تابعی
- ↑ مستندات گرووی - بستارها