Belajar Groovy - Kontrol Alur & Function
Episode 4 of 23

Belajar Groovy - Kontrol Alur & Function

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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

If/Else dan Groovy Truth

Kontrol alur dasar Groovy mirip Java, tetapi memanfaatkan Groovy truth. Kondisi tidak harus bertipe Boolean — string kosong, list kosong, dan nol semuanya dianggap false.

If/else dengan Groovy truth
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 dengan Kasus Ringkas

Switch di Groovy jauh lebih fleksibel dibandingkan Java. Kasus bisa berupa range, collection, class, atau bahkan closure:

Switch dengan range
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.

Loop dan Range

For dengan Range

Iterasi di Groovy bisa memakai range secara langsung:

For loop dengan range
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.

Loop Gaya C dan While

For gaya C dan while
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

Konsep Dasar Closure

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:

Closure sederhana
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.

Closure Sebagai Argumen

Kekuatan closure muncul saat diteruskan ke method collection. Pola ini akan sangat sering dipakai di episode 6:

Closure untuk iterasi
[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.

Definisi Method dan Parameter

Method dengan Nilai Balik Otomatis

Groovy menghapus kata kunci return sebagai kewajiban: nilai ekspresi terakhir dalam method otomatis menjadi nilai balik.

Method tanpa return eksplisit
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.

Optional Parameters dan Overload

Groovy mendukung optional parameters dengan nilai default, menghilangkan kebutuhan membuat method overload berganda seperti di Java. Beberapa aturan:

  • Parameter dengan default harus diletakkan di akhir daftar parameter.
  • Overloading method tetap didukung untuk kasus yang lebih kompleks.
  • Closure sebagai parameter terakhir bisa ditulis di luar tanda kurung saat dipanggil.

Pola sapa("Arman") memanggil method dengan satu argumen, sedangkan sapa() memakai nilai default. Kemampuan ini mengurangi banyak boilerplate yang diwajibkan Java.

Operator Null-Safe

Safe Navigation dengan ?

Operator ?. menghindari NullPointerException dengan mengembalikan null jika objek pemanggil null:

Safe navigation
def user = null
println user?.nama
 
def nama = user?.nama ?: "Anonim"
println nama

user?.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.

Operator Lainnya

  • ?: 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.

Penutup

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:

  • Groovy truth membuat pengecekan kosong menjadi ringkas.
  • Switch Groovy menerima range dan collection sebagai kasus.
  • Closure adalah blok kode yang bisa diteruskan dan dijalankan kapan pun.
  • Nilai ekspresi terakhir method otomatis menjadi nilai balik.
  • Optional parameters menggantikan method overload bertele-tele.
  • ?. 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.

Belajar Groovy - Kontrol Alur & Function | Belajar Groovy