Bab 1 Pengenalan Kotlin

# Apa itu Kotlin?

Kenali Kotlin, bahasa pemrograman modern dari JetBrains yang berjalan di atas JVM dan dirancang untuk menjadi lebih ringkas dan aman daripada Java.

Buka →
# Sejarah dan Ekosistem Kotlin

Telusuri perjalanan Kotlin dari Project Kotlin 2011 hingga K2 compiler 2023, dan kenali pemangku kepentingan utama ekosistem Kotlin.

Buka →
# Karakteristik Bahasa Kotlin

Kenali lima ciri utama Kotlin: ringkas, aman, pragmatis, interoperable, dan tool-friendly, serta dukungan tipe statis dan lintas platform.

Buka →
# Kotlin vs Java

Bandingkan Kotlin dan Java secara konkrit lewat data class, null-safety, extension function, smart cast, when, dan coroutines.

Buka →
# Kotlin vs Bahasa Pemrograman Lain

Bandingkan Kotlin dengan Python, Swift, Scala, Go, dan TypeScript untuk memahami posisi uniknya di antara bahasa modern.

Buka →
# Platform dan Target Kompilasi

Pelajari lima target kompilasi Kotlin — JVM, JS, Native, Android, dan WebAssembly — beserta diagram alur kompilasinya.

Buka →
# Kotlin/JVM

Pahami target kompilasi paling matang Kotlin: bagaimana kode Kotlin menjadi bytecode JVM, dibungkus menjadi jar, dan berinteraksi dengan library Java.

Buka →
# Kotlin Multiplatform

Pelajari konsep Kotlin Multiplatform: struktur source set commonMain dan platformMain, mekanisme expect/actual, serta use case utamanya.

Buka →
# Use Case Kotlin

Petakan tujuh bidang utama pemakaian Kotlin — Android, server-side, multiplatform mobile, web, native desktop, scripting, dan data science — beserta perusahaan penggunanya.

Buka →

Bab 2 Persiapan Lingkungan

# Instalasi Kotlin

Pasang kompilator Kotlin di Linux, macOS, dan Windows menggunakan SDKMAN!, Homebrew, atau unduhan langsung, lalu verifikasi dengan kotlinc -version.

Buka →
# Instalasi JDK

Pasang JDK 17 atau 21 LTS, atur variabel JAVA_HOME, dan verifikasi pemasangan dengan java --version dan javac --version.

Buka →
# Konfigurasi Kotlin Compiler

Atur kotlinc di PATH, tetapkan variabel KOTLIN_HOME, dan uji kompilasi file .kt menjadi berkas .jar yang siap dijalankan.

Buka →
# Menggunakan Kotlin Playground

Jalankan kode Kotlin langsung dari browser melalui playground web resmi, bagi tautan, dan eksperimen tanpa instalasi.

Buka →
# Menggunakan kotlinc

Kompilasi file .kt menjadi .jar dengan kotlinc -include-runtime, jalankan dengan java -jar, dan masuki mode REPL interaktif.

Buka →
# Menggunakan JShell dan REPL

Manfaatkan JShell dari JDK 9+ untuk cuplikan Java dan REPL kotlinc untuk Kotlin, lengkap dengan definisi function multi-baris dan keluar via :quit.

Buka →
# Konfigurasi IntelliJ IDEA

Pasang IntelliJ IDEA Community, aktifkan plugin Kotlin, buat proyek Kotlin baru dengan Gradle, dan jalankan program hello world.

Buka →
# Konfigurasi VS Code

Pasang Visual Studio Code, aktifkan ekstensi Kotlin dan Code Runner, konfigurasi language server, dan jalankan program Kotlin dari editor.

Buka →
# Konfigurasi Android Studio

Pasang Android Studio, verifikasi plugin Kotlin terbundel, atur Android SDK, dan buat proyek Android Kotlin pertama.

Buka →
# Struktur Proyek Kotlin

Pahami layout proyek Kotlin berbasis Gradle: src/main/kotlin, src/test/kotlin, build.gradle.kts, settings.gradle.kts, dan konvensi penamaan file serta package.

Buka →
# Menjalankan Program Kotlin

Bandingkan tiga cara menjalankan program Kotlin: kompilasi ke .jar dengan kotlinc -include-runtime, mode script kotlin file.kt, dan shebang ./file.kt.

Buka →

Bab 3 Dasar Pemrograman

# Program Kotlin Pertama

Tulis dan jalankan program Kotlin pertama: anatomi fun main(), perbedaan println dan print, serta cara mengompilasi via kotlinc dan menjalankan sebagai script.

Buka →
# Struktur Program Kotlin

Pelajari struktur file Kotlin: deklarasi package, import, top-level function/class/property, posisi main, koma opsional, dan blok kurung kurawal.

Buka →
# main() Function

Pelajari bentuk function main() dan main(args), cara membaca argumen command-line, serta penggunaan kotlin.system.exitProcess untuk mengatur exit code.

Buka →
# Komentar

Pelajari tiga jenis komentar di Kotlin: single-line, multi-line, dan KDoc. Kotlin mengizinkan komentar blok bersarang, berbeda dari Java.

Buka →
# Documentation Comments

Pelajari sintaks KDoc: /** */, tag @param, @return, @throws, @sample, serta cara Dokka merender dokumentasi API Kotlin.

Buka →
# Statement dan Expression

Pelajari perbedaan statement dan expression di Kotlin. if, when, dan try adalah expression yang menghasilkan nilai, berbeda dengan Java.

Buka →
# Identifier dan Keywords

Pelajari aturan identifier, daftar hard keywords, soft keywords, modifier keywords, serta cara escape keyword dengan backtick.

Buka →
# Aturan Penamaan

Pelajari konvensi penamaan Kotlin: camelCase untuk variabel dan function, PascalCase untuk class, UPPER_SNAKE_CASE untuk konstanta, lowercase untuk package.

Buka →
# Package dan Import

Pelajari deklarasi package, import simbol tunggal, import wildcard, serta import alias untuk mengatasi benturan nama di Kotlin.

Buka →
# Compile-Time vs Runtime

Bedah perbedaan keputusan compile-time (tipe, const val, type erasure, overload resolution) vs runtime (nilai, dynamic dispatch, reflection).

Buka →
# Membaca Pesan Error

Pelajari anatomi pesan error kompilator Kotlin (file:baris:kolom, caret) dan cara membaca stack trace saat runtime untuk menemukan akar masalah.

Buka →

Bab 4 Variabel dan Tipe Data

# val vs var

Pelajari perbedaan val (immutable) dan var (mutable) di Kotlin, mengapa val lebih disarankan, serta perbedaan antara imutabilitas compile-time dan runtime.

Buka →
# Deklarasi dan Inisialisasi

Pelajari pola deklarasi variabel di Kotlin: val dengan tipe eksplisit, lateinit var, lazy init, dan pola deklarasi dulu lalu inisialisasi sesuai kondisi.

Buka →
# Type Inference

Pelajari bagaimana kompilator Kotlin menyimpulkan tipe variabel dari nilai literal, kapan menambah tipe eksplisit, dan batasan type inference.

Buka →
# Primitive Types vs Reference Types

Pelajari bagaimana Kotlin menyembunyikan primitive types di JVM, kapan kompilator memakai primitive atau boxed reference, serta dampak nullabilitas terhadap representasi tipe.

Buka →
# Numbers

Pelajari enam tipe angka bawaan Kotlin (Byte, Short, Int, Long, Float, Double), literal underscore, literal hex dan biner, serta kapan memilih masing-masing tipe.

Buka →
# Integer Types

Pelajari empat tipe integer signed (Byte, Short, Int, Long) beserta rentang dan perilaku overflow, serta pengenalan tipe unsigned UByte, UShort, UInt, ULong.

Buka →
# Floating-Point Types

Pelajari tipe Float (32 bit) dan Double (64 bit) di Kotlin, representasi IEEE 754, jebakan presisi 0.1+0.2, serta nilai khusus NaN dan Infinity.

Buka →
# Boolean

Pelajari tipe Boolean di Kotlin, operator logika (&&, ||, !), short-circuit evaluation, serta tipe nullable Boolean? dan idiom elvis operator.

Buka →
# Char

Pelajari tipe Char di Kotlin, literal karakter seperti 'A', '\n', '\u03A9', akses ke kode Unicode melalui .code, dan mengapa Char tidak dapat dipakai sebagai Int langsung.

Buka →
# String

Pelajari tipe String di Kotlin, pengindeksan, length, string template $x dan ${expr}, multiline raw string """...""", serta method umum seperti trimMargin dan trimIndent.

Buka →
# Unsigned Integer Types

Pelajari tipe unsigned Kotlin (UByte, UShort, UInt, ULong), suffix literal u/U, use case seperti bit mask dan ukuran file, serta konversi antara signed dan unsigned.

Buka →
# Any, Unit, dan Nothing

Pelajari tipe khusus Kotlin: Any (akar non-nullable), Unit (tipe dengan satu nilai, padanan void), Nothing (tipe yang tidak pernah mengembalikan nilai), dan Nothing? untuk nullable never.

Buka →
# Type Conversion

Pelajari konversi tipe eksplisit di Kotlin melalui method toInt, toLong, toDouble, toString; mengapa tidak ada konversi implisit, serta perilaku truncation dan wrap-around.

Buka →
# Type Aliases

Pelajari cara menyederhanakan tipe kompleks dengan typealias di Kotlin, contoh typealias untuk List, Pair, function type, dan tipe generik, serta kapan menggunakan alias.

Buka →
# Konstanta dengan const val

Pelajari deklarasi konstanta compile-time dengan const val di Kotlin, syarat tipe (String atau primitive), penempatan top-level atau di object, dan perbedaan dengan val runtime.

Buka →
# Scope dan Lifetime

Pelajari scope variabel di Kotlin: block scope, inner shadowing, loop variable scope, scope function run { }, serta lifetime variabel setelah blok berakhir.

Buka →
# Naming Conventions

Pelajari konvensi penamaan variabel di Kotlin: camelCase untuk variabel dan function, PascalCase untuk class dan interface, UPPER_SNAKE_CASE untuk konstanta, serta backing field dengan underscore.

Buka →

Bab 5 Operator dan Ekspresi

# Arithmetic Operators

Pelajari operator aritmetika Kotlin: penjumlahan, pengurangan, perkalian, pembagian, dan modulo, termasuk pembagian bilangan bulat dan perhitungan Char.

Buka →
# Comparison Operators

Pelajari operator pembanding Kotlin, perbedaan == (equals) dan === (referensial), serta cara kerja compareTo pada objek.

Buka →
# Logical Operators

Pelajari operator logika Kotlin: &&, ||, dan !, perilaku short-circuit, dan penggunaan array Boolean.

Buka →
# Assignment Operators

Pelajari operator penugasan Kotlin: = dasar dan augmented +=, -=, *=, /=, %=, termasuk aturan untuk variabel mutable dan collection.

Buka →
# Unary Operators

Pelajari operator unary Kotlin: +a, -a, !a, ++a, --a, baik prefix maupun postfix, serta pola counter pada loop.

Buka →
# Range Operators

Pelajari operator rentang Kotlin: .., until, downTo, dan step, serta tipe IntRange, CharRange, dan LongRange untuk loop for.

Buka →
# in dan !in

Pelajari operator keanggotaan Kotlin: x in range, x in list, key in map, dan negasinya !in untuk Iterable apa pun.

Buka →
# is dan !is

Pelajari operator pemeriksaan tipe Kotlin: x is String, x !is Int, dan bagaimana keduanya memicu smart cast otomatis.

Buka →
# Safe Cast dan Unsafe Cast

Pelajari cast Kotlin: as (unsafe, melempar ClassCastException) dan as? (safe, mengembalikan null saat gagal), serta pola type narrowing yang aman.

Buka →
# Operator Overloading

Pelajari operator overloading Kotlin: define operator fun plus, minus, times, get, set, contains, rangeTo, compareTo, dan invoke pada class buatan.

Buka →
# Precedence dan Associativity

Pelajari tabel precedence operator Kotlin, urutan evaluasi dari postfix hingga assignment, dan asosiativitas left vs right yang memengaruhi hasil ekspresi.

Buka →
# Expressions vs Statements

Pelajari perbedaan expression dan statement di Kotlin: if, when, dan try sebagai expression yang mengembalikan nilai, dibanding Java yang memperlakukan if sebagai statement.

Buka →

Bab 6 Input/Output dan Formatting

# Mencetak Output

Pelajari cara mencetak output ke stdout dengan println, print, dan System.out, serta bagaimana menggabungkan banyak nilai menggunakan string template dan concatenation.

Buka →
# Membaca Input

