Groovy Java platformu içerisinde çalışma gösteren dinamik yapıda emredici ve odağında nesne bulunduran bir programlama dili olarak ifade edilebilir. Bir başka tanımla Java Sanal Makinesi için geliştirilen söz dizimi olarak da Java’ya benzerlik gösteren betik bir dil olarak da tanımlanabilir. Groovy, bütün platformlarda kullanılması mümkün olan, başka bir platform için odak noktası bulundurmayan, Java geliştirenler için bir betik dili çözümü. Java Specification Request içerisinde yer alan Java Communicity Process vasıtasıyla Groovy dilinde bir standardı yakalama söz konusu mevcut. Groovy programlama dilini klasikleştirip tek düze yapmaya çalışan bu uzman ve bilgili grubun en büyük amacı değişik sağlayıcıların uygulamalarını işlevli kılmak.

  kapak foto

 

Groovy için kuvvetli bir programlama dili yakıştırması sürekli olarak yapılıyor. Bu kuvveti sağlayan en önemli özellikler arasında üst seviye vazifeleri basit bir şekilde programlayabilecek eklentileri, Java’ya direkt ulaşım, Java söz dizimine de benzerlik ön plana çıkıyor. Groovy’nin en ve en önemli niteliği Java bünyesinde çalışma gösteren dinamik diller arasında en kolay ve yüksek entegre olma becerisine sahip dil olması. Groovy içerisinden sıradan bir Java nesnesi bir Groovy nesnesi ayarında çağrılabilir ve aynı tarzda Java içerisinden de bir Groovy nesnesini, Java nesnesi tarzında çağırabilir. Bob McWhirter ve James Strachan tarafından Ruby,Smalltalk benzeri dinamik ve esnek yapıda olan programlama dillerinden de etkilenip esinlenerek Codehaus isminde kaynağı açık yazılım geliştirme portalı sınırları dahilinde geliştirildi. Daha sonra ise projeye bir başka geliştiriciler de eklendi.

Bir başka açıdan da bakılacak olunursa başka türlü açıklanabilir. Bu dil 2003senesinde Java Corp tarafından nesneye odaklı bir programlama dili olarak üretildi fakat o dönemlerde pek rağbet görmedi. Java, C benzeri dillerin gölgesinde kalarak arasından sıyrılıp ikisini de geçip bu iki büyük dili yerle bir etmek hiç mi hiç kolay bir iş değil. Bunlara rağmen 2003’ten sonra proje başarısız olduğu zaman bu yoldan kopulmadı kısmen de olsa devam edildi ve iş tamamen bırakılmadı. 2007 senesinde ilk profesyonel adım atıldı ve yepyeni bir Groove sürümünün yayını yapıldı. Bu yayından sonra da Linkedin, Mastercard, Airbus ve daha sonraki zamanlarda ise Netflix Groovy’e katılan popüler sitelerden biri oldu.

Operator Nedir

Groovy içerisinde operator overloading yapabiliyor. Bunun için hangi operatörü overload edebilmek için hangi yöntemin tekrar yazılmasının gerektiğinin bilinmesi gerekiyor. İlaveten Groovy’de aslında Java’da olmayan birden çok operatorde bulunuyor. Örnek olarak Regex işlemleri için birbirinden ayrı operatörler bulunuyor. Bunları ilerleyen zamanlarda Regex konusunda daha da detaylı olarak görmek de son derece mümkün.

Equals

Java’da eski olmayan ve özellikle Java’ya yeni başlayan çoğu kişinin yapmış olduğu yanlış String veya herhangi ayrı bir nesneyi “==” operatörü ile kontrol altına almak. Java tarafında bu durum hem referans nesneyi hem de değerini kontrol ediyor. Bu nedenden ötürü aşağı yukarı bütün karşılaştırma işlemleri beklenilen sonucu vermiyor fakat Groovy’de bu ayrım yok. İstenildiği gibi bu kontroller yapılabilir. Java’da “==” operatörü beklenildiği gibi de çalışmayabilir her zaman ve çalışmadığı durumlarda genellikle “equals” yöntemi kullanılıyor. Kısacası iki nesnenin dengesini kontrol edebilmek amacıyla hem null kontrolü hem de Equals kontrolü bir arada yapılmalı. Bu durumda Groovy’de kaldırılmış oluyor.

 

Def ve Type

