Groovy, Java platformu için tasarlanmış, geliştiricilerin verimliliğini artırmayı amaçlayan, çevik ve dinamik bir dildir. Mevcut Java kodu ile sorunsuz entegrasyon sağlarken, nesne yönelimli bir programlama dili olarak hem statik hem de dinamik tiplemeyi destekler, bu da geliştiriciler için esnek bir seçim olmasını sağlar. Groovy ayrıca, Java Sanal Makinesi (JVM) için betikler yazmak amacıyla kullanılabilen bir betik dilidir; bu, hızlı prototipleme ve olgun Java ekosisteminden yararlanma kolaylığı sağlar.
Groovy, 2003 yılında James Strachan tarafından yaratılmıştır. Dil, Python, Ruby ve Smalltalk gibi diğer dillerden etkilenmiş olup, geliştirici dostu sözdizimi ve dinamik yetenekleri ile katkıda bulunmuştur. Groovy'nin yaratılmasındaki temel motivasyon, Java geliştirmeyi basitleştiren ve Java kütüphaneleri ile uyumluluğu koruyan bir dil sağlamaktı.
2007 yılında Groovy, Apache Yazılım Vakfı altında resmi olarak yayımlandı ve bu sayede topluluk katkıları ve denetiminden faydalanma imkanı buldu. Yıllar içinde Groovy, GORM (Grails Nesne İlişkisel Eşleme) gibi veritabanları ve ORM çerçeveleri ile daha iyi entegrasyon sunan yeteneklerle zenginleşen birçok güncelleme geçirdi.
Günümüzde Groovy, web uygulamaları geliştirmek için tasarlanmış Grails çerçevesi ile yaygın olarak kullanılmaktadır. Dil, en son sürümlerinde performansı artırmaya ve geliştirici deneyimini geliştirmeye yönelik özellikler eklemeye devam etmektedir. Groovy ayrıca, Spock gibi test çerçevelerinde sıkça kullanılmakta ve Java ekosistemindeki konumunu daha da pekiştirmektedir.
Groovy, kod yazımını basitleştiren dinamik tiplemeyi destekler. Örneğin:
def name = "John"
println name // Çıktı: John
Groovy'deki kapatmalar, etrafta taşınabilen ve daha sonra çalıştırılabilen kod bloklarıdır. Diğer dillerdeki lambda ifadelerine benzer:
def greet = { name -> "Merhaba, $name!" }
println greet("Alice") // Çıktı: Merhaba, Alice!
Groovy, geliştiricilerin değişkenleri doğrudan dizelerin içine yerleştirmesine olanak tanıyan kolay dize yerleştirmeyi destekler:
def age = 25
println "Ben $age yaşındayım." // Çıktı: Ben 25 yaşındayım.
Groovy, listeleri ve haritaları tanımlamak için kullanışlı bir sözdizimi sunar, bu da onları daha okunabilir hale getirir:
def list = [1, 2, 3, 4]
def map = [name: "John", age: 25]
Düzenli ifadeler yerel olarak desteklenir, bu da özlü desen eşleştirmeye olanak tanır:
def text = "Groovy harika!"
def matcher = (text =~ /harika/)
println matcher.size() // Çıktı: 1
Groovy, özellikler için otomatik olarak getter ve setter'lar oluşturur, bu da kodu basitleştirir:
class Person {
String name
}
def person = new Person(name: "Alice")
println person.name // Çıktı: Alice
Groovy'nin yapıcıları, karmaşık veri yapıları oluşturmayı özlü bir şekilde sağlar:
def xml = {
fruits {
apple()
banana()
}
}
println groovy.xml.MarkupBuilder.toString(xml) // XML yapısını çıktılar
Groovy, sınıflara ve yöntemlere meta veriler sağlamak için kullanılabilecek notları destekler:
@Deprecated
def oldMethod() {
// ...
}
Groovy, geliştiricilerin sınıfları ve yöntemleri çalışma zamanında değiştirmesine olanak tanıyan güçlü meta-programlama yetenekleri sunar:
String.metaClass.shout = { -> this.toUpperCase() }
println "merhaba".shout() // Çıktı: MERHABA
Groovy, sezgisel operatör kullanımına olanak tanıyan operatör aşırı yüklemeyi destekler:
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 // Çıktı: Point(4, 6)
Groovy, IntelliJ IDEA, Eclipse ve NetBeans gibi çeşitli IDE'lerde geliştirilebilir. Bu ortamlar, Groovy sözdizimi vurgulama, kod tamamlama ve hata ayıklama desteği sunar.
Groovy, proje yönetimini ve bağımlılık çözümünü basitleştiren Apache Maven ve Gradle gibi derleme araçları ile yaygın olarak kullanılır.
Groovy betiklerini çalıştırmak için Groovy konsolu veya komut satırı kullanılabilir. Bir Groovy dosyasını çalıştırmak için tipik bir komut:
groovy MyScript.groovy
Groovy, aşağıdaki alanlarda kullanılmaktadır:
Groovy'nin sözdizimi ve özellikleri, birkaç programlama dili ile benzerlikler taşır:
Groovy, Java ile sorunsuz bir şekilde entegre olur ve geliştiricilerin Java kütüphanelerini kullanmasına olanak tanırken, Groovy'nin özlü sözdizimi ve dinamik özelliklerinden faydalanır. Java'nın aksine, Groovy dinamik tipleme ve kapatmaları destekler.
Groovy, sözdizimi basitliği ve esnekliği açısından Python ve Ruby ile benzer özellikler taşır. Ancak, Groovy JVM üzerinde çalışırken, Python ve Ruby kendi yorumlayıcılarına sahiptir.
C# ve Groovy, nesne yönelimli yapılar açısından benzerlikler taşır, ancak Groovy'nin dinamik tipleme ve sözdizimi şekerleri, C#'ın daha ayrıntılı doğasına kıyasla daha özlü bir geliştirme deneyimi sunar.
Kotlin, Groovy gibi JVM için tasarlanmış olup, özlülük ve güvenliğe vurgu yapar. Ancak, Groovy eski Java kod tabanları ile uyumluluğunu korurken, Kotlin daha katı tür güvenliği özellikleri sunar.
Groovy'nin dinamik yetenekleri JavaScript'e benzer, ancak Groovy, Java ile sıkı entegrasyonu nedeniyle daha güçlü bir tip sistemine sahiptir.
Groovy kodunu diğer dillere çevirmek, hedef dilin paradigmalarına bağlı olarak değişebilir. Groovy'nin kendi AST dönüşümleri gibi araçlar, Groovy kodunu Java bytecode'una dönüştürmeye yardımcı olabilir, ancak diğer dillere doğrudan çeviri genellikle manuel ayarlamalar gerektirebilir.
Groovy'yi diğer programlama dillerine dönüştürmek için özel bir araç olmamakla birlikte, Java yapılarından yoğun bir şekilde yararlanan Groovy kodunun bazı bölümleri için J2ObjC gibi genel amaçlı transpiler'lar kullanılabilir. GRAILS'ten Java'ya gibi diğer araçlar da gerektiğinde kod tabanlarını geçişte yardımcı olabilir.