Pelajari cara membaca input dari stdin menggunakan readln(), readlnOrNull(), dan mengapa readLine() sudah deprecated sejak Kotlin 1.6.

Buka →
# readln()

Pelajari readln() yang melempar exception saat EOF, readlnOrNull() yang mengembalikan null, serta chaining dengan toInt(), toDouble(), dan toBoolean() untuk parsing input.

Buka →
# Command-Line Arguments

Pelajari cara membaca argumen baris perintah via fun main(args: Array<String>), iterasi dengan args.indices, args.getOrElse, dan membangun CLI sederhana dengan flag parsing.

Buka →
# String Template

Pelajari string template Kotlin: interpolasi $variable, ekspresi kompleks dengan ${expression}, template bersarang, raw string triple-quote, dan escape tanda dolar literal dengan dollar sign.

Buka →
# String Formatting

Pelajari String.format() dan extension .format() di Kotlin: format specifier %s %d %f %x %b %c %n, width, precision, alignment, dan penggunaan System.out.printf untuk tabel terformat.

Buka →
# Numeric Formatting

Pelajari formatting angka di Kotlin: pemisah grup dengan flag koma, padding nol dengan %0Nd, tanda plus dengan %+f, presisi desimal, dan membangun tabel numerik rapi.

Buka →
# Locale dan Format Angka

Pelajari cara Locale memengaruhi pemisah grup, simbol desimal, dan simbol mata uang: Locale.US, Locale.GERMANY, Locale("id","ID"), NumberFormat.getInstance, getCurrencyInstance, dan getPercentInstance.

Buka →
# Console Application Fundamentals

Pelajari dasar aplikasi console: stream stdin/stdout/stderr, exit code via exitProcess(), output berwarna dengan ANSI escape, dan perilaku program saat di-pipe atau di-redirect.

Buka →

Bab 7 Null Safety

# Nullable vs Non-Nullable Types

Pelajari perbedaan tipe non-nullable (String) dan nullable (String?) di Kotlin, serta bagaimana kompilator mencegah NullPointerException sejak compile-time.

Buka →
# Nullable Variables

Pelajari cara mendeklarasikan variabel nullable dengan val dan var, mengubah isinya sepanjang program, serta galat compile-time yang muncul saat menetapkan null ke tipe non-nullable.

Buka →
# Safe Call Operator

Pelajari operator safe call ?. di Kotlin untuk memanggil method pada variabel nullable tanpa risiko NullPointerException, termasuk perantaian (chaining) beberapa safe call.

Buka →
# Elvis Operator

Pelajari operator Elvis ?: di Kotlin untuk memberi nilai default saat ekspresi nullable menghasilkan null, termasuk penggunaan return dan throw di sisi kanan.

Buka →
# Not-Null Assertion

Pelajari operator not-null assertion !! di Kotlin yang memaksa konversi tipe nullable menjadi non-nullable, serta risiko NullPointerException yang menyertainya.

Buka →
# Safe Cast

Pelajari operator safe cast as? di Kotlin yang mengembalikan null alih-alih melempar ClassCastException saat konversi tipe gagal.

Buka →
# Smart Casts

Pelajari smart cast Kotlin yang mengubah tipe statis secara otomatis setelah pengecekan is atau != null, tanpa memerlukan cast eksplisit.

Buka →
# Null Checking

Pelajari pola pengecekan null di Kotlin menggunakan == null dan != null, serta bagaimana smart cast mengubah tipe nullable menjadi non-nullable di dalam blok pengecekan.

Buka →
# let untuk Null Handling

Pelajari penggunaan scope function let untuk mengeksekusi blok kode hanya bila nilai nullable tidak null, dengan parameter it yang berisi nilai non-nullable di dalam blok.

Buka →
# Platform Types

Pelajari platform types Kotlin yang muncul saat memanggil kode Java, di mana nullability tidak diketahui kompilator dan dapat menyebabkan NullPointerException bila tidak ditangani dengan benar.

Buka →
# Null Safety Best Practices

Pelajari praktik terbaik menangani nullable di Kotlin: prefer val non-nullable, gunakan Elvis untuk default, hindari !!, manfaatkan lateinit, dan pakai requireNotNull untuk pre-condition.

Buka →

Bab 8 Struktur Kontrol

# if Expression

Pelajari bentuk if sebagai expression pada Kotlin yang mengembalikan nilai serta bentuk blok dengan baris terakhir sebagai hasil cabang.

Buka →
# if-else

Pelajari rantai else-if pada Kotlin untuk klasifikasi multi-kondisi, perbedaan bentuk statement dan expression, serta ketiadaan operator ternary ?:.

Buka →
# when Expression

Pelajari when expression sebagai pengganti switch, pencocokan banyak nilai, dan bentuk when tanpa argumen untuk rantai kondisi.

Buka →
# when dengan Range

Pelajari pencocokan cabang when menggunakan range operator in, kombinasi beberapa range, dan operator !in untuk negasi keanggotaan.

Buka →
# when dengan Type Checking

Pelajari pencocokan cabang when berdasarkan tipe data dengan operator is, lengkap dengan smart cast yang mengubah tipe statis di setiap cabang.

Buka →
# for Loop

Pelajari for loop pada Kotlin untuk iterasi range, list, map, string, lengkap dengan indices, withIndex, dan step.

Buka →
# while Loop

Pelajari while loop pada Kotlin yang mengevaluasi kondisi sebelum setiap iterasi, lengkap dengan pola pengurangan saldo dan pencarian elemen.

Buka →
# do-while Loop

Pelajari do-while loop pada Kotlin yang mengeksekusi body minimal satu kali sebelum kondisi diperiksa, dengan contoh validasi input berulang.

Buka →
# Ranges dan Progressions

Pelajari range naik, downTo, until, step, serta tipe IntRange, CharRange, LongRange, dan IntProgression sebagai pondasi iterasi numerik Kotlin.

Buka →
# break dan continue

Pelajari keyword break untuk keluar dari loop dan continue untuk melewatkan iterasi, bekerja pada for, while, dan iterasi string.

Buka →
# Labeled break dan continue

Pelajari labeled break dan continue pada Kotlin untuk mengontrol loop bersarang, keluar dari loop luar, atau melompat ke iterasi loop luar.

Buka →
# Nested Loops

Pelajari loop bersarang pada Kotlin untuk traversal matriks, pola segitiga, dan tabel perkalian, lengkap dengan variable shadowing serta pertimbangan performa.

Buka →
# Control Flow Analysis

Pelajari bagaimana kompilator Kotlin menganalisis alur kontrol pada cabang if, when, dan assignment untuk mengaktifkan smart cast tanpa cast eksplisit.

Buka →

Bab 9 Functions

# Deklarasi Function

Pelajari anatomi deklarasi function Kotlin dengan keyword fun, daftar parameter, return type, dan body yang berisi logika program.

Buka →
# Parameter dan Argument

Bedakan parameter (di deklarasi function) dan argument (saat pemanggilan) serta cara menyusun banyak parameter bertipe berbeda.

Buka →
# Return Types

Pelajari tiga jenis return type di Kotlin: tipe konkret, Unit untuk function tanpa nilai kembalian, dan Nothing untuk function yang tidak pernah kembali normal.

Buka →
# Single-Expression Functions

Pelajari bentuk ringkas deklarasi function dengan tanda sama dengan, tanpa kurung kurawal dan tanpa keyword return, lengkap dengan type inference.

Buka →
# Default Arguments

Berikan nilai default pada parameter function sehingga pemanggil boleh menghilangkan argumen tertentu dan menyederhanakan pemanggilan umum.

Buka →
# Named Arguments

Sebut argumen dengan nama parameter eksplisit sehingga urutan bebas dan kode pemanggilan lebih jelas, terutama untuk function dengan banyak parameter Boolean.

Buka →
# vararg Parameters

Pelajari cara membuat function yang menerima jumlah argumen variabel dengan keyword vararg, termasuk spread operator untuk meneruskan array.

Buka →
# infix Functions

Panggil function dengan sintaks `a op b` tanpa titik dan kurung sehingga kode terbaca seperti kalimat natural, contohnya `2 kali 3`.

Buka →
# operator Functions

Definisikan ulang operator seperti +, *, in, dan [] pada tipe buatan sendiri dengan keyword operator agar pemanggilan terasa natural.

Buka →
# Local Functions

Deklarasikan function di dalam function lain untuk menyembunyikan logika penolong dan tetap mengakses variabel dari scope luar (closure).

Buka →
# Extension Functions

Tambahkan method baru ke class yang sudah ada (termasuk class pihak ketiga) tanpa memodifikasi kode sumbernya, dengan resolusi statis saat kompilasi.

Buka →
# tailrec Functions

Tulis function rekursif dengan keyword tailrec agar kompilator mengoptimalkan menjadi loop iteratif tanpa pertumbuhan stack call.

Buka →
# Higher-Order Functions

Function yang menerima function lain sebagai parameter atau mengembalikan function sebagai nilai, fondasi gaya pemrograman fungsional di Kotlin.

Buka →
# Function Types

Tuliskan tipe function secara eksplisit sebagai (A, B) -> C, pelajari suspend function type, dan receiver type seperti Int.(Int) -> Int.

Buka →
# Function References

Konversi function yang sudah dideklarasikan menjadi nilai dengan operator ::, termasuk bound dan unbound references untuk top-level dan member function.

Buka →
# inline Functions

Tandai higher-order function dengan keyword inline agar kompilator menyalin body ke call site dan mengurangi overhead alokasi lambda.

Buka →
# noinline dan crossinline

Kontrol perilaku inline function: noinline untuk parameter yang tidak boleh di-inline, crossinline untuk melarang non-local return.

Buka →
# Pure Functions dan Side Effects

Bedakan pure function yang outputnya hanya bergantung pada input dari function impure yang mengakses state global, IO, atau random.

Buka →

Bab 10 Collections

# Collection Hierarchy

Pahami hierarki collection Kotlin: Iterable, Collection, List, Set, Map, dan pemisahan antara interface read-only dan mutable.

Buka →
# List

Pelajari cara membuat List read-only, mengakses elemen lewat indeks, dan menggunakan query dasar seperti size, indexOf, contains, first, last.

Buka →
# MutableList

Pelajari cara memodifikasi MutableList: menambah, mengganti, menghapus elemen, serta catatan keamanan thread saat dipakai bersamaan.

Buka →
# Set

Pelajari Set read-only: cara membuat himpunan tanpa duplikat, memeriksa keanggotaan, dan operasi himpunan seperti union, intersect, subtract.

Buka →
# MutableSet

Pelajari MutableSet: menambah dan menghapus elemen, serta perbedaan urutan antara LinkedHashSet (urutan penyisipan) dan HashSet (urutan hash).

Buka →
# Map

Pelajari Map read-only: menyimpan pasangan key-value, mengakses nilai, iterasi keys/values/entries, dan urutan penyisipan LinkedHashMap.

Buka →
# MutableMap

Pelajari MutableMap: put, putIfAbsent, getOrPut, compute, remove, dan alternatif aman untuk konkurensi seperti ConcurrentHashMap.

Buka →
# Array

Pelajari Array<T> di Kotlin: cara membuat, mengakses, dan memodifikasi elemen dengan ukuran tetap, serta kapan Array cocok dipakai.

Buka →
# Primitive Arrays

Pelajari array primitif (IntArray, LongArray, DoubleArray, dll.) yang menghindari overhead boxing dan cocok untuk hot path.

Buka →
# Array vs List

Bandingkan Array dan List di Kotlin: ukuran tetap vs dapat berubah, operasi yang tersedia, dan kapan memilih masing-masing.

Buka →
# Collection Operations

Pelajari operasi fungsional dasar pada collection: map, filter, forEach, find, any, all, none, dan count dengan gaya deklaratif.

Buka →
# Filtering Collections

Pelajari varian filter: filterNot, filterNotNull, filterIndexed, partition, takeWhile, dropWhile, dan filterIsInstance.

Buka →
# Transforming Collections

Pelajari transformasi struktural: map, mapIndexed, flatMap, zip, unzip, associate, groupBy, chunked, dan windowed.

Buka →
# Grouping Collections

Pelajari aggregasi berbasis kunci: groupBy, groupingBy, eachCount, fold, reduce, dan aggregate untuk merangkum data per grup.

Buka →
# Sorting Collections

Pelajari pengurutan collection: sorted, sortedBy, sortedDescending, sortedWith comparator, shuffled, reversed, dan sort in-place.

Buka →
# Aggregating Collections

Pelajari agregasi: sum, sumOf, average, maxOrNull, minOrNull, maxByOrNull, reduce, fold, dan pola agregasi multi-nilai.

Buka →
# Collection Iteration

Pelajari berbagai cara iterasi collection: for-in, forEach, forEachIndexed, withIndex, destructuring Map, dan iterator protocol kustom.

