From Wikipedia, the free encyclopedia
گرووی (به انگلیسی: 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()
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.