Sitemap
Semih Saydam

Semih Saydam

QA / DevOps Engineer — Be happy :)

Groovy

6 min readAug 9, 2021

--

Merhaba,

Bu yazımızda Groovy syntax’ını anlamaya çalışacağız. Groovy, java içerisinde çalışan son derece kuvvetli bir programlama dilidir. Eğer java kullanıyorsanız Groovy’i anlamakta hiç zorluk çekmiyor olacaksınız. Benim groovy ile tanışmam “pipeline script” yazmak istemem ile başladı. Groovy ile “hello-world” seviyesinde başladıktan sonra birlikte pipeline script de yazıyor olacağız. Öğrendiklerimi sizlere de aktarmaya çalışıyor olacağım. Yazıdaki kodları tuttuğum gitHub reposuna buradan ulaşabilirsiniz.

Hadi başlayalım :)

IntelliJ IDEA üzerinde direkt olarak kullanmaya başlıyor olacağız :

Press enter or click to view image in full size

Project SDK olarak hali hazırda kullandığınız Java version’unuzu verdikten sonra “Groovy library” kısmında bir library bulamıyor olacaksınız. Sağ tarafta bulunan “CREATE…” butonuna tıkladığımızda bizden bir Groovy library istiyor olacaktır. Buradak linkten direkt olarak library’mizi indiriyoruz. Ardından “CREATE…” butonuna tıkladıktan sonra :

Press enter or click to view image in full size

İndirdiğim dosyayı seçiyorum ve “Open”a tıklıyorum. Ardından projenize isim verip projeyi oluşturabilirsiniz. Projeyi oluşturduktan sonra “src” altında bir “Groovy class” oluşturuyoruz :

Press enter or click to view image in full size

İsmini “HelloWorld” olarak verdiğimiz groovy class’ımız oluştu. Class’ımızın içine ilk komutumuz olan “println ‘Merhaba Medium !’ “u yazıyoruz ve çalıştırıyoruz :

Press enter or click to view image in full size

Bu şeklide class oluşturabileceğimiz gibi direkt olarak “groovy script” de yazabilirdik. Bunu yapabilmek için yukarıdaki “class” ifadesini silmemiz yeterli. Yada “New → Groovy Script” ile de yeni bir script dosyası oluşturabilirsiniz :

Press enter or click to view image in full size

Class ve script arasındaki logo farkını sol tarafta görebilirsiniz. Script yazarken direkt olarak komutumuzu yazdık ve sağ tıklayarak “Run” ile çalıştırdık.

Şimdi “def” tanımlamasıyla başlayalım. Değişken tanımlarken def ile direkt olarak tip belirtmeden tanımlayabiliyorsunuz :

Press enter or click to view image in full size

Gördüğünüz üzere “name” değişkenine string atadıktan sonra değerini integer bir değerle değiştirebildik. Çoğu yazılım dili size bu imkanı vermiyor olacaktır. Java’nın özelliklerini kullandığı için aynı zamanda String ve int tanımlamalarınızı da yapabilirsiniz :

Press enter or click to view image in full size

Ama “def” tanımlaması varken bu ayrıma gitmek çok da gerekli olmayacaktır. Şimdi matematiksel bazı işlemleri nasıl yapabileceğimize de hızlıca bakalım :

Press enter or click to view image in full size

Ardından “age++” gibi önce artırma/azaltma ve sonra artırma/azaltma işlemini de yapalım :

Press enter or click to view image in full size

25 olarak ilk değerini verdiğimiz değişkenimiz için “age++” şeklinde başlattığımızda öncelikle değişkeni yazacaktır ardından artıracaktır. Yani age’i 25 olarak yazdı gördüğünüz üzere, ardından değerini 26 olarak set’ledi. Sonraki satırda “++age” yaparken 26 olan değeri önce 27 yaptı sonra age’i 27 olarak yazdı. Aynı mantıkla “age — “ yaparken önce 27i yazdı sonra bir eksilterek 26'ya set’ledi. Son olarak da “ — age” yaparken önce 26'yı bir azaltıp 25 yaptı sonra age değişkenini 25 olarak yazmış oldu.

Şimdi bazı matematik fonksiyonlarını inceleyelim :

Press enter or click to view image in full size

Burada çoğu komut zaten ne yaptığını kendi açıklıyor gibi. Bazılarına bakacak olursak, Sayı.pow(index) ifadesi “sayı üssü index”in cevabını size verir. Math.round() ise en yakın tam sayıyı döner gibi…Buna benzer bazı matematik fonksiyonlarını da github üzerindeki kodlardan görebilirsiniz.

Şimdi de biraz String’lerle oynayalım :

Press enter or click to view image in full size

Öncelikle “//parameter” kısmında string içine ${name} şeklinde parametre yerleştirdik. Ardından “//multi-line” kısmında üç adet tek tırnak içinde çoklu satır halinde string yazabildiğimizi gördük. Bunu Jenkinste echo yazarken de kullanmıştık. Ardından “//index” kısmında string’teki bir harfin index’ini bulma gibi işlemler yaptık. Son olarak “//repeated” kısmında da tekrar eden bir string oluşturup içindeki bazı ifadeleri sildik, parçaladık ve listeye dönüştürdük.

Get Semih Saydam’s stories in your inbox

Join Medium for free to get updates from this writer.

Şimdi de biraz Array’leri inceleyelim :

Press enter or click to view image in full size