Buka →
# Sequences

Pelajari Sequence di Kotlin: evaluasi lazy, sequenceOf, asSequence, generateSequence, dan builder sequence dengan yield.

Buka →
# Lazy vs Eager Operations

Bandingkan evaluasi eager (List) dan lazy (Sequence): kapan Sequence unggul, kapan List lebih cepat, dan cara memilih dengan tepat.

Buka →
# Memilih Collection yang Tepat

Panduan memilih collection Kotlin: List, Set, Map, Array, primitive arrays, dan Sequence berdasarkan kebutuhan akses, keunikan, dan performa.

Buka →

Bab 11 String dan Text Processing

# String Fundamentals

Pelajari dasar tipe String di Kotlin: literal, perbedaan dengan Char, akses karakter, panjang, pemeriksaan kosong, dan perbandingan antar string.

Buka →
# String Immutability

Pahami mengapa String di Kotlin bersifat immutable: method seperti uppercase() dan replace() mengembalikan string baru tanpa mengubah nilai asli.

Buka →
# String Template

Pelajari string template di Kotlin: interpolasi $var, ekspresi ${expr}, dan penggunaan template di dalam multiline raw string.

Buka →
# String Methods

Tinjau katalog method String yang sering dipakai: length, toUpperCase, toLowerCase, trim, substring, split, replace, startsWith, endsWith, contains, indexOf.

Buka →
# StringBuilder

Gunakan StringBuilder untuk konkatenasi teks yang banyak: append, insert, delete, toString, kapasitas, serta perbandingan performa dengan operator +.

Buka →
# Multiline Strings

Pelajari raw string dengan tiga tanda kutip ganda di Kotlin: baris baru dipertahankan, escape tidak diproses, dan cocok untuk template JSON, SQL, serta HTML.

Buka →
# Trimming Indent dan Margin

Kuasai trimIndent dan trimMargin untuk merapikan multiline raw string: hapus indentasi umum, gunakan prefix khusus, dan pertahankan indentasi internal.

Buka →
# Regular Expressions

Kuasai Regex di Kotlin: matches, containsMatchIn, find, findAll, replace, capture groups, dan named groups untuk pencocokan pola teks.

Buka →
# Splitting dan Joining Text

Pelajari pemisahan dan penggabungan teks di Kotlin: split dengan literal dan Regex, parameter limit, joinToString dengan prefix/suffix/transform, dan pola umum.

Buka →
# Character Processing

Pelajari tipe Char dan method-nya: isDigit, isLetter, isWhitespace, isUpperCase, digitToInt, toLowerCase, code, serta pola pemrosesan karakter umum.

Buka →
# Text Processing Best Practices

Praktik terbaik pemrosesan teks di Kotlin: gunakan buildString, simpan Regex di variabel, perhatikan Unicode normalization, dan pilih String.format untuk output terstruktur.

Buka →

Bab 12 Object-Oriented Programming

# Konsep OOP

Pelajari empat pilar object-oriented programming — encapsulation, inheritance, polymorphism, dan abstraction — serta pergeseran pola pikir dari gaya prosedural ke gaya berorientasi object.

Buka →
# Class dan Object

Pelajari cara mendeklarasikan class, membuat object, dan menyusun anggota class seperti property, method, serta constructor pada Kotlin.

Buka →
# Properties

Pelajari cara mendeklarasikan property var dan val, menulis custom getter/setter dengan backing field, serta menggunakan lateinit untuk property non-null yang diinisialisasi nanti.

Buka →
# Primary Constructor

Pelajari primary constructor Kotlin, cara mendeklarasikan property langsung di daftar parameter, dan mengeksekusi inisialisasi melalui property initializer serta init block.

Buka →
# Secondary Constructors

Pelajari cara mendeklarasikan secondary constructor dengan keyword constructor, mendelegasikan ke primary constructor, dan menyediakan beberapa jalur pembuatan object.

Buka →
# init Blocks

Pelajari cara kerja init block Kotlin, urutan eksekusi terhadap property initializer, multiple init block, dan penggunaannya untuk validasi constructor.

Buka →
# Property Accessors

Pelajari cara menulis custom getter dan setter pada property Kotlin, mendefinisikan computed property tanpa backing field, serta menggabungkan keduanya untuk kontrol akses yang fleksibel.

Buka →
# Backing Fields

Pelajari backing field pada property Kotlin, keyword `field` yang hanya tersedia di custom accessor, serta cara menghindari setter rekursif.

Buka →
# Visibility Modifiers

Pelajari empat visibility modifier Kotlin — public, private, protected, internal — beserta perbedaannya pada anggota class dan deklarasi top-level.

Buka →
# Encapsulation

Pelajari encapsulation Kotlin — menyembunyikan data internal dengan private, menyajikan akses melalui method publik tervalidasi, dan memakai property sebagai alat bantu encapsulation.

Buka →
# Inheritance

Pelajari cara membuat subclass dengan tanda titik dua, menandai superclass dengan open, menulis ulang method dengan override, dan memanfaatkan polymorphism melalui referensi superclass.

Buka →
# open Classes dan Methods

Pelajari mengapa class dan method Kotlin bersifat final secara default, cara membukanya dengan open, dan kapan menggunakan final override untuk menghentikan rantai override lebih lanjut.

Buka →
# Overriding Properties dan Methods

Pelajari cara meng-override property dan method pada subclass Kotlin, aturan val menjadi var, serta bagaimana property override ikut polymorphism.

Buka →
# Abstract Classes

Pelajari cara mendeklarasikan abstract class Kotlin, abstract property dan method, dan kontrak yang memaksa subclass menyediakan implementasi tertentu.

Buka →
# Interfaces

Pelajari cara mendeklarasikan interface Kotlin, method default, property abstrak, dan implementasi multiple interface sekaligus dalam satu class.

Buka →
# Interface Delegation

Mendelegasikan implementasi interface ke object lain dengan keyword `by` agar class dapat menggunakan ulang kode tanpa inheritance.

Buka →
# Nested Classes

Mendeklarasikan class di dalam class lain tanpa keyword `inner` — class bersarang statis yang tidak mengakses instance outer class.

Buka →
# Inner Classes

Mendeklarasikan inner class dengan keyword `inner` yang membawa referensi ke instance outer class dan dapat mengakses anggotanya.

Buka →
# object Declarations

Mendeklarasikan singleton dengan keyword `object` — instance tunggal yang diinisialisasi secara lazy saat akses pertama.

Buka →
# companion Objects

Mendeklarasikan companion object di dalam class untuk menyediakan anggota statis, konstanta, factory method, dan pola desain berbasis class.

Buka →
# Anonymous Objects

Membuat instance object tanpa nama dengan `object : Type { ... }` — implementasi ad-hoc dari interface atau abstract class.

Buka →
# data class

Mendeklarasikan data class Kotlin yang otomatis menghasilkan method equals, hashCode, toString, copy, dan componentN untuk destrukturisasi.

Buka →
# enum class

Mendeklarasikan enum class Kotlin dengan konstanta, property, constructor, method, dan implementasi interface untuk merepresentasikan nilai konstan bertipe aman.

Buka →
# sealed class

Mendeklarasikan sealed class Kotlin — hierarki terbatas yang membuat kompilator mengetahui seluruh subtype dan memaksa when yang exhaustive.

Buka →
# sealed interface

Mendeklarasikan sealed interface Kotlin — interface dengan daftar implementor terbatas yang dapat dikombinasikan dengan sealed class untuk hierarki bertingkat.

Buka →
# value class

Mendeklarasikan @JvmInline value class Kotlin — wrapper yang diinline pada saat kompilasi sehingga tidak menambah overhead alokasi memori.

Buka →
# Delegation

Pola delegation di Kotlin — composition over inheritance — baik secara manual maupun via keyword `by` untuk meneruskan pemanggilan method ke object lain.

Buka →
# Equality dan Identity

Membedakan operator `==` (structural equals) dan `===` (referential identity) di Kotlin serta cara mengoverride method `equals` dan `hashCode`.

Buka →
# copy dan component Functions

Memakai method copy dan componentN yang dihasilkan otomatis oleh data class untuk membuat salinan dan destrukturisasi instance.

Buka →
# OOP Design Principles

Panduan desain berorientasi object di Kotlin — SOLID, composition over inheritance, program to interface, dan idiom Kotlin seperti data class, sealed, dan value class.

Buka →

Bab 13 Generics

# Generic Classes

Pelajari cara mendefinisikan class generic dengan satu atau beberapa type parameter agar satu definisi class dapat dipakai untuk berbagai tipe data dengan aman.

Buka →
# Generic Functions

Pelajari cara mendeklarasikan function generic dengan type parameter sebelum nama function, serta kapan pemanggil boleh menentukan atau mengandalkan type inference.

Buka →
# Generic Interfaces

Pelajari cara mendeklarasikan interface generic dan mengimplementasikannya dengan tipe konkret untuk membangun kontrak yang reusable dan type-safe.

Buka →
# Type Parameters

Pelajari konvensi penamaan type parameter (T, E, K, V, R) serta cara membatasinya dengan upper bound tunggal maupun recursive bound.

Buka →
# Upper Bounds

Pelajari cara membatasi type parameter dengan upper bound tunggal maupun jamak menggunakan klausa where, agar method pada bound dapat dipakai di dalam class atau function generic.

Buka →
# Variance

Pahami mengapa List<String> bukan subtype List<Any> dan bagaimana Kotlin memperlakukan tipe generic secara invariant secara default untuk menjaga type safety.

Buka →
# Covariance

Pelajari keyword out untuk membuat class generic covariant sehingga Producer<Sub> menjadi subtype Producer<Super> dengan aman.

Buka →
# Contravariance

Pelajari keyword in untuk membuat class generic contravariant sehingga Consumer<Super> menjadi subtype Consumer<Sub> dengan aman.

Buka →
# Declaration-Site Variance

Pelajari cara menentukan variance pada deklarasi class dengan out dan in sehingga pemakai tidak perlu mengulang variance setiap kali memakai class tersebut.

Buka →
# Use-Site Variance

Pelajari cara menentukan variance pada saat pemakaian tipe dengan out dan in projections ketika class tidak dapat dideklarasikan covariant atau contravariant secara keseluruhan.

Buka →
# Star Projections

Pelajari cara memakai star projection List<*> untuk bekerja dengan tipe generic tanpa peduli terhadap type argument, mirip dengan Java List<?>.

Buka →
# Type Erasure

Pahami bagaimana informasi tipe generic dihapus saat runtime sehingga List<String> dan List<Int> sama-sama menjadi List, dan konsekuensinya bagi pemeriksaan tipe runtime.

Buka →
# reified Type Parameters

Pelajari inline fun dengan reified type parameter untuk mengakses tipe generic saat runtime, melakukan pemeriksaan is T, dan filter berbasis tipe.

Buka →
# Designing Generic APIs

Pelajari pedoman kapan memakai generics vs interface, menghindari over-generic, menerapkan PECS, dan memakai type aliases untuk menyederhanakan signature.

Buka →

Bab 14 Lambdas dan Functional Programming

# Lambda Expressions

Pelajari lambda expression di Kotlin — function literal yang disimpan dalam variabel dan dipanggil layaknya function biasa.

Buka →
# Lambda Syntax

Bedah anatomi lambda Kotlin: parameter, arrow `->`, body multi-statement, dan ekspresi terakhir sebagai nilai kembalian.

Buka →
# Trailing Lambdas

Pelajari trailing lambda — idiom Kotlin yang menempatkan lambda di luar tanda kurung saat menjadi parameter terakhir.

Buka →
# it Parameter

Pelajari parameter implisit `it` pada lambda satu parameter — idiom ringkas yang wajib dipakai dengan hati-hati saat lambda bersarang.

Buka →
# Anonymous Functions

Pelajari anonymous function — function literal dengan keyword `fun` eksplisit yang memberi kontrol penuh atas tipe kembalian dan perilaku return.

Buka →
# Higher-Order Functions

Pelajari higher-order function — function yang menerima atau mengembalikan function lain, dasar pemrograman fungsional di Kotlin.

Buka →
# Function Types

Pelajari function type di Kotlin — dari `(Int, Int) -> Int` hingga nullable return, suspend function type, dan receiver function type.

Buka →
# Receiver Function Types

Pelajari receiver function type `A.() -> B` yang membuat `this` di dalam lambda merujuk ke receiver — dasar DSL Kotlin.

Buka →
# Extension Lambdas

Pelajari extension lambda — kombinasi extension function dengan lambda yang disimpan dalam variabel bertipe receiver function type.

Buka →
# Closures

Pelajari closure — lambda yang menangkap variabel dari lingkup luar, dari read-only hingga mutable dengan implikasi lifecycle.

