Episode ini membedah sintaks dasar Groovy: variabel dinamis dengan def, tipe primitif, string, list, dan map. Kalian juga akan belajar GString, multi-line string, serta operator string dan literal Groovy yang membuat penulisan kode jauh lebih ringkas.

Ini episode yang paling penting untuk membangun kebiasaan menulis Groovy. Sintaks dan tipe data adalah kosakata bahasa yang akan dipakai di seluruh series, jadi pastikan kalian mengikuti setiap contoh di terminal kalian sendiri.
Episode 3 membahas variabel dinamis dengan def, tipe primitif, string, list, dan map, lalu masuk ke GString, multi-line string, serta operator string. Di akhir episode, kalian akan menulis kode Groovy dengan nyaman tanpa terbebani sintaks Java.
Java mengharuskan deklarasi tipe eksplisit, misalnya String nama. Groovy memberikan kebebasan dengan def, di mana tipe ditentukan dari nilai yang diberikan saat runtime.
def nama = "Arman"
def umur = 25
def nilai = 3.14
def aktif = true
println "${nama} berumur ${umur} tahun"def nama = "Arman" membuat variabel bertipe String secara otomatis, dan def umur = 25 bertipe Integer. Perhatikan bahwa interpolasi GString terjadi di dalam string bertanda kutip ganda. String bertanda kutip tunggal tidak melakukan interpolasi.
Di level mesin, Groovy memakai kelas pembungkus Java secara otomatis. Angka 25 disimpan sebagai Integer, 3.14 sebagai BigDecimal, dan true sebagai Boolean. Kalian bisa memeriksa tipe sebenarnya dengan method getClass():
def angka = 42
println angka.getClass()
def desimal = 2.5
println desimal.getClass()Output menunjukkan class java.lang.Integer dan class java.math.BigDecimal. angka.getClass() adalah pola umum untuk memeriksa tipe dinamis — sangat berguna saat kode menerima input dari sumber eksternal.
Groovy membedakan dua jenis string utama:
"Halo, ${nama}".String kutip tunggal yang berisi expression tidak diinterpolasi, sedangkan kutip ganda mengevaluasi $ di dalamnya. Berikut perbandingannya:
def nama = "Arman"
def a = 'Halo, ${nama}'
def b = "Halo, ${nama}"
println a
println bOutput a menampilkan literal ${nama} secara apa adanya, sedangkan b menampilkan Halo, Arman. 'Halo, ${nama}' adalah contoh GString yang sengaja tidak diinterpolasi karena memakai kutip tunggal.
Untuk teks panjang seperti template atau dokumen, Groovy menyediakan string tiga kutip. Bentuk tiga kutip tunggal tidak melakukan interpolasi, sedangkan tiga kutip ganda mendukung interpolasi GString:
def teks = """
Baris pertama
Baris kedua dengan nilai ${42}
"""
println teksString tiga kutip ganda mempertahankan baris baru dan mengevaluasi interpolasi. Pola ini sangat berguna untuk membuat pesan log atau template script di episode 8 nanti.
Groovy mendukung operator string yang tidak ada di Java:
+ dan << untuk penggabungan string.* untuk pengulangan string, misalnya "-" * 10.== untuk perbandingan nilai (bukan referensi seperti di Java).def s = "Groovy"
println s * 3
println "a" < "b"List dan map adalah dua collection paling sering dipakai. Groovy menyediakan literal sederhana menggunakan kurung siku:
def listAngka = [1, 2, 3, 4, 5]
def daftarNama = ["Arman", "Budi", "Citra"]
def peta = [nama: "Arman", umur: 25]
println listAngka[0]
println peta.nama
println peta["umur"]def listAngka = [1, 2, 3, 4, 5] membuat ArrayList, dan def peta = [nama: "Arman"] membuat LinkedHashMap. Akses elemen bisa memakai indeks numerik untuk list, atau dot-notation dan kurung siku untuk map.
List dan map bisa dimanipulasi dengan method bawaan yang sangat intuitif:
def list = [1, 2, 3]
list << 4
list.remove(0)
println list
def peta = [a: 1]
peta.b = 2
peta["c"] = 3
println petaOperator << menambahkan elemen ke list, dan assignment langsung menambah key baru ke map. list << 4 adalah cara idiomatis Groovy untuk append — tidak ada add bertele-tele seperti di Java.
Ada perbedaan halus yang sering menjebak: [a: 1] adalah map, sedangkan [1, 2] adalah list. Untuk membuat map kosong gunakan [:], dan untuk list kosong gunakan []. Salah memakai keduanya akan menghasilkan error type saat runtime.
Range adalah fitur khas Groovy yang merepresentasikan rentang nilai bertanda .. atau ..<:
def angka = 1..10
def huruf = "a".."z"
println angka.contains(5)
println huruf.size()def angka = 1..10 membuat range inklusif dari 1 sampai 10, dan 1..<10 bersifat eksklusif di ujung kanan. Range akan menjadi dasar iterasi for di episode 4.
Groovy tidak membatasi nilai boolean hanya pada true dan false. Aturan berikut dikenal sebagai Groovy truth:
false.false.false.false.Aturan ini menyederhanakan banyak kondisi. Kita akan memakainya secara intensif di episode 4 ketika membahas kontrol alur.
Episode 3 memberikan kalian kosakata inti Groovy: def untuk variabel dinamis, perbedaan kutip tunggal dan ganda dengan GString, multi-line string, operator string, literal list dan map, range, serta konsep Groovy truth.
Inti yang harus dibawa pulang:
def menunda penentuan tipe hingga runtime.[1, 2] adalah list, [a: 1] adalah map, [:] map kosong.<<, *, dan == memberi Groovy keunggulan ekspresif.false.Di episode 4 selanjutnya kita akan membahas kontrol alur dan function — if/else, switch, loop, range, closure, method definition, optional parameters, safe navigation, dan null-safe operators. Di sinilah kalian mulai menyusun logika program yang sesungguhnya.