Episode ini membahas kontrol alur Groovy: if/else, switch, loop, dan range, diikuti dengan closure, definisi method, serta optional parameters. Kalian juga akan memahami Groovy truth, safe navigation dengan operator, dan pola null-safe yang khas Groovy.

Sintaks dan tipe data hanyalah kosakata. Episode 4 inilah saat kalian mulai menyusun kalimat — logika program dengan kontrol alur dan fungsi. Groovy menyederhanakan hampir semua konstruksi Java, sekaligus menambah beberapa fitur yang tidak dimiliki Java.
Kalian akan belajar if/else, switch, loop dengan range, closure, definisi method, optional parameters, Groovy truth, safe navigation, dan null-safe operators. Setelah episode ini, kalian bisa menulis logika bisnis yang nyata.
Kontrol alur dasar Groovy mirip Java, tetapi memanfaatkan Groovy truth. Kondisi tidak harus bertipe Boolean — string kosong, list kosong, dan nol semuanya dianggap false.
def nama = ""
if (nama) {
println "Nama terisi: ${nama}"
} else {
println "Nama masih kosong"
}Karena nama adalah string kosong, Groovy truth mengevaluasinya sebagai false, sehingga blok else yang berjalan. if (nama) dengan string kosong menunjukkan bagaimana Groovy menghapus boilerplate pengecekan seperti nama != null && !nama.isEmpty().
Switch di Groovy jauh lebih fleksibel dibandingkan Java. Kasus bisa berupa range, collection, class, atau bahkan closure:
def nilai = 85
switch (nilai) {
case 90..100:
println "Nilai A"
break
case 80..<90:
println "Nilai B"
break
default:
println "Nilai lain"
}case 90..100 memakai range sebagai kasus, dan case 80..<90 memakai range eksklusif. Fitur ini membuat switch Groovy menjadi alat yang sangat ekspresif untuk klasifikasi nilai.
Iterasi di Groovy bisa memakai range secara langsung:
for (i in 1..5) {
println "Iterasi ke-${i}"
}for (i in 1..5) mengulangi blok sebanyak lima kali dengan i berjalan dari 1 sampai 5. Bentuk ini lebih ringkas daripada for klasik gaya C yang juga tetap didukung Groovy.
for (int i = 0; i < 3; i++) {
println "Indeks ${i}"
}
def jumlah = 0
while (jumlah < 3) {
println "Jumlah: ${jumlah}"
jumlah++
}Pilih for (i in 1..5) untuk iterasi sederhana dan for gaya C saat butuh indeks atau langkah khusus. while dipakai ketika jumlah iterasi belum diketahui di awal.
Closure adalah blok kode yang bisa disimpan, diteruskan, dan dijalankan — jantung dari ekspresivitas Groovy. Closure ditulis dalam kurung kurawal dengan parameter opsional yang dipisahkan panah:
def sapa = { nama -> println "Halo, ${nama}" }
sapa("Arman")
def kali = { a, b -> a * b }
println kali(6, 7)def sapa = { nama -> println "Halo, ${nama}" } mendefinisikan closure dengan satu parameter. kali(6, 7) memanggil closure kali dengan dua argumen dan mengembalikan hasil perkalian.
Kekuatan closure muncul saat diteruskan ke method collection. Pola ini akan sangat sering dipakai di episode 6:
[1, 2, 3, 4].each { angka ->
println "Nilai: ${angka}"
}[1, 2, 3, 4].each { angka -> println "Nilai: ${angka}" } memanggil method each yang menerima closure. Groovy menyediakan variabel implisit it untuk closure berparameter tunggal, sehingga bisa ditulis lebih pendek lagi.
Groovy menghapus kata kunci return sebagai kewajiban: nilai ekspresi terakhir dalam method otomatis menjadi nilai balik.
def tambah(int a, int b) {
a + b
}
def sapa(String nama = "Teman") {
"Halo, ${nama}!"
}
println tambah(3, 4)
println sapa()
println sapa("Arman")def tambah(int a, int b) { a + b } mengembalikan a + b tanpa return. Perhatikan juga def sapa(String nama = "Teman") yang memakai optional parameter: jika dipanggil tanpa argumen, nilai default Teman yang dipakai.
Groovy mendukung optional parameters dengan nilai default, menghilangkan kebutuhan membuat method overload berganda seperti di Java. Beberapa aturan:
Pola sapa("Arman") memanggil method dengan satu argumen, sedangkan sapa() memakai nilai default. Kemampuan ini mengurangi banyak boilerplate yang diwajibkan Java.
Operator ?. menghindari NullPointerException dengan mengembalikan null jika objek pemanggil null:
def user = null
println user?.nama
def nama = user?.nama ?: "Anonim"
println namauser?.nama tidak melempar exception meskipun user adalah null. Operator Elvis ?: lalu memberikan nilai pengganti Anonim saat hasilnya null. Kombinasi user?.nama ?: "Anonim" adalah pola null-safe paling idiomatis di Groovy.
?: Elvis, nilai default untuk null; singkatan a ?: b untuk a != null ? a : b.?. safe navigation untuk method dan property.<=> spaceship, membandingkan lalu mengembalikan -1, 0, atau 1.Episode 4 melengkapi fondasi logika Groovy: kontrol alur dengan Groovy truth, switch dengan range, iterasi dengan for dan closure, definisi method dengan nilai balik otomatis dan optional parameters, serta operator null-safe.
Inti yang harus dibawa pulang:
?. dan ?: menghilangkan mayoritas NullPointerException.Di episode 5 selanjutnya kita akan membahas object-oriented Groovy — kelas, objek, property, constructor, inheritance, trait, interface, serta pengenalan AST transformations. Kalian akan mulai membangun struktur data yang lebih terorganisasi.