Buka →
# inline Functions

Pelajari inline function — fitur yang menyisipkan body function ke setiap pemanggil, mengurangi alokasi lambda, dan membuka fitur seperti reified.

Buka →
# Callable References

Pelajari callable reference — sintaks `::namaFungsi`, `String::length`, dan bound reference untuk merujuk function tanpa lambda.

Buka →
# Function Composition

Pelajari function composition — menggabungkan function kecil menjadi pipeline dengan `compose` dan `andThen`, plus dasar currying.

Buka →
# Scope Functions

Pengenal lima scope functions Kotlin — let, run, with, apply, also — beserta perbandingan receiver, return, dan use case masing-masing.

Buka →
# let

Pelajari scope function `let` — receiver `it`, mengembalikan lambda result. Cocok untuk null-safety dan transformasi nilai.

Buka →
# run

Pelajari scope function `run` — receiver `this`, mengembalikan lambda result. Cocok untuk eksekusi block pada receiver dan kombinasi dengan `with`.

Buka →
# with

Pelajari scope function `with` — bukan extension function. Receiver `this`, mengembalikan lambda result. Cocok untuk mengelompokkan panggilan.

Buka →
# apply

Pelajari scope function `apply` — receiver `this`, mengembalikan objek. Cocok untuk konfigurasi objek dan builder pattern.

Buka →
# also

Pelajari scope function `also` — receiver `it`, mengembalikan objek. Cocok untuk side effect seperti logging tanpa mengganggu chain.

Buka →
# Functional Design Patterns

Pelajari pola desain fungsional di Kotlin — map/filter/reduce, function composition, immutability, dan perbandingan dengan Haskell.

Buka →

Bab 16 Error Handling

# Exception Fundamentals

Pahami hierarki Throwable, perbedaan Error dan Exception, serta bagaimana Kotlin memperlakukan semua exception sebagai unchecked.

Buka →
# try-catch

Tangkap exception dengan try-catch, pelajari urutan multiple catch clause dari spesifik ke umum, serta peran blok finally yang opsional.

Buka →
# try Expression

Gunakan try sebagai expression yang menghasilkan nilai, padukan dengan elvis operator, dan pahami bahwa finally tidak mengubah nilai balik.

Buka →
# finally Block

Pastikan pembersihan resource selalu jalan dengan blok finally, dan ganti try-with-resources Java dengan extension function .use {}.

Buka →
# throw Expression

throw adalah expression bertipe Nothing yang dapat dipakai di elvis operator, cabang when, dan function dengan return type apa pun.

Buka →
# Custom Exceptions

Buat class exception sendiri yang mewarisi Exception atau RuntimeException, tambahkan field konteks, dan teruskan cause dari exception asli.

Buka →
# Exception Propagation

Telusuri bagaimana exception merambat naik dari function dalam ke pemanggil luar melalui stack unwinding, dan kapan membungkus dengan cause.

Buka →
# Checked vs Unchecked Exceptions

Pelajari bagaimana Kotlin menghapus pembedaan checked dan unchecked exception warisan Java, dan kapan anotasi @Throws tetap diperlukan.

Buka →
# Result Type Patterns

Gunakan kotlin.Result untuk merepresentasikan nilai sukses atau kegagalan secara eksplisit dengan map, getOrNull, getOrElse, fold, dan recoverCatching.

Buka →
# Error vs Exception

Bedakan Error fatal tingkat JVM dari Exception yang dapat dipulihkan, serta pisahkan programming error dari business error.

Buka →
# Error Handling Best Practices

Rangkum praktik terbaik: fail fast, jangan menelan exception, log dengan konteks, lempar di layer yang tepat, dan pakai Result untuk expected errors.

Buka →

Bab 18 Annotations dan Reflection

# Built-in Annotations

Pelajari anotasi bawaan Kotlin: @Deprecated, @JvmStatic, @JvmField, @JvmOverloads, @Target, @Retention, dan kegunaannya.

Buka →
# Custom Annotations

Pelajari cara mendeklarasikan anotasi custom dengan annotation class, menerapkannya, dan membacanya via reflection.

Buka →
# Annotation Targets

Pelajari AnnotationTarget dan @Target untuk membatasi tempat anotasi boleh dipasang: class, function, property, getter, setter, parameter, file, dan type.

Buka →
# Annotation Retention

Pelajari AnnotationRetention SOURCE, BINARY, dan RUNTIME, serta dampaknya pada ketersediaan anotasi saat kompilasi dan runtime.

Buka →
# Annotation Parameters

Pelajari tipe parameter yang diperbolehkan pada anotasi Kotlin: primitif, String, enum, anotasi, KClass, dan array dari tipe tersebut, serta default value.

Buka →
# Annotation Processing

Pelajari tiga jalur pemrosesan anotasi di Kotlin: KSP saat kompilasi, KAPT sebagai jembatan Java, dan reflection saat runtime.

Buka →
# Kotlin Reflection

Pelajari dasar-dasar kotlin.reflect: KClass, KFunction, KProperty, cara mendapatkannya via ::class, dan interop dengan Java reflection.

Buka →
# Inspecting Classes

Pelajari cara menginspeksi class via KClass: simpleName, members, constructors, isData, isSealed, sealedSubclasses, dan membuat instance via primary constructor.

Buka →
# Property Reflection

Pelajari KProperty dan KMutableProperty, akses getter/setter via reflection, serta properti isLateinit dan isConst pada property Kotlin.

Buka →
# Callable References

Pelajari tiga bentuk callable reference: ::funcName top-level, Class::member unbound, dan instance::method bound — sebagai nilai function untuk higher-order.

Buka →
# Reflection Performance

Pelajari biaya performa reflection 10-100x lipat lebih lambat daripada pemanggilan langsung, cara caching KClass/KFunction, dan kapan memakai generated code.

Buka →

Bab 20 Coroutines

# Asynchronous Programming

Pahami perbedaan synchronous dan asynchronous, mengapa async penting untuk respons UI dan throughput IO, serta pendekatan callbacks, futures, async/await, dan coroutines.

Buka →
# Concurrency vs Parallelism

Bedakan concurrency (menangani banyak hal sekaligus secara logis) dan parallelism (menjalankan banyak hal sekaligus secara fisik), serta bagaimana coroutines mendukung keduanya.

Buka →
# Coroutine Fundamentals

Pahami apa itu coroutine: komputasi yang dapat ditangguhkan, ringan, dan dijadwalkan secara kooperatif. Pelajari runBlocking, launch, dan await.

Buka →
# suspend Functions

Pelajari suspend function: deklarasi, aturan pemanggilan dari coroutine, dan transformasi CPS (Continuation Passing Style) di level bytecode.

Buka →
# Coroutine Builders

Pelajari tiga coroutine builder utama — runBlocking, launch, dan async — beserta kapan memakai masing-masing untuk hasil yang benar dan idiomatik.

Buka →
# Coroutine Scope

Pelajari CoroutineScope: wadah yang mengatur siklus hidup coroutine anak, builder coroutineScope, dan bagaimana scope otomatis membersihkan coroutine saat berakhir.

Buka →
# Structured Concurrency

Pahami structured concurrency: hubungan induk-anak antar coroutine, propagasi exception, dan pembatalan berantai yang menjaga kode tetap aman dan terkontrol.

Buka →
# Coroutine Context

Pelajari CoroutineContext sebagai kumpulan elemen — Job, Dispatcher, CoroutineName, CoroutineExceptionHandler — yang dapat disusun dengan operator +.

Buka →
# Dispatchers

Pelajari Dispatchers.Default, IO, Main, dan Unconfined, kapan memakai masing-masing, serta cara mengganti dispatcher dengan withContext.

Buka →
# Job dan Cancellation

Pelajari interface Job, metode cancel(), join(), cancelAndJoin(), dan mekanisme pembatalan kooperatif berbasis suspend function dan ensureActive.

Buka →
# Exception Handling in Coroutines

Pelajari try-catch di dalam coroutine, CoroutineExceptionHandler untuk handler global, dan SupervisorJob untuk mengisolasi kegagalan antar anak.

Buka →
# Coroutine Timeouts

Pelajari withTimeout yang melempar TimeoutCancellationException, withTimeoutOrNull yang mengembalikan null, dan pola pembatalan otomatis untuk operasi yang tidak boleh menggantung.

Buka →
# async dan await

Pelajari penggunaan async untuk komputasi paralel, pola awaitAll untuk koleksi, dan penanganan exception yang dilempar dari async coroutine.

Buka →
# Coroutine Channels

Pelajari Channel<T> untuk komunikasi antar-coroutine, hot stream, send dan receive, buffered channel, dan builder produce.

Buka →
# Shared Flows

Pengenalan SharedFlow: hot multicast stream di mana banyak collector berbagi emisi yang sama, dengan konfigurasi replay buffer dan buffer overflow.

Buka →
# StateFlow

Pelajari MutableStateFlow sebagai state holder: selalu punya nilai, semantik conflation (hanya nilai terbaru yang dikirim), dan perbandingan dengan SharedFlow.

Buka →
# SharedFlow

Pelajari MutableSharedFlow sebagai event bus: tryEmit non-suspend vs emit suspend, konfigurasi replay, extraBufferCapacity, dan onBufferOverflow.

Buka →
# Flow Fundamentals

Pelajari Flow<T> sebagai cold asynchronous stream: builder flow { emit(...) }, semantik lazy (mulai saat di-collect), dan eksekusi per collector.

Buka →
# Flow Operators

Pelajari operator Flow: map, filter, transform, take, drop, combine, zip, flatMapConcat, flatMapMerge, flatMapLatest, debounce, dan distinctUntilChanged.

Buka →
# Flow Context dan Cancellation

Pelajari flowOn untuk pindah dispatcher, context preservation (collect tetap di pemanggil), dan perilaku Flow saat scope dibatalkan.

Buka →
# Cold vs Hot Flows

Pelajari perbedaan Flow (cold) dengan SharedFlow dan StateFlow (hot), kapan memakai masing-masing, dan implikasi desain dari pilihan tersebut.

Buka →
# Flow Testing

Pelajari cara menguji Flow tanpa dependensi tambahan: toList() untuk menangkap emit, runBlocking untuk suspend, dan pola assertion pada List yang dihasilkan.

Buka →
# Callback to Coroutine

Pelajari suspendCoroutine dan suspendCancellableCoroutine untuk membungkus API berbasis callback menjadi suspend function, lengkap dengan penanganan pembatalan.

Buka →
# Coroutine Testing

Pelajari cara menguji coroutine dengan runBlocking, withTimeout, dan assertion standar. Verifikasi exception, pembatalan, dan structured concurrency tanpa dependensi tambahan.

Buka →
# Coroutine Best Practices

Pelajari aturan praktis menulis coroutine: structured concurrency, withContext untuk ganti dispatcher, Flow untuk stream, kode cancellation-aware, dan konkurensi aman.

Buka →

Bab 21 File I/O

# File Fundamentals

Pelajari java.io.File dan java.nio.file.Path sebagai representasi file di Kotlin, lengkap dengan properti exists, isDirectory, isFile, length, dan lastModified.

Buka →
# java.io Interoperability

Pelajari extension function Kotlin di java.io.File seperti readText, writeText, readLines, useLines, dan interaksi dengan InputStream, OutputStream, Reader, dan Writer.

Buka →
# java.nio Interoperability

Pelajari java.nio.file.Path dan Files: newBufferedWriter, newBufferedReader, readAllLines, readString, writeString, Files.lines, dan StandardOpenOption.

Buka →
# Membaca File Teks

Pelajari cara membaca file teks dengan aman: File.readText, File.readLines, File.useLines, File.forEachLine, dan bufferedReader untuk file besar.

Buka →
# Menulis File Teks

Pelajari cara menulis file teks dengan aman: File.writeText, File.appendText, bufferedWriter, PrintWriter, dan pola atomic write untuk konfigurasi penting.

Buka →
# Buffered File Operations

Pelajari operasi file berbuffer untuk file besar: BufferedReader, BufferedWriter, forEachLine, useLines, dan strategi memproses file log gigabyte tanpa memuat seluruhnya ke memori.

Buka →
# Path dan Directory

Pelajari operasi path dan direktori: Path.resolve, Path.relativize, Path.normalize, File.list, File.listFiles, File.walk, dan Files.walk NIO.2 untuk traversing rekursif.

Buka →
# File Attributes

Pelajari atribut file di Kotlin: BasicFileAttributes, PosixFileAttributes, Files.getAttribute, Files.setAttribute, dan FileTime untuk membaca dan memodifikasi metadata.

Buka →
# File Permissions

Atur permission POSIX file dan direktori menggunakan java.nio.file.attribute.PosixFilePermission.