Groovy bünyesinde yer alan örneklerden de görüleceği gibi daha çok def kullanılıyor. Def sözcüğünü Java’da yer alan Object sınıfı olarak düşünülebilir ama def sözcüğünün çok kullanılması bazı durumda hava karıştırıcı olabiliyor. Bu nedenden ötürü bazı durumlar dahilinde def kullanılmalı bazı durumlarda ise d Type kullanılmalı. Sınıfların nitelikleri kullanılıyorken mutlak suretle Type kullanılmalı.

                                   gÖrsel - 1

Ama bir kod bloğu bünyesinde kalıcı olmayan geçiçi bir değişken kullanıldığı durumlarda ise def kullanılmalı. Yöntem parametreleri için ise eğer parametre sahiden Object sınıfında olmak zorunda değilse de Type kullanılmalı.

                                             gÖrsel - 2

Alt Nesneler

Bu noktada neyin kastedildiğini daha iyi anlayabilmek amacıyla şöyle bir örnek verilebilir. Varsayılsın ki bir tane kullanıcı sınıfı var mesela (User.java). Bu sınıfın bir niteliği adress bilgisi vazifesinde (Address.java) bu adres içinde cadde bilgisi bulunuyor (Address#getStreet). Bu duruma erişebilmek amacıyla Java’da yapılması gereken

                                         gÖrsel - 3

Bu noktada tabi ki de user nesnesi null olduğu zaman veya address nesnemiz null olduğundan ötürü NullPointerException alınması çok olağan. Bununla birlikte bir de street nesnesi kullanılmadan önce null teftişinin yapılması gerekli. NullPointerException’dan sıvışıp kaçınabilmek için en kolay yoldan yazılması gerekli kod da aşağıda olduğu gibi olmalı.

                  gÖrsel - 4

Bu durum dahilinde yine de street nesnesinin null olma olasılığı hala mevcut fakat şu an için onu dikkate almamak pek de yanlış olmaz. Bunun Groovy üzerindeki karşılığı “?.” operatörü. Yani;

                               gÖrsel - 5

Bu bölümde street nesnesinin null olma ihtimali hala var lakin Elvis operatörüyle onu da basit bir şekilde geçebilmek son derece mümkün.

String

Groovy’de java ile birlikte değişiklik gösteren başka bir konuysa String’ler. String Java’da bilindiği gibi alışıldığı gibi String’ten biraz daha farklı ki zaten Groovy çevresinde String olarak değil de GString olarak isimlendiriliyor. Mesela Groovy’de multiline string tanımlanabilir. Java’daki gibi “+” operatörü ile bağlanmasına gerek olmuyor. Bu nedenden dolayı daha kullanışlı bir string yapısına sahip oluyor.

Örneğin,

                              gÖrsel - 6

İlaveten bulunulduğu kod bloğu dahilinde tanımlanan bütün nesneleri, değişkenleri ve nesne niteliklerini string dahilinde kullanmak mümkün. Yine kullanıcı (User) örneği kullanılacak olunursa

                            gÖrsel - 7

Regex

Daha önce operatörler kısımda Regex’ten bahsedilirken Regex için ayrı operatörlerin bulunulduğundan bahsedilmişti. Bu operatörler alt kısma Java’nın Regex cinsleri (Pattern, Matcher) kullanılıyor.

Sonuç Olarak

Sonuç olarak bakıldığı vakit diğer yazılım dilleri gibi Groovy’nin de birçok zorlu süreçten geçerek bugünlere geldiği aşikâr bir durum. İlk başta tutmamasına rağmen çabasından ve arzusundan bir şey kaybetmeden gelişimini sürdürerek Groovy yazılım dilindeki hayatına devam ediyor. Dinamik diller arasında yer alıp kolay ve yüksek entegre olma yeteneğine sahip dillerinden biri olması piyasada kalıp gün geçtikçe ilerlemesine katkı sağlayan en büyük unsurlardan birkaçı olarak gösterilebilir. Bu durumdan doğan avantajların da doğru bir şekilde kullanılarak bir sonraki döneme daha umutlu ve güçlü bir şekilde giren Groovy gün geçtikçe gücünü arttırıyor. Bu güçle beraber yazılım dünyası yeni bir bakış açısıyla birlikte belki de yepyeni bir yazılım dili de kazanabilir ilerleyen yıllarda…