Episode ini menguasai sintaks inti Kotlin: deklarasi val dan var, tipe data dan string templates, control flow dengan if dan when, loop dan ranges, fungsi dengan default arguments, serta extension functions dan infix notation.

Arsitektur Kotlin sudah kalian pahami di episode 2. Sekarang waktunya naik satu tingkat: menguasai sintaks yang akan kalian tulis setiap hari. Episode 3 membahas variabel, tipe data, string templates, control flow, fungsi, hingga extension functions dan infix notation.
Perbedaan terbesar dari Java akan terasa di sini: Kotlin merancang sintaks agar ekspresif dan ringkas. if bisa menjadi ekspresi, when menggantikan switch yang jauh lebih kuat, dan fungsi bisa punya default arguments yang menghilangkan overload boilerplate.
Setiap konsep di episode ini langsung dipakai di semua episode berikutnya, jadi pastikan kalian benar-benar memahaminya sebelum lanjut.
Kotlin membedakan variabel read-only dan mutable: val untuk nilai yang tidak bisa diubah setelah diinisialisasi, dan var untuk nilai yang bisa diubah. Biasakan memakai val sebanyak mungkin — kode lebih aman dan mudah diprediksi:
val nama = "Arman"
var umur = 26
umur = 27Deklarasi di atas: nama tidak bisa diubah setelah diinisialisasi, sementara umur bisa. Compiler akan menolak kalau kalian mencoba menugaskan ulang variabel val — perlindungan yang mencegah bug di tahap kompilasi.
Tipe dasar Kotlin meliputi Int, Long, Double, Float, Boolean, Char, dan String. String templates memungkinkan menyisipkan ekspresi langsung ke dalam teks:
val produk = "kopi"
val harga = 15_000
println("Harga $produk adalah $harga rupiah")
println("Harga total: ${harga * 2}")Sintaks $produk menyisipkan nilai variabel, sedangkan ${harga * 2} menyisipkan hasil ekspresi. String templates ini jauh lebih nyaman daripada concatenation dengan tanda plus.
Di Kotlin, if adalah ekspresi yang mengembalikan nilai — tidak seperti Java yang hanya statement:
val nilai = 75
val status = if (nilai >= 60) "Lulus" else "Tidak lulus"
println(status)Karena if mengembalikan nilai, kalian bisa menugaskannya langsung ke variabel. Tidak ada operator ternary di Kotlin — if ekspresi menggantikannya dengan lebih jelas.
when jauh lebih kuat dari switch di Java: bisa mencocokkan nilai, range, tipe, dan kondisi tanpa memerlukan break:
val skor = 85
when (skor) {
in 90..100 -> println("Sempurna")
in 75..89 -> println("Bagus")
in 60..74 -> println("Cukup")
else -> println("Perlu belajar lagi")
}Sintaks in 90..100 memakai range yang menulis rentang angka secara ringkas. when mengevaluasi cabang yang cocok, dan cabang else menangani semua kasus lain.
Kotlin memakai for dengan iterasi yang bersih:
for (i in 1..5) {
println(i)
}
for (i in 10 downTo 1 step 2) {
print("$i ")
}
while (true) {
println("loop sampai break")
break
}Range 1..5 mencakup angka 1 sampai 5, 10 downTo 1 berjalan mundur, dan step 2 melompat dua angka. Kombinasi ini menulis loop yang ekspresif tanpa boilerplate.
Fungsi di Kotlin bisa punya nilai default sehingga pemanggil bisa mengabaikan parameter opsional. Named parameters membuat pemanggilan lebih terbaca:
fun buatEmail(penerima: String, subjek: String = "Tanpa judul", cc: String? = null): String {
return "Email untuk $penerima, subjek $subjek, cc $cc"
}
val email = buatEmail(penerima = "user@example.com", subjek = "Halo")Pemanggil di atas memakai named arguments dan hanya menyebut dua dari tiga parameter — yang lain memakai nilai default. Ini menggantikan banyak overload yang biasanya ditulis di Java.
Untuk fungsi sederhana, Kotlin mengizinkan body berupa ekspresi tunggal tanpa kurung kurawal:
fun luasPersegi(sisi: Int): Int = sisi * sisi
fun sapa(nama: String): String = "Halo, $nama!"Fungsi di atas mengembalikan hasil ekspresinya langsung. Dengan type inference, tipe kembalian bisa dihilangkan untuk fungsi single-expression, membuatnya semakin ringkas. Seluruh contoh di episode ini bisa kalian uji dengan kotlinc Main.kt -include-runtime -d main.jar lalu menjalankan JAR yang dihasilkan.
Extension functions memungkinkan menambah fungsi ke sebuah tipe tanpa mengubah definisi aslinya. Ini adalah salah satu fitur yang paling dipakai di seluruh ekosistem Kotlin:
fun String.hitungKata(): Int = this.split(" ").size
val kalimat = "belajar kotlin itu menyenangkan"
println(kalimat.hitungKata())String.hitungKata() memperlakukan String seolah memiliki fungsi hitungKata. Receiver this di dalam body merujuk ke String yang dipanggil. Extension functions ini akan kalian temui di banyak library, termasuk kotlinx dan Android.
Fungsi yang dideklarasikan dengan kata kunci infix bisa dipanggil tanpa tanda titik dan kurung, menciptakan sintaks yang mirip bahasa alami:
infix fun Int.kali(angka: Int): Int = this * angka
val hasil = 6 kali 7
println(hasil)Pemanggilan 6 kali 7 terlihat seperti kalimat. Infix notation berguna untuk fungsi yang membaca alami seperti ini, dan dipakai pada operasi seperti map dengan pasangan key-value di episode 5.
Episode 3 melengkapi bekal sintaks inti kalian: val dan var, string templates, if dan when sebagai ekspresi, loop dengan ranges, fungsi dengan default arguments, serta extension functions dan infix notation. Semua ini adalah alat yang akan kalian pakai di setiap episode berikutnya.
Inti yang harus dibawa pulang:
val secara default, var hanya jika benar-benar perlu.if dan when adalah ekspresi yang bisa mengembalikan nilai.$variabel dan ${ekspresi}.Di episode 4 selanjutnya kita akan membahas classes, objects, dan OOP — deklarasi class, constructor dan properties, visibility modifiers, data classes, sealed classes, inheritance, interface, hingga companion objects dan pola singleton. Ini saatnya membangun dunia objek kalian dengan Kotlin.