Buka →
# Temporary Files

Buat file dan direktori sementara yang aman dengan Files.createTempFile dan createTempDirectory, plus pola cleanup yang andal.

Buka →
# Serialization Fundamentals

Pelajari konsep serialization, perbedaan Serializable dan Externalizable, serta bagaimana mengubah objek menjadi urutan byte.

Buka →
# JSON Serialization

Pelajari cara mem-parsing dan menghasilkan JSON di Kotlin, mulai dari parser manual hingga pengenalan kotlinx.serialization.

Buka →
# Robust File Processing

Padukan pattern use, validasi path, penanganan IOException, atomic write, dan cleanup idempoten untuk pipeline file yang andal.

Buka →

Bab 22 Date dan Time

# Date-Time Fundamentals

Pelajari lima konsep inti java.time: Instant, LocalDateTime, ZonedDateTime, Duration, dan Period, beserta format ISO-8601 yang menjadi bahasa pertukaran tanggal antar sistem.

Buka →
# java.time Interoperability

Pelajari cara Kotlin mengonsumsi paket java.time secara langsung tanpa wrapper, termasuk idiom extension function yang membuat API Java terasa Kotlin-idiomatic.

Buka →
# kotlinx-datetime

Pelajari library kotlinx-datetime resmi JetBrains untuk Kotlin Multiplatform: Instant, LocalDate, LocalDateTime, perbedaan dengan java.time, dan kapan library ini lebih unggul.

Buka →
# LocalDate dan LocalTime

Pelajari cara membuat dan mengakses LocalDate, LocalTime, dan LocalDateTime untuk merepresentasikan tanggal dan jam tanpa zona waktu, termasuk parsing ISO-8601.

Buka →
# Instant dan Time Zones

Pelajari Instant sebagai titik waktu absolut di UTC, ZonedDateTime untuk menampilkan instan di zona tertentu, dan konversi antar zona dengan aman.

Buka →
# Date-Time Formatting

Pelajari DateTimeFormatter.ofPattern untuk format tanggal kustom, predefined formatters ISO, dan format locale-aware yang menyesuaikan bahasa dan regional pengguna.

Buka →
# Parsing Date-Time

Pelajari LocalDate.parse untuk mengubah string menjadi objek tanggal, custom pattern via DateTimeFormatter, dan penanganan DateTimeParseException dengan aman.

Buka →
# Date-Time Arithmetic

Pelajari operasi aritmatika tanggal: plusDays, plus(Duration), Period vs Duration, ChronoUnit.DAYS.between, dan strategi menghitung selisih antar tanggal.

Buka →
# Date-Time Best Practices

Rangkuman praktik terbaik pengelolaan tanggal: gunakan Instant untuk timestamp, ZonedDateTime untuk tampilan, hindari java.util.Date lawas, simpan dalam UTC, dan pakai kotlinx-datetime untuk KMP.

Buka →

Bab 23 Java Interoperability

# Calling Java from Kotlin

Pelajari cara Kotlin memanggil kelas Java langsung tanpa new, memakai static method Java, dan memanfaatkan getter/setter Java sebagai properti Kotlin.

Buka →
# Calling Kotlin from Java

Pelajari bagaimana top-level function Kotlin menjadi static method FileNameKt di Java, peran @JvmStatic untuk companion object, dan @JvmOverloads untuk default argumen.

Buka →
# Platform Types

Pelajari konsep platform types T! yang muncul saat Kotlin memakai tipe dari Java tanpa anotasi nullability, dan cara mitigasinya dengan deklarasi tipe eksplisit nullable.

Buka →
# Nullability Annotations

Pelajari bagaimana Kotlin membaca anotasi @Nullable, @NotNull, dan JSR-305 dari kode Java untuk menentukan tipe non-nullable atau nullable secara akurat.

Buka →
# Java Properties dan Kotlin Properties

Pelajari translasi dua arah antara getter/setter Java (getXxx/setXxx) dan properti Kotlin (val/var), termasuk konvensi isXxx untuk Boolean.

Buka →
# Checked Exceptions Interoperability

Pelajari bagaimana Kotlin mengabaikan deklarasi throws Java untuk checked exception, tetap dapat menangkapnya dengan try-catch, dan menggunakan @Throws untuk kompatibilitas Java.

Buka →
# Static Interop

Pelajari companion object sebagai padanan static di Kotlin, @JvmStatic untuk static method sejati yang dapat dipanggil langsung dari Java, dan @JvmField untuk static field.

Buka →
# @JvmField dan @JvmStatic

Pelajari perbedaan @JvmField yang menghasilkan field public langsung tanpa getter, dan @JvmStatic yang menghasilkan static method sejati pada companion object dan object singleton.

Buka →
# @JvmOverloads

Pelajari cara @JvmOverloads menghasilkan beberapa overload Java untuk default argumen Kotlin pada function, constructor, dan method instance, beserta aturan jumlah overload yang dihasilkan.

Buka →
# @JvmName

Pelajari @JvmName untuk mengubah nama method di bytecode Java, @file:JvmName untuk mengubah nama file class, dan disambiguasi type erasure pada List<String> vs List<Int>.

Buka →
# Java Collections Interoperability

Pelajari bagaimana List, MutableList, dan Map Kotlin berinteraksi dengan java.util.List dan java.util.ArrayList, termasuk konversi eksplisit dan jebakan platform type pada elemen.

Buka →
# Interoperability Best Practices

Ringkasan praktik terbaik interoperabilitas Kotlin-Java: anotasi, @JvmStatic, @JvmOverloads, @JvmField, @Throws, dan salinan defensif.

Buka →

Bab 25 Build Tools dan Dependency Management

# Kotlin Compiler

Pelajari kotlinc CLI: opsi -include-runtime, -cp, -d, mode daemon, serta perbedaan kotlinc-jvm, kotlinc-js, dan kotlinc-native.

Buka →
# Gradle Fundamentals

Pelajari konsep dasar Gradle: lifecycle init-configure-execute, perbedaan Kotlin DSL (build.gradle.kts) vs Groovy DSL (build.gradle).

Buka →
# Kotlin Gradle Plugin

Pelajari kotlin-gradle-plugin: cara mendaftarkan plugin kotlin("jvm"), task yang ditambahkan, dan konfigurasi compiler options.

Buka →
# Gradle Project Structure

Pelajari struktur direktori standar Gradle: settings.gradle.kts, build.gradle.kts, src/main/kotlin, src/test/kotlin, serta setup multi-modul.

Buka →
# Gradle Dependencies

Pelajari cara mendeklarasikan dependensi di Gradle: configuration implementation, api, testImplementation, compileOnly, dan format koordinat group:name:version.

Buka →
# Gradle Tasks

Pelajari task Gradle: task bawaan plugin Kotlin, custom task dengan tasks.register, doLast vs doFirst, dan parameter via gradleProperty.

Buka →
# Gradle Build Lifecycle

Bedah tiga fase build Gradle: Initialization, Configuration, Execution, dengan doLast vs doFirst dan up-to-date checking.

Buka →
# Version Catalogs

Pelajari version catalog Gradle: file libs.versions.toml dengan [versions], [libraries], [bundles], dan cara mereferensikannya di build.gradle.kts.

Buka →
# Dependency Resolution

Pelajari cara Gradle menyelesaikan dependensi transitif, strategi konflik versi (highest wins, strict, exclude, constraints), dan pemeriksaan tree.

Buka →
# Maven Fundamentals

Pelajari Maven untuk Kotlin: kotlin-maven-plugin, struktur pom.xml, lifecycle phases compile/test/package, serta perintah mvn umum.

Buka →
# Maven Dependencies

Pelajari dependensi Maven: scope compile, test, provided, runtime; repository Maven Central; serta mvn dependency:tree dan dependency:analyze.

Buka →
# Build Variants

Pelajari build variants Gradle: buildType debug/release, productFlavors, source set per variant, dan applicationIdSuffix untuk multiple build.

Buka →
# Reproducible Builds

Pelajari reproducible builds: input yang sama menghasilkan output bytecode identik, pengaturan Gradle (isReproducibleFileOrder, SOURCE_DATE_EPOCH), dan verifikasi.

Buka →
# Build Tool Best Practices

Rangkuman praktik terbaik build tools: pin versi di version catalog, pakai Gradle Wrapper, build bersih di CI, cache dependensi, hindari dynamic version.

Buka →

Bab 26 Testing

# Testing Fundamentals

Memahami mengapa kita menulis test, jenis-jenis test (unit, integration, e2e), pola Arrange-Act-Assert, dan test pyramid.

Buka →
# kotlin-test

Mengenal paket kotlin.test: assertEquals, assertTrue, assertFailsWith, dan peran sebagai lapisan assertion multiplatform.

Buka →
# JUnit Jupiter

Mengenal JUnit 5 (Jupiter): @Test, @BeforeEach, @AfterEach, @DisplayName, @Disabled, dan method assertion bawaan.

Buka →
# Assertions

Menguasai assertion dasar dan lanjutan: assertEquals, assertNotEquals, assertTrue, assertNull, assertNotNull, assertThrows, dan assertAll untuk grup assertion.

Buka →
# Parameterized Tests

Mengulang test yang sama dengan banyak input: @ParameterizedTest, @ValueSource, @CsvSource, dan @MethodSource.

Buka →
# Test Lifecycle

Mempelajari urutan @BeforeAll, @BeforeEach, @Test, @AfterEach, @AfterAll, serta perbedaan static vs instance method.

Buka →
# Mocking Fundamentals

Mengenal konsep mock: mengganti dependency dengan double terkontrol, perbedaan Stub vs Mock vs Spy vs Fake, dan kapan harus memakai mock.

Buka →
# MockK

Menguasai MockK: mockk<Class>(), every { } returns, verify { }, DSL Kotlin idiomatik untuk mocking.

Buka →
# Stubs, Mocks, dan Fakes

Taksonomi test doubles: kapan memakai Stub (return fixed), Fake (implementasi sederhana), atau Mock (verifikasi panggilan).

Buka →
# Coroutine Testing

Menguji coroutine dengan runTest dari kotlinx-coroutines-test: virtual time, TestDispatcher, dan skip delay otomatis.

Buka →
# Flow Testing

Menguji Flow dengan Turbine: flow.test { awaitItem(); awaitComplete(); awaitError() } dan alternatif tanpa library.

Buka →
# Integration Testing

Menguji integrasi beberapa komponen nyata: pola @SpringBootTest, Ktor testApplication, dan pilihan real database vs Testcontainers.

Buka →
# Database Testing

Strategi menguji repository: H2 in-memory untuk kecepatan, Testcontainers Postgres untuk kepercayaan, dan migration test untuk skema.

Buka →
# Test Fixtures

Setup bersama dengan @BeforeEach, fixture function, dan test data builder untuk menyusun objek uji yang ringkas dan konsisten.

Buka →
# Test Coverage

Mengukur cakupan test dengan JaCoCo: perbedaan line coverage vs branch coverage, kesalahpahaman umum tentang angka 100%, dan apa yang sebaiknya diuji.

Buka →
# Property-Based Testing

Menguji sifat (property) yang harus selalu benar dengan input acak: kotest property testing, jqwik, dan menemukan edge case otomatis.

Buka →
# Testcontainers

Menjalankan service nyata di Docker saat test: PostgreSQLContainer, GenericContainer, dan lifecycle container yang otomatis.

Buka →
# Testing Best Practices

Prinsip praktik testing: uji perilaku bukan implementasi, satu assertion per test, penamaan jelas, test cepat dan hermetic.

Buka →

Bab 27 Debugging dan Code Quality

# Membaca Stack Traces

Pelajari anatomi stack trace: thread, file:line, rantai method, urutan innermost ke outermost, dan pola 'Caused by'.

Buka →
# IDE Debuggers

Pelajari IntelliJ IDEA debugger: pause dan resume eksekusi, step over/into/out, panel Variables, serta Evaluate Expression untuk memeriksa state program secara interaktif.

Buka →
# Breakpoints dan Watchpoints

Kuasai jenis breakpoint di IntelliJ: line, conditional, method, dan field watchpoint untuk menjeda eksekusi pada kondisi spesifik.

Buka →
# Step-Through Debugging

Kuasai Step Over, Step Into, Step Out, dan Drop Frame untuk menelusuri eksekusi program secara presisi.

Buka →
# Logging Fundamentals

Pelajari dasar logging: level log TRACE/DEBUG/INFO/WARN/ERROR, format structured, dan agregasi log di lingkungan produksi.

Buka →
# SLF4J dan Logback

Pelajari pola SLF4J sebagai façade logger dan Logback sebagai implementasi: LoggerFactory.getLogger, logback.xml, appender console dan file.

