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:

IstilahDefinisi singkat
VariablePengenal yang menampung nilai. val (read-only), var (mutable).
FunctionBlok kode yang dapat dipanggil. fun nama(param: T): R.
ClassBlueprint untuk membuat object. class Pengguna(val nama: String).
ObjectSingleton dideklarasikan dengan object. Hanya satu instance.
Data classClass khusus untuk data; auto equals/hashCode/toString/copy.
Sealed classClass terbatas; semua subclass harus di file yang sama (1.5+ lintas file).
InterfaceKontrak method tanpa implementasi (atau default method).
Enum classTipe dengan nilai tetap. enum class Arah { UTARA, TIMUR }.
GenericTipe parameter. class Box<T>(val isi: T).
NullableTipe yang boleh null, ditandai ?. String? bisa null, String tidak.
LambdaFungsi anonim. { x: Int -> x * 2 }. Bisa pakai it bila 1 parameter.
Higher-order functionFungsi yang menerima/return fungsi. fun apply(f: (Int) -> Int).
Extension functionMenambah method ke class tanpa modifikasi. fun String.berawalan().
Scope functionlet, run, with, apply, also — utility untuk blok pada objek.
CoroutineLightweight thread; bisa suspend tanpa blocking. launch { }, async { }.
SuspendModifier function yang bisa pause. suspend fun fetch(): String.
FlowCold stream nilai async. flow { emit(x) }. Mirip RxJava/Observable.
ComposableFungsi UI Jetpack Compose. @Composable fun Greeting().
Inline functionBody di-inline ke call site; inline fun withLock { }.
Value classWrapper tipis tanpa alokasi. @JvmInline value class Email(val s: String).
Companion objectSingleton di dalam class. companion object { const val PI = 3.14 }.
Smart castCast 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.
DestructuringPecah Pair/data class. val (a, b) = Pair(1, 2).
When expressionSwitch modern. when (x) { 1 -> ...; else -> ... }.
RangeRentang. 1..10, 1 until 10, 1..<10 (2.0+).
Builder inferenceKompilator menyimpulkan T dari lambda body. buildList { add(1) }.
Definitely non-nullableT & Any paksa non-nullable di scope tertentu.
K2 compilerFrontend 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:

kotlin
// 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:

text
=== 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 anonim

Perhatikan 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.