Groovy یک زبان چابک و پویا برای پلتفرم جاوا است که به منظور افزایش بهرهوری توسعهدهندگان طراحی شده و ادغام بینقصی با کدهای موجود جاوا فراهم میکند. این زبان یک زبان برنامهنویسی شیءگرا است که از هر دو نوع تایپ استاتیک و دینامیک پشتیبانی میکند و انتخابی انعطافپذیر برای توسعهدهندگان به شمار میآید. Groovy همچنین یک زبان اسکریپتنویسی است که میتوان از آن برای نوشتن اسکریپتها برای ماشین مجازی جاوا (JVM) استفاده کرد، که امکان پروتوتایپسازی سریع و سهولت استفاده را در حالی که از اکوسیستم بالغ جاوا بهره میبرد، فراهم میکند.
Groovy در سال 2003 توسط جیمز استراچن ایجاد شد. این زبان تحت تأثیر زبانهای دیگر مانند Python، Ruby و Smalltalk قرار داشت که به نحوۀ نوشتن کد دوستانه برای توسعهدهندگان و قابلیتهای دینامیک آن کمک کرد. انگیزه اصلی از ایجاد Groovy، فراهم کردن زبانی بود که بتواند توسعه جاوا را سادهتر کند در حالی که با کتابخانههای جاوا سازگار باشد.
در سال 2007، Groovy به طور رسمی تحت بنیاد نرمافزار آپاچی منتشر شد و به آن اجازه داد تا از مشارکتها و نظارتهای جامعه بهرهمند شود. در طول سالها، Groovy از بهروزرسانیهای متعددی عبور کرده و مجموعه ویژگیهای آن با قابلیتهایی مانند GORM (نقشهبرداری شیء-رابطهای Grails) غنیتر شده است که ادغام بهتری با پایگاههای داده و فریمورکهای ORM ارائه میدهد.
در حال حاضر، Groovy به طور گستردهای در کنار فریمورک Grails که برای ساخت برنامههای وب طراحی شده است، استفاده میشود. این زبان همچنان در حال تکامل است و نسخههای جدید ویژگیهایی را اضافه میکنند که به بهبود عملکرد و ارتقاء تجربه توسعهدهنده کمک میکند. Groovy همچنین به طور مکرر در فریمورکهای تست، مانند Spock، استفاده میشود که موقعیت آن را در اکوسیستم جاوا بیشتر تأکید میکند.
Groovy از تایپ دینامیک پشتیبانی میکند که نوشتن کد را سادهتر میکند. به عنوان مثال:
def name = "John"
println name // خروجی: John
کلوزرها در Groovy بلوکهای کدی هستند که میتوانند منتقل شوند و بعداً اجرا شوند. آنها مشابه لامبداها در زبانهای دیگر هستند:
def greet = { name -> "Hello, $name!" }
println greet("Alice") // خروجی: Hello, Alice!
Groovy امکان درج رشته را به راحتی فراهم میکند و به توسعهدهندگان اجازه میدهد متغیرها را مستقیماً درون رشتهها قرار دهند:
def age = 25
println "I am $age years old." // خروجی: I am 25 years old.
Groovy نحو راحتی برای تعریف لیستها و نقشهها فراهم میکند که آنها را خواناتر میکند:
def list = [1, 2, 3, 4]
def map = [name: "John", age: 25]
عبارات منظم به طور بومی پشتیبانی میشوند و امکان تطابق الگوهای مختصر را فراهم میکنند:
def text = "Groovy is great!"
def matcher = (text =~ /great/)
println matcher.size() // خروجی: 1
Groovy به طور خودکار Getter و Setterهایی برای ویژگیها تولید میکند و نوشتن کد را سادهتر میکند:
class Person {
String name
}
def person = new Person(name: "Alice")
println person.name // خروجی: Alice
سازندههای Groovy امکان ایجاد ساختارهای داده پیچیده را به روشی مختصر فراهم میکنند:
def xml = {
fruits {
apple()
banana()
}
}
println groovy.xml.MarkupBuilder.toString(xml) // خروجی ساختار XML
Groovy از حاشیهنویسیها پشتیبانی میکند که میتوانند برای ارائه متاداده به کلاسها و متدها استفاده شوند:
@Deprecated
def oldMethod() {
// ...
}
Groovy قابلیتهای متا-برنامهنویسی قدرتمندی را ارائه میدهد که به توسعهدهندگان اجازه میدهد کلاسها و متدها را در زمان اجرا تغییر دهند:
String.metaClass.shout = { -> this.toUpperCase() }
println "hello".shout() // خروجی: HELLO
Groovy از بارگذاری اپراتور پشتیبانی میکند و امکان استفاده شهودی از اپراتورها را فراهم میکند:
class Point {
int x, y
Point plus(Point other) {
new Point(x: this.x + other.x, y: this.y + other.y)
}
}
def p1 = new Point(x: 1, y: 2)
def p2 = new Point(x: 3, y: 4)
println p1 + p2 // خروجی: Point(4, 6)
Groovy میتواند در IDEهای مختلفی مانند IntelliJ IDEA، Eclipse و NetBeans توسعه یابد. این محیطها از ویژگیهای برجستهسازی نحو Groovy، تکمیل کد و اشکالزدایی پشتیبانی میکنند.
Groovy معمولاً با ابزارهای ساخت مانند Apache Maven و Gradle استفاده میشود که مدیریت پروژه و حل وابستگیها را سادهتر میکنند.
برای اجرای اسکریپتهای Groovy، میتوانید از کنسول Groovy یا خط فرمان استفاده کنید. یک دستور معمول برای اجرای یک فایل Groovy به صورت زیر است:
groovy MyScript.groovy
Groovy در حوزههای مختلفی مورد استفاده قرار میگیرد، از جمله:
نحو و ویژگیهای Groovy با چندین زبان برنامهنویسی مقایسه میشود:
Groovy به طور بینقصی با جاوا ادغام میشود و به توسعهدهندگان اجازه میدهد از کتابخانههای جاوا استفاده کنند در حالی که از نحو مختصر و ویژگیهای دینامیک Groovy بهرهمند میشوند. بر خلاف جاوا، Groovy اجازه تایپ دینامیک و کلوزرها را میدهد.
Groovy از نظر سادگی نحو و انعطافپذیری با پایتون و روبی ویژگیهای مشترکی دارد. با این حال، Groovy بر روی JVM اجرا میشود، در حالی که پایتون و روبی دارای مفسرهای خود هستند.
C# و Groovy در ساختارهای شیءگرا شباهتهایی دارند، اما تایپ دینامیک و شکرگذاری نحو Groovy تجربه توسعهای مختصرتر را نسبت به طبیعت verbose C# ارائه میدهد.
کاتلین، مانند Groovy، برای JVM طراحی شده و بر اختصار و ایمنی تأکید دارد. با این حال، Groovy سازگاری با پایگاههای کد قدیمی جاوا را حفظ میکند در حالی که کاتلین ویژگیهای ایمنی نوع سختتری را معرفی میکند.
قابلیتهای دینامیک Groovy شبیه جاوااسکریپت است، اما Groovy به دلیل ادغام نزدیک با جاوا دارای سیستم تایپ قویتری است.
ترجمه کد Groovy به زبانهای دیگر میتواند بسته به پارادایمهای زبان هدف متفاوت باشد. ابزارهایی مانند تبدیلهای AST خود Groovy میتوانند به تبدیل کد Groovy به بایتکد جاوا کمک کنند، اما ترجمه مستقیم به زبانهای دیگر ممکن است نیاز به تنظیمات دستی داشته باشد.
در حالی که هیچ ابزار خاصی برای تبدیل Groovy به زبانهای برنامهنویسی دیگر وجود ندارد، استفاده از ترنسپایلرهای عمومی مانند J2ObjC برای جاوا میتواند به بخشهایی از کد Groovy که به شدت به ساختارهای جاوا وابسته است، کمک کند. ابزارهای دیگری مانند GRAILS به جاوا نیز میتوانند در انتقال پایگاههای کد در صورت نیاز کمک کنند.