Buka →
# Logging Levels

Pelajari kapan memakai TRACE, DEBUG, INFO, WARN, dan ERROR dengan contoh skenario produksi yang konkret.

Buka →
# Static Analysis

Pelajari mengapa static analysis penting: menangkap bug tanpa menjalankan kode, tools utama (detekt, ktlint, IntelliJ inspections), dan integrasi CI.

Buka →
# detekt

Pelajari detekt sebagai static analyzer Kotlin: konfigurasi config/detekt.yml, custom rules, dan integrasi Gradle plugin.

Buka →
# ktlint

Pelajari ktlint sebagai linter dan formatter Kotlin Coding Conventions: ktlintCheck, ktlintFormat, dan integrasi Gradle.

Buka →
# Compiler Warnings

Pelajari compiler warning umum (unused variable, deprecated API, parameter shadowing) dan kapan memakai @Suppress dengan tepat.

Buka →
# Refactoring

Pelajari IDE refactoring di IntelliJ: rename, extract method, extract class, inline, dan kapan melakukan refactoring dengan aman.

Buka →
# Code Formatting

Pelajari konvensi formatting Kotlin: 4 spasi, tanpa semicolon, max 120 karakter, dan otomatisasi via ktlint serta pre-commit hook.

Buka →
# Code Review Practices

Pelajari praktik code review yang efektif: PR kecil, single concern, self-review, checklist, dan umpan balik yang konstruktif.

Buka →

Bab 28 Software Design dan Architecture

# Clean Code

Pelajari prinsip clean code: nama bermakna, fungsi kecil, single responsibility, dan komentar yang menjelaskan mengapa bukan apa.

Buka →
# SOLID Principles

Pelajari lima prinsip SOLID: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.

Buka →
# Separation of Concerns

Pelajari pemisahan tanggung jawab antar layer: UI, business logic, dan data, dengan contoh kode konkret.

Buka →
# Dependency Inversion

Pelajari Dependency Inversion Principle: bagaimana modul tingkat tinggi bergantung pada abstraction, bukan concretion, sehingga kode menjadi mudah diganti dan diuji.

Buka →
# Dependency Injection

Pelajari pola Dependency Injection di Kotlin: constructor, setter, dan field injection, serta perbandingan container manual dengan framework seperti Koin, Dagger Hilt, dan Spring.

Buka →
# Composition over Inheritance

Pelajari mengapa composition lebih fleksibel daripada inheritance mendalam, dan bagaimana menyusun object dari perilaku-perilaku kecil menggunakan interface di Kotlin.

Buka →
# Immutability

Pelajari immutability di Kotlin: pakai val alih-alih var, copy data class alih-alih mutate, dan dapatkan thread-safety secara default.

Buka →
# Domain Modeling

Pelajari domain modeling di Kotlin: value objects, entities, aggregates, dan bounded contexts untuk merepresentasikan aturan bisnis dalam kode.

Buka →
# Layered Architecture

Pelajari layered architecture: presentation, application, domain, dan infrastructure, serta bagaimana setiap layer hanya bergantung pada layer di bawahnya.

Buka →
# Clean Architecture

Pelajari Clean Architecture: entities, use cases, interface adapters, dan frameworks, dengan aturan dependency yang ketat dari luar ke dalam.

Buka →
# Hexagonal Architecture

Pelajari Hexagonal Architecture (Ports and Adapters): memisahkan core domain dari driving adapter dan driven adapter, sehingga aplikasi mudah diganti UI maupun sumber data.

Buka →
# Domain-Driven Design

Pelajari Domain-Driven Design: strategic design dengan bounded contexts dan ubiquitous language, tactical design dengan entities, value objects, aggregates, repositories, dan domain services.

Buka →
# Design Patterns

Pelajari katalog design patterns GoF: creational, structural, dan behavioral, dengan implementasi idiomatic Kotlin yang memanfaatkan fitur bahasa modern.

Buka →
# Factory Pattern

Pelajari Factory Pattern di Kotlin: companion object sebagai factory, generic interface Factory<T>, dan sealed class factory untuk parsing input terstruktur.

Buka →
# Builder Pattern

Pelajari Builder Pattern di Kotlin: data class dengan default parameter, named arguments, scope function apply, dan DSL-like nested config.

Buka →
# Strategy Pattern

Pelajari Strategy Pattern di Kotlin: interface Strategy klasik dan function type sebagai alternatif idiomatic yang lebih ringkas.

Buka →
# Observer Pattern

Pelajari Observer Pattern di Kotlin: Subject + Observer klasik, function-based subscriber, dan implementasi StateFlow-like yang terinspirasi dari ReactiveX.

Buka →
# Adapter Pattern

Pelajari Adapter Pattern di Kotlin: class adapter untuk interface tidak kompatibel, extension function sebagai adapter idiomatic, dan adapter untuk koleksi dan JSON.

Buka →
# Decorator Pattern

Pelajari Decorator Pattern di Kotlin: tambah behavior tanpa modifikasi original, dengan `by` delegation yang mengeliminasi boilerplate Java tradisional.

Buka →
# Repository Pattern

Pelajari Repository Pattern di Kotlin: abstract data access dengan generic interface Repository<T, ID>, decorator cache, specification pattern, dan adapter API.

Buka →
# Memilih Arsitektur Aplikasi

Pelajari cara memilih arsitektur yang tepat: decision tree sederhana untuk script tunggal, layered, clean, atau hexagonal, lengkap dengan trade-off dan evolusi.

Buka →

Bab 29 Algorithms dan Data Structures

# Kompleksitas Waktu dan Memori

Pelajari cara mengukur kinerja algoritma dengan kompleksitas waktu dan memori, serta trade-off klasik antara waktu dan ruang.

Buka →
# Big-O Notation

Pelajari Big-O Notation dari O(1) hingga O(2^n), beserta best/worst/average case untuk setiap algoritma.

Buka →
# Array dan Linked List

Pelajari Array dengan akses O(1) dan Linked List dengan insert/delete O(1) di posisi yang diketahui, serta implementasi LinkedList di Kotlin.

Buka →
# Stack dan Queue

Pelajari Stack (LIFO) dan Queue (FIFO) di Kotlin: implementasi dengan ArrayDeque, cek bracket seimbang, dan simulasi antrian.

Buka →
# Hash Table

Pelajari Hash Table: hash function, collision resolution dengan chaining dan open addressing, load factor, dan perbandingan dengan HashMap Kotlin.

Buka →
# Tree dan Binary Search Tree

Pelajari struktur tree: terminologi root/leaf/height, Binary Search Tree dengan insert/search O(log n), dan tiga jenis traversal.

Buka →
# Heap dan Priority Queue

Pelajari Min-Heap dan Max-Heap, implementasi sift-up/sift-down, java.util.PriorityQueue, dan use case top-K.

Buka →
# Graph

Pelajari struktur data graph: adjacency list vs matrix, directed/undirected, weighted, dan implementasi class Graph di Kotlin.

Buka →
# Searching Algorithms

Pelajari linear search O(n) dan binary search O(log n) pada sorted array, lengkap dengan function binarySearch bawaan Kotlin stdlib.

Buka →
# Sorting Algorithms

Pelajari algoritma pengurutan bubble, selection, insertion O(n²) dan merge, quick, heap O(n log n), serta function sorted() bawaan Kotlin.

Buka →
# Recursion dan Backtracking

Pelajari recursion dengan base case dan recursive case, risiko stack overflow, serta backtracking untuk N-Queens, permutasi, dan subset sum.

Buka →
# Greedy Algorithms

Pelajari pola greedy yang memilih local optimum menuju global optimum: coin change, activity selection, fractional knapsack, dan kapan greedy gagal.

Buka →
# Dynamic Programming

Pelajari memoization (top-down) dan tabulation (bottom-up) dengan contoh Fibonacci, 0/1 knapsack, LCS, dan minimum coin change.

Buka →
# Graph Algorithms

Pelajari BFS, DFS, Dijkstra shortest path, dan topological sort Kahn's algorithm dengan implementasi Kotlin di graph adjacency list berbobot.

Buka →
# Implementasi Algoritma dengan Kotlin

Pelajari cara menulis algoritma secara idiomatic Kotlin: extension function, sealed class untuk state, sequence untuk lazy evaluation, dan tail recursion.

Buka →

Bab 30 Security

# Secure Coding Principles

Pelajari empat prinsip dasar pengkodean aman: least privilege, defense in depth, fail secure, dan jangan percaya input.

Buka →
# Input Validation

Pelajari validasi input di boundary sistem dengan pendekatan whitelist, parsing tipe-aman, serta pencegahan SQL injection dan command injection.

Buka →
# Output Encoding

Pelajari encoding output untuk HTML, URL, dan JSON untuk mencegah serangan cross-site scripting (XSS) saat data dikirim ke lapisan presentasi.

Buka →
# Secrets Management

Pelajari pengelolaan rahasia aplikasi dengan environment variable, Vault, dan KMS, serta mengapa hardcoding secret di source code adalah praktik berbahaya.

Buka →
# Cryptography Fundamentals

Pelajari dasar-dasar kriptografi: algoritma simetris (AES) vs asimetris (RSA), fungsi hash (SHA-256), HMAC, serta key derivation dengan PBKDF2.

Buka →
# Secure Randomness

Pelajari perbedaan SecureRandom dengan kotlin.random.Random, generasi UUID yang aman, serta cara membangkitkan token dengan kualitas kriptografis.

Buka →
# Password Hashing

Pelajari hashing password dengan PBKDF2, bcrypt, scrypt, dan Argon2—termasuk salt, work factor, serta mengapa MD5 dan SHA-1 tidak boleh dipakai untuk password.

Buka →
# Message Digests dan Signatures

Pelajari SHA-256 message digest untuk verifikasi integritas, serta tanda tangan digital RSA dan ECDSA untuk memverifikasi keaslian data.

Buka →
# TLS dan Certificate Validation

Pelajari handshake TLS, validasi rantai sertifikat X.509, certificate pinning, serta jebakan umum yang sering membahayakan implementasi TLS di aplikasi.

Buka →
# Deserialization Security

Pelajari mengapa Java Serializable berbahaya saat dipakai pada sumber tidak terpercaya, serta cara memilih format dan parser yang aman dengan validasi eksplisit.

Buka →
# Path Traversal

Pelajari serangan path traversal dengan payload seperti ../etc/passwd, serta tiga lapis mitigasi: normalize+startsWith, whitelist nama file, dan validasi karakter.

Buka →
# Dependency Vulnerability Management

Pelajari manajemen kerentanan dependency dengan basis data CVE, OWASP Dependency-Check, Snyk, dan bot Renovate untuk menjaga rantai suplai tetap aman.

Buka →
# Secure Kotlin Applications

Rangkuman praktik keamanan Kotlin: defense in depth checklist, null safety, immutability, dan sealed class untuk state machine yang aman.

Buka →

Bab 31 Kotlin Multiplatform

# Pengenalan Kotlin Multiplatform

Pelajari konsep Kotlin Multiplatform: bagaimana satu kode bisnis Kotlin dapat berjalan di Android, iOS, JVM, dan lainnya sambil tetap mempertahankan UI native per platform.

Buka →
# Multiplatform Project Structure

Pelajari struktur proyek Kotlin Multiplatform: deklarasi target di build.gradle.kts, hierarki source set, dan cara commonMain terhubung ke platform source sets.

Buka →
# commonMain dan Platform Source Sets

Pelajari peran commonMain sebagai tempat kode bersama, hubungannya dengan source set spesifik platform, dan mekanisme expect/actual yang menjembatani keduanya.

Buka →
# expect dan actual

Pelajari mekanisme expect/actual: deklarasi kontrak di commonMain dan implementasi per platform, untuk fungsi, property, dan class.

Buka →
# Platform-Specific Code

Pelajari kapan harus menulis kode platform-specific—file I/O, network, threading, logging—dan cara memilih antara expect/actual versus dependency injection.

Buka →
# Multiplatform Dependencies

Pelajari cara mendeklarasikan dependency KMP di build.gradle.kts—commonMain untuk library multiplatform, platform source sets untuk library spesifik.

Buka →
# Multiplatform Testing

Pelajari commonTest source set: tulis test sekali dengan kotlin.test, jalankan di setiap target platform—JVM, Android, iOS—dengan hasil yang konsisten.

Buka →
# Kotlin Multiplatform Library

Pelajari cara membangun library KMP untuk Maven Central: struktur source set, deklarasi target, plugin maven-publish, dan metadata POM.

Buka →
# Multiplatform Networking

Pelajari ktor-client untuk KMP: kode HTTP bersama di commonMain dengan engine spesifik per platform—OkHttp untuk JVM/Android, Darwin untuk iOS.

