Glosarium adalah kamus istilah teknis yang sering muncul saat belajar Kotlin. Setiap entri disertai definisi singkat dan contoh kode ringkas. Pada chapter ini kita kumpulkan tiga puluh istilah paling sering dipakai, dari yang fundamental (variable, function, class) hingga lanjutan (value class, builder inference, K2 compiler), plus demo runnable untuk delapan kategori kunci.
Tiga Puluh Istilah Inti #
Tabel berikut memetakan istilah ke definisi singkatnya. Setiap istilah akan diilustrasikan dengan demo pada cuplikan kode berikutnya:
| Istilah | Definisi singkat |
|---|---|
| Variable | Pengenal yang menampung nilai. val (read-only), var (mutable). |
| Function | Blok kode yang dapat dipanggil. fun nama(param: T): R. |
| Class | Blueprint untuk membuat object. class Pengguna(val nama: String). |
| Object | Singleton dideklarasikan dengan object. Hanya satu instance. |
| Data class | Class khusus untuk data; auto equals/hashCode/toString/copy. |
| Sealed class | Class terbatas; semua subclass harus di file yang sama (1.5+ lintas file). |
| Interface | Kontrak method tanpa implementasi (atau default method). |
| Enum class | Tipe dengan nilai tetap. enum class Arah { UTARA, TIMUR }. |
| Generic | Tipe parameter. class Box<T>(val isi: T). |
| Nullable | Tipe yang boleh null, ditandai ?. String? bisa null, String tidak. |
| Lambda | Fungsi anonim. { x: Int -> x * 2 }. Bisa pakai it bila 1 parameter. |
| Higher-order function | Fungsi yang menerima/return fungsi. fun apply(f: (Int) -> Int). |
| Extension function | Menambah method ke class tanpa modifikasi. fun String.berawalan(). |
| Scope function | let, run, with, apply, also — utility untuk blok pada objek. |
| Coroutine | Lightweight thread; bisa suspend tanpa blocking. launch { }, async { }. |
| Suspend | Modifier function yang bisa pause. suspend fun fetch(): String. |
| Flow | Cold stream nilai async. flow { emit(x) }. Mirip RxJava/Observable. |
| Composable | Fungsi UI Jetpack Compose. @Composable fun Greeting(). |
| Inline function | Body di-inline ke call site; inline fun withLock { }. |
| Value class | Wrapper tipis tanpa alokasi. @JvmInline value class Email(val s: String). |
| Companion object | Singleton di dalam class. companion object { const val PI = 3.14 }. |
| Smart cast | Cast otomatis setelah cek is Type. if (x is String) x.length. |
| Elvis operator | ?: beri default bila null. x ?: "default". |
| Safe call | ?. panggil method bila non-null. nama?.length. |
| Destructuring | Pecah Pair/data class. val (a, b) = Pair(1, 2). |
| When expression | Switch modern. when (x) { 1 -> ...; else -> ... }. |
| Range | Rentang. 1..10, 1 until 10, 1..<10 (2.0+). |
| Builder inference | Kompilator menyimpulkan T dari lambda body. buildList { add(1) }. |
| Definitely non-nullable | T & Any paksa non-nullable di scope tertentu. |
| K2 compiler | Frontend compiler baru (Kotlin 2.0+). Lebih cepat dan akurat. |
Demo Istilah Utama #
Cuplikan berikut mendemokan delapan kategori kunci: data class, sealed class, extension function, scope function, nullable, value class, coroutine (konsep), dan inline function (konsep). Definisi top-level diletakkan di luar function karena Kotlin melarang value class lokal:
// glosarium.kt
// Glosarium istilah Kotlin. Setiap entri: definisi singkat + contoh kode.
// Disusun untuk pemula Kotlin yang masih membangun kosakata teknis.
// === Definisi top-level (tidak bisa lokal di dalam function) ===
data class PenggunaGlos(val nama: String, val umur: Int)
sealed interface HasilGlos {
data class Sukses(val data: String) : HasilGlos
data class Galat(val pesan: String) : HasilGlos
}
@JvmInline
value class Email(val nilai: String)
// ============== Demo untuk setiap kategori istilah ==============
fun dataClassDemo() {
val p = PenggunaGlos("Budi", 25)
println(" data class PenggunaGlos(\"Budi\", 25) -> $p")
println(" auto equals: ${p == PenggunaGlos("Budi", 25)}")
println(" auto copy : ${p.copy(umur = 26)}")
}
fun sealedClassDemo() {
fun ringkas(h: HasilGlos) = when (h) {
is HasilGlos.Sukses -> "sukses: ${h.data}"
is HasilGlos.Galat -> "galat: ${h.pesan}"
}
println(" ringkas(Sukses(\"data\")) = ${ringkas(HasilGlos.Sukses("data"))}")
println(" ringkas(Galat(\"oops\")) = ${ringkas(HasilGlos.Galat("oops"))}")
}
fun extensionFunctionDemo() {
fun String.berawalanHalo(): Boolean = this.startsWith("Halo")
println(" \"Halo dunia\".berawalanHalo() = ${"Halo dunia".berawalanHalo()}")
println(" \"hai\".berawalanHalo() = ${"hai".berawalanHalo()}")
}
fun scopeFunctionDemo() {
val sb = StringBuilder().apply {
append("halo, ")
append("dunia")
}
println(" apply -> $sb")
val panjang = "halo".let { it.length }
println(" let (length) -> $panjang")
}
fun nullableDemo() {
val nama: String? = null
println(" nama?.length = ${nama?.length}")
println(" nama?.length ?: 0 = ${nama?.length ?: 0}")
println(" nama ?: \"(kosong)\" = ${nama ?: "(kosong)"}")
}
fun coroutineDemoConcept() {
// suspend function — bisa pause tanpa blocking thread
// Keyword: suspend, runBlocking, launch, async, await
println(" suspend fun ambilData(): String")
println(" runBlocking { launch { ... } async { ... } }")
println(" Coroutines ringan: bisa ribuan tanpa OOM")
}
fun inlineDemo() {
// inline fun — body digabungkan ke pemanggil, mengurangi alokasi lambda
println(" inline fun <T> withLock(lock: Lock, block: () -> T): T")
println(" Body lambda di-inline ke call site — tidak ada class anonim")
}
fun valueClassDemo() {
val e1 = Email("[email protected]")
val e2 = Email("[email protected]")
println(" Email(\"[email protected]\") = $e1")
println(" e1 == e2 = ${e1 == e2} (berdasarkan nilai)")
println(" Runtime: tidak ada alokasi objek (inlined ke String)")
}
fun main() {
println("=== Glosarium Kotlin ===")
println("Istilah teknis umum beserta contoh kode ringkas.")
println()
val istilah = listOf(
Pair("Variable", "Pengenal yang menampung nilai. `val` (read-only), `var` (mutable)."),
Pair("Function", "Blok kode yang dapat dipanggil. `fun nama(param: T): R`."),
Pair("Class", "Blueprint untuk membuat object. `class Pengguna(val nama: String)`."),
Pair("Object", "Singleton dideklarasikan dengan `object`. Hanya satu instance."),
Pair("Data class", "Class khusus untuk data; auto equals/hashCode/toString/copy."),
Pair("Sealed class","Class terbatas; semua subclass harus di file yang sama (1.5+ lintas file)."),
Pair("Interface", "Kontrak method tanpa implementasi (atau default method)."),
Pair("Enum class", "Tipe dengan nilai tetap. `enum class Arah { UTARA, TIMUR }`."),
Pair("Generic", "Tipe parameter. `class Box<T>(val isi: T)`."),
Pair("Nullable", "Tipe yang boleh null, ditandai `?`. `String?` bisa null, `String` tidak."),
Pair("Lambda", "Fungsi anonim. `{ x: Int -> x * 2 }`. Bisa pakai `it` bila 1 parameter."),
Pair("Higher-order function", "Fungsi yang menerima/return fungsi. `fun apply(f: (Int) -> Int)`."),
Pair("Extension function", "Menambah method ke class tanpa modifikasi. `fun String.berawalan()`."),
Pair("Scope function", "let, run, with, apply, also — utility untuk blok pada objek."),
Pair("Coroutine", "Lightweight thread; bisa suspend tanpa blocking. `launch { }`, `async { }`."),
Pair("Suspend", "Modifier function yang bisa pause. `suspend fun fetch(): String`."),
Pair("Flow", "Cold stream nilai async. `flow { emit(x) }`. Mirip RxJava/Observable."),
Pair("Composable", "Fungsi UI Jetpack Compose. `@Composable fun Greeting()`."),
Pair("Inline function", "Body di-inline ke call site; `inline fun withLock { }`."),
Pair("Value class", "Wrapper tipis tanpa alokasi. `@JvmInline value class Email(val s: String)`."),
Pair("Companion object","Singleton di dalam class. `companion object { const val PI = 3.14 }`."),
Pair("Smart cast", "Cast otomatis setelah cek `is Type`. `if (x is String) x.length`."),
Pair("Elvis operator","`?:` beri default bila null. `x ?: \"default\"`."),
Pair("Safe call", "`?.` panggil method bila non-null. `nama?.length`."),
Pair("Destructuring", "Pecah Pair/data class. `val (a, b) = Pair(1, 2)`."),
Pair("When expression","Switch modern. `when (x) { 1 -> ...; else -> ... }`."),
Pair("Range", "Rentang. `1..10`, `1 until 10`, `1..<10` (2.0+)."),
Pair("Builder inference","Kompilator menyimpulkan T dari lambda body. `buildList { add(1) }`."),
Pair("Definitely non-nullable","`T & Any` paksa non-nullable di scope tertentu."),
Pair("K2 compiler", "Frontend compiler baru (Kotlin 2.0+). Lebih cepat dan akurat.")
)
istilah.forEach { (nama, definisi) ->
println(" ${nama.padEnd(28)} $definisi")
}
println()
println("--- Demo singkat ---")
println("data class:")
dataClassDemo()
println("sealed class:")
sealedClassDemo()
println("extension function:")
extensionFunctionDemo()
println("scope function:")
scopeFunctionDemo()
println("nullable:")
nullableDemo()
println("value class:")
valueClassDemo()
println("coroutine (konsep):")
coroutineDemoConcept()
println("inline (konsep):")
inlineDemo()
}Output yang Dihasilkan:
=== Glosarium Kotlin ===
Istilah teknis umum beserta contoh kode ringkas.
Variable Pengenal yang menampung nilai. `val` (read-only), `var` (mutable).
Function Blok kode yang dapat dipanggil. `fun nama(param: T): R`.
Class Blueprint untuk membuat object. `class Pengguna(val nama: String)`.
Object Singleton dideklarasikan dengan `object`. Hanya satu instance.
Data class Class khusus untuk data; auto equals/hashCode/toString/copy.
Sealed class Class terbatas; semua subclass harus di file yang sama (1.5+ lintas file).
Interface Kontrak method tanpa implementasi (atau default method).
Enum class Tipe dengan nilai tetap. `enum class Arah { UTARA, TIMUR }`.
Generic Tipe parameter. `class Box<T>(val isi: T)`.
Nullable Tipe yang boleh null, ditandai `?`. `String?` bisa null, `String` tidak.
Lambda Fungsi anonim. `{ x: Int -> x * 2 }`. Bisa pakai `it` bila 1 parameter.
Higher-order function Fungsi yang menerima/return fungsi. `fun apply(f: (Int) -> Int)`.
Extension function Menambah method ke class tanpa modifikasi. `fun String.berawalan()`.
Scope function let, run, with, apply, also — utility untuk blok pada objek.
Coroutine Lightweight thread; bisa suspend tanpa blocking. `launch { }`, `async { }`.
Suspend Modifier function yang bisa pause. `suspend fun fetch(): String`.
Flow Cold stream nilai async. `flow { emit(x) }`. Mirip RxJava/Observable.
Composable Fungsi UI Jetpack Compose. `@Composable fun Greeting()`.
Inline function Body di-inline ke call site; `inline fun withLock { }`.
Value class Wrapper tipis tanpa alokasi. `@JvmInline value class Email(val s: String)`.
Companion object Singleton di dalam class. `companion object { const val PI = 3.14 }`.
Smart cast Cast otomatis setelah cek `is Type`. `if (x is String) x.length`.
Elvis operator `?:` beri default bila null. `x ?: "default"`.
Safe call `?.` panggil method bila non-null. `nama?.length`.
Destructuring Pecah Pair/data class. `val (a, b) = Pair(1, 2)`.
When expression Switch modern. `when (x) { 1 -> ...; else -> ... }`.
Range Rentang. `1..10`, `1 until 10`, `1..<10` (2.0+).
Builder inference Kompilator menyimpulkan T dari lambda body. `buildList { add(1) }`.
Definitely non-nullable `T & Any` paksa non-nullable di scope tertentu.
K2 compiler Frontend compiler baru (Kotlin 2.0+). Lebih cepat dan akurat.
--- Demo singkat ---
data class:
data class PenggunaGlos("Budi", 25) -> PenggunaGlos(nama=Budi, umur=25)
auto equals: true
auto copy : PenggunaGlos(nama=Budi, umur=26)
sealed class:
ringkas(Sukses("data")) = sukses: data
ringkas(Galat("oops")) = galat: oops
extension function:
"Halo dunia".berawalanHalo() = true
"hai".berawalanHalo() = false
scope function:
apply -> halo, dunia
let (length) -> 4
nullable:
nama?.length = null
nama?.length ?: 0 = 0
nama ?: "(kosong)" = (kosong)
value class:
Email("[email protected]") = Email([email protected])
e1 == e2 = true (berdasarkan nilai)
Runtime: tidak ada alokasi objek (inlined ke String)
coroutine (konsep):
suspend fun ambilData(): String
runBlocking { launch { ... } async { ... } }
Coroutines ringan: bisa ribuan tanpa OOM
inline (konsep):
inline fun <T> withLock(lock: Lock, block: () -> T): T
Body lambda di-inline ke call site — tidak ada class anonimPerhatikan dua bagian yang dicetak: daftar 30 istilah dengan definisi singkat, plus demo singkat untuk delapan kategori kunci. Demo data class menunjukkan equals dan copy otomatis; sealed class menunjukkan when yang komprehensif; value class menunjukkan wrapper tanpa alokasi runtime.
Kategori Khusus #
Beberapa istilah perlu catatan tambahan. Sealed class berbeda dari enum karena setiap subclass bisa punya state berbeda — HasilGlos.Sukses punya data: String, HasilGlos.Galat punya pesan: String. Value class menghilangkan alokasi objek saat runtime karena kompilator mengganti Email dengan String mentah. Smart cast bekerja setelah is-check, tetapi tidak bekerja bila variabelnya var yang bisa berubah antara cek dan pakai. Builder inference memungkinkan buildList { add(1) } mengembalikan List<Int> tanpa anotasi tipe eksplisit.
Referensi Lanjutan #
- Kotlin reference — halaman rujukan Kotlin yang merangkum istilah, fitur bahasa, dan tautan ke tiap topik
Selanjutnya #
Dengan kosakata lengkap, langkah terakhir adalah merencanakan perjalanan belajar. Chapter berikutnya adalah roadmap belajar — tiga tahap dari pemula hingga lanjutan beserta proyek portofolio per tahap.