Öncelikle 5nci satırda gördüğünüz üzere bir integer array oluşturduk. Ardından array içinden index’e göre elemanlarımı çektik. Array’e nasıl eleman ekleyebildiğimizi gördük. 14'ünce satırda ise biraz daha farklı bir şey görüyoruz. Bir array’in içinde String, integer, float ve başka bir array bulunabiliyor. Yani bir array, içinde birden fazla tipi barındırabiliyor. 16ncı satırda da array içindeki array’ın elemanlarına nasıl ulaşabileceğinizi görebilirsiniz. Bunun yanında ;

Press enter or click to view image in full size

Array’imize eleman ekleme ve çıkarma işlemlerini 7 ve 8nci satırdaki gibi basit bir şekilde yapabilirsiniz. 11nci satırdaki gibi [0..3] ifadesi gibi ifadelerle birinci elemandan dördüncü elemena kadar array’i alabilirsiniz. Son üç satırdaki gibi “sort” vb. işlemleri kolayca yapabilirsiniz.

Şimdi “map” konusunu inceleyelim. Burada değerleri index yerine “key-value” ilişkisiyle tutacağız.

Press enter or click to view image in full size

Yine her tipi içinde barındıran bir listemiz var. Burada farklı olarak “key” değerleri ile elemanlarımızı tutuyoruz. “.put” ile listeye yeni bir eleman ekliyoruz ve ardından listede bir key’in var olup olmadığını da kontrol ettiğimiz örnek bir fonksiyonu(containsKey) da görüyoruz.

Şimdi operatörleri de kullanarak küçük bir “if” yazalım :

Press enter or click to view image in full size

“myAge” adında bir değişken tanımladıktan sonra aşina olduğumuz “if” yapısını yukarıda görebilirsiniz. Burada “else if” bloğunda “ve” operatörü kullandığımızı görebilirsiniz. Daha önce karate yazılarında da kullandığımız basit ama etkili bir “if” yapısı vardı :

Press enter or click to view image in full size

Değişkeni true olarak set’lediğimiz için “:” dan önceki kısım seçiliyor ve “println(‘True ise bu kısım çalışır’)” haline geliyor. isTrue kısmı bir condition’dur, bunu daha iyi anlamak için kodu aşağıdaki hale getirelim :

Press enter or click to view image in full size

Verdiğimiz sayı 3'ten büyük olmadığı için “:”den sonraki kısım seçildi ve “println(‘Sayı 3 ten büyük degildir’)” haline geldi.

Switch-case kullanımı da aşağıdaki gibi :

Press enter or click to view image in full size

Burada gördüğünüz üzere “0..6” kullanımı ile 0–6 yaş aralığı için bir koşul yazabiliyoruz. “default” ifadesiyle de eğer koşullardan hiçbiri sağlanmazsa olacak durumu belirtiyoruz.

Şimdi de for döngüsü ile bazı işlemler yapalım :

Press enter or click to view image in full size

31'inci satırdaki “for” loop’a zaten aşinayız. 32'nci satırdaki for loop’ta (2..6) ifadesini görüyoruz. Bu range ve for loop’u birleştirerek 2 ve 6 arasında çalışacak bir döngü elde ediyoruz. Aynı mantık ile 34'üncü satırda yazdığımız liste içinde dönecek for loop’u da 35nci satırda görüyoruz. 37nci satırda oluşturduğumuz map içinde dönecek for loop’ta ise gördüğünüz üzere “key” ve “value” değerlerine ulaşabiliyoruz.

Fonksiyonları inceleyerek yolumuza devam edelim :

Press enter or click to view image in full size

Öncelikle 15inci satırda gördüğünüz üzere basit bir fonksiyon yazarak başlayalım. Burada “static def” ile fonksiyon tanımladık. Yani gördüğünüz üzere çoğu tanım için “def” kullanımını yapıyoruz. Ardından 17nci satırdaki gibi bir toplama işlemi fonksiyonu yazıyoruz. 21nci satırdaki fonksiyonda ise “it” tanımı dikkatinizi çekmeli, “it”i listede dolanan bir iterator olarak düşünebiliriz. 26ncı fonksiyonda ise (int… sayi) şeklinde bir tanımla verdik, burada siz içine kaç tane integer gönderirseniz o kadar integer ile işlem yapan bir fonksiyon oluşturmuş olduk.

“it” ve “each” kullanımlarını daha iyi anlamak için aşağıdaki kullanımları inceleyelim :

Press enter or click to view image in full size

4ncü satırdaki kullanım aslında “it” ve “each” kullanımını basitçe anlatıyor. Listenin her bir elemanı dolanıp bizim için yazdırıyor. 7nci satırdaki kullanımda ise map için “it” ve “each” kullanımını görüyoruz. 16ncı satırdaki kullanımda “.find” ve “item” kullanımıyla her elemanı gezip istediğimiz elemanı bulup değişkene atıyoruz. 20nci satırdaki kullanımda ise listedeki elemanlardan 5'ten büyüklerden bir liste oluşturuyoruz.

Groovy hakkında az da olsa bilgi edindik. Sonraki yazılarda, kaynakçada da bulabileceğiniz “groovy ile jenkins pipeline yazma” konusunun üzerinde durmaya çalışacağız. Mutlu günler :)

Kaynakça:

  • https://groovy-lang.org/install.html
  • https://stackoverflow.com/questions/54902509/what-is-the-groovy-it
  • https://www.eficode.com/blog/jenkins-groovy-tutorial
  • https://www.youtube.com/watch?v=B98jc8hdu9g
  • https://www.jenkins.io/doc/book/pipeline/syntax/#scripted-pipeline
  • https://www.jenkins.io/doc/book/pipeline/shared-libraries/

--

--

Semih Saydam
Semih Saydam

Written by Semih Saydam

QA / DevOps Engineer — Be happy :)