Buka →
# Multiplatform Persistence

Pelajari SQLDelight dan Room KMP: definisi SQL bersama di commonMain, driver spesifik platform—AndroidSqliteDriver untuk Android, NativeSqliteDriver untuk iOS.

Buka →
# Multiplatform UI Overview

Pelajari tiga opsi UI untuk KMP: native (SwiftUI + Compose), shared ViewModel dengan UI native, dan Compose Multiplatform yang berbagi UI lintas platform.

Buka →
# Compose Multiplatform

Pelajari Compose Multiplatform: satu UI codebase Compose untuk Android, iOS, Desktop, dan Web dengan struktur source set KMP.

Buka →
# Multiplatform Deployment

Pelajari cara membangun artifact per target KMP—JAR untuk JVM, AAR untuk Android, Framework untuk iOS, KLIB untuk Native—dan strategi distribusinya.

Buka →

Bab 32 Android Development

# Pengenalan Android dengan Kotlin

Mengenal Android sebagai sistem operasi mobile, peran Kotlin sebagai bahasa resmi sejak 2017, SDK, NDK, Jetpack, dan empat komponen aplikasi utama.

Buka →
# Android Studio dan SDK

Mengenal Android Studio sebagai IDE resmi, SDK Manager, AVD emulator, build variants, serta alat baris perintah seperti ADB dan logcat.

Buka →
# Android Project Structure

Membedah struktur proyek Android: modul Gradle, file build.gradle.kts, AndroidManifest.xml, serta source set main, test, dan androidTest.

Buka →
# Activity Lifecycle

Membahas state Activity Android: created, started, resumed, paused, stopped, destroyed; serta override callback onCreate, onResume, onPause, dan skenario rotasi layar.

Buka →
# Intents dan Navigation

Mengenal explicit intent untuk memulai Activity lain, implicit intent untuk membuka URL atau action sistem, serta Navigation Component untuk alur antar Fragment.

Buka →
# Layouts dan UI Components

Mengenal layout XML Android: LinearLayout, ConstraintLayout; common views seperti TextView, Button, RecyclerView; serta prinsip Material Design.

Buka →
# Jetpack Compose Fundamentals

Mengenal UI deklaratif Jetpack Compose: @Composable function, Column, Row, Box, Text, Button, dan anotasi @Preview.

Buka →
# Composable Functions

Membedah anotasi @Composable, sifat fungsi murni dari state, konsep recomposition, serta aturan stabilitas parameter.

Buka →
# State dan Recomposition

Membahas state hoisting, State`<T>` dan MutableState`<T>`, remember, serta rememberSaveable untuk mempertahankan state lintas perubahan konfigurasi.

Buka →
# Compose Layouts

Mengenal Column, Row, Box, LazyColumn, LazyRow, LazyVerticalGrid; serta rantai Modifier untuk padding, spacing, dan ukuran.

Buka →
# Compose Navigation

Navigation Component untuk Jetpack Compose: NavHost, route, argumen type-safe, dan bottom navigation bar.

Buka →
# ViewModel

Mengenal ViewModel sebagai penampung state UI yang bertahan lintas perubahan konfigurasi, viewModelScope untuk coroutine, dan ekspos StateFlow ke Compose.

Buka →
# Lifecycle-Aware Components

Mengenal LifecycleObserver, @OnLifecycleEvent, LifecycleService, dan komponen yang sadar terhadap siklus hidup Activity.

Buka →
# StateFlow untuk UI

Membeding StateFlow vs LiveData, pola single source of truth di ViewModel, dan collectAsState() di Compose.

Buka →
# Coroutines di Android

Menggunakan viewModelScope.launch dan lifecycleScope.launch, integrasi Retrofit + coroutines, serta perbedaan Dispatchers.Main vs Dispatchers.IO.

Buka →
# Repository Pattern Android

Mengenal Repository sebagai abstraksi sumber data (network, db) dengan single source of truth, serta lapisan Use Case untuk logika bisnis.

Buka →
# Room Database

Mengenal Room sebagai ORM Android: @Database, @Entity, @Dao, verifikasi SQL saat kompilasi, dan migrasi skema antar versi.

Buka →
# DataStore

Mengenal DataStore sebagai pengganti SharedPreferences: Preferences DataStore async dan Proto DataStore type-safe.

Buka →
# Networking dan Retrofit

Setup Retrofit, anotasi @GET/@POST, converter Moshi/Gson, dan OkHttp interceptor untuk autentikasi serta logging.

Buka →
# Serialization dan JSON

Mengenal kotlinx.serialization dengan @Serializable, @SerialName, custom serializer, dan perbandingan dengan Moshi untuk network DTO.

Buka →
# Dependency Injection dengan Hilt

Mengenal Hilt sebagai wrapper Dagger untuk Android: @HiltAndroidApp, @Inject, @Module, @InstallIn, dan @Provides.

Buka →
# Permissions dan Runtime Permissions

Mengenal runtime permission Android 6+: requestPermission API, rememberLauncherForActivityResult di Compose, dan UI rationale.

Buka →
# Background Work dengan WorkManager

Mengenal WorkManager untuk tugas latar belakang yang dijamin selesai: OneTimeWorkRequest, PeriodicWorkRequest, constraints, dan backoff policy.

Buka →
# Notifications

Mengenal notification channels Android 8+, NotificationManager, PendingIntent, action button, dan foreground service notification.

Buka →
# Android Security

Praktik keamanan aplikasi Android: penyimpanan terenkripsi, network security config, ProGuard/R8, dan mitigasi risiko umum.

Buka →
# Android Unit Testing

Strategi pengujian unit di Android: test lokal (JVM), instrumented test (di device/emulator), mock dengan MockK, dan pola MVVM testable.

Buka →
# Compose UI Testing

Pengujian UI Jetpack Compose: createComposeRule, findNode, performClick, dan screenshot testing.

Buka →
# Performance dan Profiling

Profiling aplikasi Android: CPU Profiler, Memory Profiler, Layout Inspector, dan Macrobenchmark untuk pengukuran kinerja.

Buka →
# Release dan Publishing

Build APK/AAB, sign dengan keystore, publikasi ke Google Play Console, dan staged rollout.

Buka →

Bab 33 Backend Development

# Backend Kotlin Overview

Kenali alasan Kotlin dipakai untuk backend: sintaks ringkas, null-safety, coroutines, dan ekosistem yang menopang layanan produksi.

Buka →
# Memilih Backend Framework

Bandingkan Ktor dan Spring Boot berdasarkan ukuran tim, kebutuhan ekosistem, latensi target, dan kurva belajar untuk memilih framework backend Kotlin.

Buka →
# Ktor Fundamentals

Pahami tiga konsep inti Ktor: Application class, pipeline phases, dan plugin — fondasi yang menopang seluruh permintaan HTTP di framework Ktor.

Buka →
# Ktor Project Structure

Bedah struktur proyek Ktor: file build.gradle.kts, application.conf HOCON, layout source code, dan konvensi modul yang dipakai kode produksi.

Buka →
# Ktor Routing

Pelajari DSL routing Ktor: route statis, route parameter dinamis {id}, nested route, dan mekanisme pencocokan path yang dipakai framework Ktor.

Buka →
# Ktor Request dan Response

Pelajari ApplicationCall di Ktor: membaca body request via call.receive, menghasilkan respons via call.respondText, mengatur status code dan header HTTP.

Buka →
# Ktor Content Negotiation

Pasang plugin ContentNegotiation Ktor untuk mengonversi objek Kotlin ke JSON dan sebaliknya secara otomatis lewat serializer yang terdaftar.

Buka →
# Ktor Serialization

Pelajari kotlinx.serialization: anotasi @Serializable, serializer yang dihasilkan kompilator, dan round-trip objek Kotlin ke JSON dengan aman.

Buka →
# Ktor Validation

Validasi body request di Ktor: validator kustom per entitas, pengumpulan error multi-field, dan respons error mengikuti RFC 7807 Problem Details.

Buka →
# Ktor Error Handling

Pasang plugin StatusPages Ktor untuk memetakan exception ke respons HTTP, mendaftar handler per tipe exception, dan menyediakan fallback untuk kesalahan tak terduga.

Buka →
# Ktor Authentication

Pasang plugin Authentication Ktor dengan Basic auth, JWT, dan Session — pahami kontrak Principal, AuthProvider, dan urutan provider dalam pipeline.

Buka →
# Ktor Authorization

Terapkan role-based access control di Ktor: principal dengan set peran, route-level guard, dan kebijakan akses yang mengembalikan 403 Forbidden bila tidak diizinkan.

Buka →
# Ktor Database Integration

Integrasikan Ktor dengan database via JDBC: HikariCP untuk connection pool, pola repository untuk akses data, dan SQLite in-memory untuk demonstrasi.

Buka →
# Ktor Testing

Uji aplikasi Ktor dengan testApplication: hidupkan engine in-memory, jalankan request, dan periksa respons dengan assertion yang jelas.

Buka →
# Spring Boot dengan Kotlin

Mulai dengan Spring Boot dan Kotlin: anotasi @SpringBootApplication, container IoC, dan konstruktor injection untuk membangun aplikasi modular.

Buka →
# Spring Dependency Injection

Pahami Dependency Injection Spring: anotasi @Component, @Service, @Repository, @Autowired, dan container IoC yang mengelola lifecycle bean.

Buka →
# Spring MVC dan REST API

Bangun REST API dengan Spring MVC: anotasi @RestController, @GetMapping, @PostMapping, @PathVariable, dan @RequestBody untuk routing dan binding.

Buka →
# Spring Data JPA

Pakai Spring Data JPA: JpaRepository<T, ID>, derived query methods seperti findByNama, dan @Query untuk query kustom yang terstruktur.

Buka →
# Spring Security

Pahami Spring Security: filter chain, JWT auth filter, SecurityContext berbasis ThreadLocal, dan anotasi @PreAuthorize untuk otorisasi method-level.

Buka →
# Database Transactions

Pahami transaksi database: prinsip ACID, @Transactional Spring, isolation level, dan commit/rollback yang diuji lewat SQLite in-memory.

Buka →
# API Pagination dan Filtering

Terapkan pagination page/pageSize dan cursor-based pada REST API, lengkap dengan filter dinamis berdasarkan kategori dan range harga.

Buka →
# API Versioning

Strategi versioning REST API: URL versioning /v1/, header versioning X-API-Version, content negotiation via Accept header, dan header Deprecation.

Buka →
# API Documentation

Hasilkan dokumentasi API OpenAPI/Swagger secara otomatis dengan springdoc-openapi: tag, operation, parameter, response, dan tautan Swagger UI.

Buka →
# Background Jobs

Jadwalkan tugas latar belakang dengan @Scheduled Spring, Quartz scheduler, JobStore, dan cron expression untuk eksekusi teratur.

Buka →
# Backend Production Readiness

Siapkan aplikasi backend untuk produksi: health check via HealthIndicator, metrics Micrometer, graceful shutdown, dan structured logging.

Buka →

Bab 34 Database Programming

# Relational Database Fundamentals

Pelajari konsep inti relational database: table, primary key, foreign key, normalisasi 1NF-3NF, dan indeks untuk akses data yang konsisten.

Buka →
# JDBC Fundamentals

Pelajari JDBC API di Kotlin: DriverManager, Connection, Statement, dan ResultSet sebagai fondasi akses database langsung tanpa ORM.

Buka →
# Connecting to Database

Pelajari format JDBC URL, perbedaan SQLite (embedded) vs PostgreSQL (client-server), dan lifecycle koneksi yang aman.

Buka →
# Executing SQL Queries

Pelajari tiga method eksekusi SQL JDBC — execute(), executeQuery(), executeUpdate() — dan kapan memakai masing-masing untuk operasi baca atau tulis.

Buka →
# Prepared Statements

Pelajari PreparedStatement, parameter binding dengan placeholder ?, dan cara mencegah SQL injection yang menjadi celah paling umum di aplikasi database.

Buka →
# Result Sets

Pelajari iterasi ResultSet dengan next(), akses kolom via getString/getInt, serta jenis cursor forward-only dan scrollable untuk navigasi fleksibel.

Buka →
# Transaction Management

Pelajari transaction management JDBC: setAutoCommit(false), commit, rollback, savepoint, ACID properties, dan isolation levels untuk integritas data.

Buka →
# Connection Pooling

Pelajari connection pooling dengan HikariCP: konfigurasi max pool size, idle timeout, dan mengapa pooling penting untuk aplikasi server.

Buka →
# ORM Fundamentals

Pelajari Object-Relational Mapping: memetakan class Kotlin ke tabel SQL, keuntungan dan kerugian ORM, serta kapan memakainya.

Buka →
# Exposed Framework

Pelajari Exposed DSL dari JetBrains: definisi Table, insert, select, dan blok transaction untuk akses database type-safe di Kotlin.

Buka →
# JPA dan Hibernate

Pelajari JPA sebagai standar persistence Java, implementasi Hibernate, anotasi @Entity/@Id/@OneToMany, serta lifecycle session.

Buka →
# Entities dan Relationships

Pelajari relasi entity JPA — one-to-one, one-to-many, many-to-many — serta strategi fetch EAGER vs LAZY dan jebakan N+1 query.

Buka →
# Database Migrations

Pelajari database migrations dengan Flyway dan Liquibase: skrip SQL versi yang diterapkan berurutan untuk evolusi skema yang terkontrol.

Buka →
# Database Seeding

Pelajari database seeding untuk mengisi data awal secara idempoten: INSERT OR IGNORE, ON CONFLICT, dan kapan seeding dipakai.

Buka →
# Database Testing

Pelajari strategi testing database: SQLite in-memory atau H2 untuk kecepatan, Testcontainers untuk realisme, serta pola fixture per test.

Buka →
# Database Security

Pelajari keamanan database: koneksi terenkripsi TLS, prinsip least privilege pada user DB, dan audit log untuk akuntabilitas operasi.

Buka →

Bab 35 Serialization dan Data Formats

# Serialization Fundamentals

Pelajari konsep dasar serialisasi: mengubah object menjadi bytes dan sebaliknya, tiga use case utama (persistence, network, cache), dan strategi skema evolusi.

Buka →
# kotlinx.serialization

Pelajari kotlinx.serialization: anotasi @Serializable, compiler plugin yang menghasilkan serializer otomatis, dan penggunaan Json.encodeToString / decodeFromString.

Buka →
# JSON Serialization

Pelajari JSON serialization dengan kotlinx.serialization: anotasi @SerialName, @Transient, @Optional, konfigurasi Json (prettyPrint, ignoreUnknownKeys), dan nested object.

Buka →
# Custom Serializers

Pelajari cara menulis KSerializer`<T>` kustom untuk tipe kompleks seperti LocalDate, BigDecimal, dan Color yang belum didukung bawaan kotlinx.serialization.

Buka →
# Polymorphic Serialization

Pelajari polymorphic serialization: sealed class dengan beberapa subclass, discriminator field, dan anotasi @JsonClassDiscriminator untuk kontrol nama discriminator.

Buka →
# JSON Schema Validation

Pelajari validasi JSON terhadap schema: cek tipe field, required, range, format (email/date), enum, dan deteksi field tidak dikenali sebelum diproses aplikasi.

Buka →
# CSV Processing

Pelajari parsing dan penulisan CSV di Kotlin: compliance RFC 4180, type-safe mapping ke data class, dan streaming reader untuk file besar.

Buka →
# XML Processing

Pelajari XML processing di Kotlin: parser DOM yang membangun tree, streaming parser SAX-like untuk file besar, escaping entity, dan trade-off DOM vs streaming.

Buka →
# Binary Formats

Pelajari format binary ProtoBuf: encoding field tag + wire type, varint compression, schema evolution (backward dan forward compatibility), dan perbandingan ukuran dengan JSON.

Buka →
# Serialization Security

Pelajari risiko keamanan serialization: polymorphic RCE, DoS via payload besar, billion laughs, gadget chain; serta pola defensif—validasi input, batasi ukuran, tolak field tidak dikenali.

Buka →

Bab 37 Performance dan Optimization

# Profiling Kotlin Applications

Mengenal profiling aplikasi Kotlin: tools utama (VisualVM, async-profiler, JFR), CPU sampler, memory profiler, dan teknik step-counting untuk demo deterministik.

Buka →
# Benchmarking Fundamentals

Fundamental microbenchmark: tiga jebakan utama (JIT warmup, dead code elimination, GC pauses), aturan emas, dan demo step-counting yang deterministik.

Buka →
# JMH

Java Microbenchmark Harness: anotasi @Benchmark, @State, @Warmup, @Measurement, plugin Gradle JMH, dan simulasi runner yang menangani jebakan microbenchmark otomatis.

Buka →
# Allocation Profiling

Menemukan alokasi objek berlebih dengan profiler, escape analysis JIT, dan perbandingan strategi implementasi: String concat vs StringBuilder, Array`<Int>` vs IntArray.

Buka →
# Collection Performance

Performansi koleksi Kotlin: ArrayList vs LinkedList, HashMap vs TreeMap, pre-size dengan initialCapacity, dan tabel ringkasan Big-O.

Buka →
# Sequence Performance

Sequence vs List untuk chained operations: Sequence menang untuk koleksi besar dengan banyak operasi, List menang untuk koleksi kecil atau single pass.

Buka →
# Coroutine Performance

Performansi coroutine: lebih ringan daripada thread, pilihan dispatcher (Default, IO, Main), context switch overhead, dan aturan optimasi concurrency.

Buka →
# Memory Usage

Mengukur overhead memori: object header, primitif vs boxed, IntArray vs Array<Int>, dan string deduplication.

Buka →
# Avoiding Unnecessary Allocations

Pola mengurangi alokasi objek: StringBuilder, object reuse, value class, pooling, dan sequence untuk pipeline lazy.

Buka →
# inline Functions Performance

Mekanisme inline function, eliminasi alokasi lambda, reified type, crossinline/noinline, serta trade-off bytecode size.

Buka →
# Performance Regression Testing

Mendeteksi regression performance via benchmark CI, output JSON, baseline comparison, dan threshold warning/fail.

Buka →

Bab 38 Deployment dan Production

# Packaging JVM Applications

Tipe artefak JAR (thin, fat, executable, Spring Boot), manifest Main-Class, dan perintah packaging populer (kotlinc, Shadow, bootJar).

Buka →
# Executable JARs

Atribut Main-Class di manifest, execution flow java -jar, dan mekanisme loader Spring Boot untuk nested JAR.

Buka →
# Native Binaries dengan Kotlin/Native

Kompilasi Kotlin ke binary native via LLVM, target platform (linuxX64, macosArm64, iosArm64), komparasi dengan GraalVM native-image.

Buka →
# Runtime Configuration

Strategi konfigurasi runtime: defaults, file config (HOCON/YAML/TOML), system properties, environment variables, CLI args, dengan urutan override yang jelas.

Buka →
# Environment Variables

Membaca env vars via System.getenv(), normalisasi SNAKE_CASE ke dot notation, validasi wajib, dan praktik 12-factor app untuk secrets.

Buka →
# Logging dan Observability

Structured logging JSON, trace ID untuk korelasi antar service, dan tiga pilar observability (logs, metrics, traces) via OpenTelemetry.

Buka →
# Health Checks

Endpoint /health/live dan /health/ready, HealthIndicator, liveness vs readiness Kubernetes probe, dan agregasi worst-status.

Buka →
# Metrics dan Monitoring

Empat tipe metric (counter, gauge, timer, histogram), Micrometer registry, format Prometheus, dan dashboard Grafana.

Buka →
# Docker Fundamentals

Konsep Docker (image, layer, container, registry), anatomi Dockerfile, multi-stage build, layer caching, dan base image JVM populer.

Buka →
# Containerizing Kotlin Applications

Containerization spesifik Kotlin: Dockerfile multi-stage, JVM args untuk container, jlink untuk runtime minimal, dan distroless image.

Buka →
# CI/CD Fundamentals

Tahapan pipeline (build, test, lint, package, deploy), fail-fast, build matrix, dan artifact retention — pondasi praktik CI/CD untuk Kotlin.

Buka →
# GitHub Actions

Workflow GitHub Actions untuk Kotlin: trigger, matrix build, cache Gradle, step build/test/package, dan upload artifact.

Buka →
# Graceful Shutdown

Menangani SIGTERM, menyelesaikan request in-flight, menutup resource (DB pool, koneksi), dan kontrak Kubernetes terminationGracePeriodSeconds.

Buka →
# Production Troubleshooting

Mendiagnosis masalah produksi: thread dump, heap snapshot, deteksi deadlock, pesan kesalahan umum, dan strategi incident response.

Buka →
# Release Management

Semantic versioning, release candidate, changelog (Keep a Changelog), strategi rollback blue-green/canary, dan checklist rilis.

Buka →

Bab 39 Modern Kotlin

# Modern Kotlin Language Features

Ringkasan fitur bahasa Kotlin terbaru (1.9 - 2.2): data object, when guard, K2 compiler, context parameters, dan builder inference.

Buka →
# Context Parameters

Context parameters (Kotlin 2.2+): pengganti context receiver untuk menyuntik dependensi implisit dengan deklarasi eksplisit dan rename parameter.

Buka →
# data object

data object — singleton dengan toString/equals/hashCode otomatis. Cocok untuk deklarasi konstanta terstruktur dan sealed child tanpa state.

Buka →
# Guard Conditions

Guard conditions pada when — menggabungkan is Type dengan kondisi boolean tambahan di satu branch. Tersedia stabil di Kotlin 2.1+.

Buka →
# when Expressions Lanjutan

when tingkat lanjut: exhaustive sealed class, binding variabel subject, destructuring, range, dan multiple values.

Buka →
# Definitely Non-Nullable Types

T & Any — sintaks untuk memaksa tipe parameter generik T menjadi non-nullable di scope tertentu. Stabil sejak Kotlin 1.8.

Buka →
# Builder Inference

Builder inference — kompilator menyimpulkan tipe parameter generik dari isi lambda body. buildList, buildMap, dan builder kustom jadi lebih ringkas.

Buka →
# Kotlin K2 Compiler

K2 compiler (Kotlin 2.0+) — arsitektur frontend baru yang lebih cepat dan akurat dalam inferensi tipe. Default sejak Kotlin 2.0.

Buka →
# Kotlin Language Evolution

Kotlin Evolution and Review Process (KEEP) — bagaimana fitur bahasa baru diusulkan, didiskusikan, dan distabilkan oleh Language Design Group.

Buka →
# Compatibility dan Migration

Kompatibilitas biner/sumber/behavior, deprecation cycle (warning -> error -> removal), language version, api version, dan strategi migrasi.

Buka →

Bab 41 Sumber Belajar

# Dokumentasi Resmi

Tur dokumentasi resmi Kotlin di kotlinlang.org/docs/home.html: Get Started, Tour of Kotlin, Idioms, dan cara navigasi yang efektif.

Buka →
# Kotlin Language Specification

Mengenal Kotlin Language Specification di kotlinlang.org/spec/: aturan formal smart cast, overload resolution, nullability, dan operator overloading.

Buka →
# Kotlin API Reference

Tur Kotlin API reference (standard library) di kotlinlang.org/api/latest/jvm/stdlib/: collections, strings, scope functions, dan cara navigasi paket.

Buka →
# Panduan Coroutines

Tur panduan resmi Coroutines di kotlinlang.org/docs/coroutines-overview.html: suspend function, async/await, Flow, dispatcher, dan structured concurrency.

Buka →
# Panduan Kotlin Multiplatform

Tur panduan Kotlin Multiplatform di kotlinlang.org/docs/multiplatform.html: source set common/jvm/ios, kontrak expect/actual, dan kapan memakai KMP.

Buka →
# Panduan Android

Tur panduan Android Kotlin di developer.android.com/kotlin: activity lifecycle, ViewModel, observable state, intent, dan stack Jetpack modern.

Buka →
# Panduan Backend

Tur panduan backend Kotlin: Ktor (ktor.io/docs/) dan Spring Boot (spring.io). Router DSL, service layer, request/response model, dan perbandingan framework.

Buka →
# Panduan Testing

Tur panduan testing Kotlin: kotlin-test, JUnit 5, MockK, Testcontainers, dan Turbine untuk Flow. Anatomi test Arrange-Act-Assert dan tipe test.

Buka →
# Panduan Keamanan

Tur panduan keamanan Kotlin: OWASP Top 10, hashing password, AES-GCM, validasi input, HTML escape, dan ProGuard/R8 untuk Android.

Buka →
# Panduan Performance

Tur panduan performance Kotlin: JMH microbenchmark, async-profiler, VisualVM, JVM tuning flags, dan optimasi idiomatik Kotlin.

Buka →
# Troubleshooting

Daftar galat umum Kotlin dan cara memperbaikinya: compiler error, runtime exception, build problem, plus demo safe call, safe cast, dan require/check.

Buka →
# Glosarium

Glosarium istilah Kotlin: data class, sealed class, extension function, scope function, nullable, coroutine, suspend, Flow, value class, smart cast, elvis, dan lainnya.

Buka →
# Roadmap Belajar

Roadmap belajar Kotlin dari pemula hingga lanjutan: tiga tahap utama dengan topik, target, dan proyek portofolio plus kebiasaan belajar harian.

Buka →