Bab 1 Pengenalan 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 KotlinTelusuri perjalanan Kotlin dari Project Kotlin 2011 hingga K2 compiler 2023, dan kenali pemangku kepentingan utama ekosistem Kotlin.
Buka → # Karakteristik Bahasa KotlinKenali lima ciri utama Kotlin: ringkas, aman, pragmatis, interoperable, dan tool-friendly, serta dukungan tipe statis dan lintas platform.
Buka → # Kotlin vs JavaBandingkan Kotlin dan Java secara konkrit lewat data class, null-safety, extension function, smart cast, when, dan coroutines.
Buka → # Kotlin vs Bahasa Pemrograman LainBandingkan Kotlin dengan Python, Swift, Scala, Go, dan TypeScript untuk memahami posisi uniknya di antara bahasa modern.
Buka → # Platform dan Target KompilasiPelajari lima target kompilasi Kotlin — JVM, JS, Native, Android, dan WebAssembly — beserta diagram alur kompilasinya.
Buka → # Kotlin/JVMPahami target kompilasi paling matang Kotlin: bagaimana kode Kotlin menjadi bytecode JVM, dibungkus menjadi jar, dan berinteraksi dengan library Java.
Buka → # Kotlin MultiplatformPelajari konsep Kotlin Multiplatform: struktur source set commonMain dan platformMain, mekanisme expect/actual, serta use case utamanya.
Buka → # Use Case KotlinPetakan 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
Pasang kompilator Kotlin di Linux, macOS, dan Windows menggunakan SDKMAN!, Homebrew, atau unduhan langsung, lalu verifikasi dengan kotlinc -version.
Buka → # Instalasi JDKPasang JDK 17 atau 21 LTS, atur variabel JAVA_HOME, dan verifikasi pemasangan dengan java --version dan javac --version.
Buka → # Konfigurasi Kotlin CompilerAtur kotlinc di PATH, tetapkan variabel KOTLIN_HOME, dan uji kompilasi file .kt menjadi berkas .jar yang siap dijalankan.
Buka → # Menggunakan Kotlin PlaygroundJalankan kode Kotlin langsung dari browser melalui playground web resmi, bagi tautan, dan eksperimen tanpa instalasi.
Buka → # Menggunakan kotlincKompilasi file .kt menjadi .jar dengan kotlinc -include-runtime, jalankan dengan java -jar, dan masuki mode REPL interaktif.
Buka → # Menggunakan JShell dan REPLManfaatkan 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 IDEAPasang IntelliJ IDEA Community, aktifkan plugin Kotlin, buat proyek Kotlin baru dengan Gradle, dan jalankan program hello world.
Buka → # Konfigurasi VS CodePasang Visual Studio Code, aktifkan ekstensi Kotlin dan Code Runner, konfigurasi language server, dan jalankan program Kotlin dari editor.
Buka → # Konfigurasi Android StudioPasang Android Studio, verifikasi plugin Kotlin terbundel, atur Android SDK, dan buat proyek Android Kotlin pertama.
Buka → # Struktur Proyek KotlinPahami 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 KotlinBandingkan 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
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 KotlinPelajari struktur file Kotlin: deklarasi package, import, top-level function/class/property, posisi main, koma opsional, dan blok kurung kurawal.
Buka → # main() FunctionPelajari bentuk function main() dan main(args), cara membaca argumen command-line, serta penggunaan kotlin.system.exitProcess untuk mengatur exit code.
Buka → # KomentarPelajari tiga jenis komentar di Kotlin: single-line, multi-line, dan KDoc. Kotlin mengizinkan komentar blok bersarang, berbeda dari Java.
Buka → # Documentation CommentsPelajari sintaks KDoc: /** */, tag @param, @return, @throws, @sample, serta cara Dokka merender dokumentasi API Kotlin.
Buka → # Statement dan ExpressionPelajari perbedaan statement dan expression di Kotlin. if, when, dan try adalah expression yang menghasilkan nilai, berbeda dengan Java.
Buka → # Identifier dan KeywordsPelajari aturan identifier, daftar hard keywords, soft keywords, modifier keywords, serta cara escape keyword dengan backtick.
Buka → # Aturan PenamaanPelajari konvensi penamaan Kotlin: camelCase untuk variabel dan function, PascalCase untuk class, UPPER_SNAKE_CASE untuk konstanta, lowercase untuk package.
Buka → # Package dan ImportPelajari deklarasi package, import simbol tunggal, import wildcard, serta import alias untuk mengatasi benturan nama di Kotlin.
Buka → # Compile-Time vs RuntimeBedah perbedaan keputusan compile-time (tipe, const val, type erasure, overload resolution) vs runtime (nilai, dynamic dispatch, reflection).
Buka → # Membaca Pesan ErrorPelajari 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
Pelajari perbedaan val (immutable) dan var (mutable) di Kotlin, mengapa val lebih disarankan, serta perbedaan antara imutabilitas compile-time dan runtime.
Buka → # Deklarasi dan InisialisasiPelajari pola deklarasi variabel di Kotlin: val dengan tipe eksplisit, lateinit var, lazy init, dan pola deklarasi dulu lalu inisialisasi sesuai kondisi.
Buka → # Type InferencePelajari bagaimana kompilator Kotlin menyimpulkan tipe variabel dari nilai literal, kapan menambah tipe eksplisit, dan batasan type inference.
Buka → # Primitive Types vs Reference TypesPelajari bagaimana Kotlin menyembunyikan primitive types di JVM, kapan kompilator memakai primitive atau boxed reference, serta dampak nullabilitas terhadap representasi tipe.
Buka → # NumbersPelajari 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 TypesPelajari empat tipe integer signed (Byte, Short, Int, Long) beserta rentang dan perilaku overflow, serta pengenalan tipe unsigned UByte, UShort, UInt, ULong.
Buka → # Floating-Point TypesPelajari 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 → # BooleanPelajari tipe Boolean di Kotlin, operator logika (&&, ||, !), short-circuit evaluation, serta tipe nullable Boolean? dan idiom elvis operator.
Buka → # CharPelajari 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 → # StringPelajari tipe String di Kotlin, pengindeksan, length, string template $x dan ${expr}, multiline raw string """...""", serta method umum seperti trimMargin dan trimIndent.
Buka → # Unsigned Integer TypesPelajari 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 NothingPelajari 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 ConversionPelajari konversi tipe eksplisit di Kotlin melalui method toInt, toLong, toDouble, toString; mengapa tidak ada konversi implisit, serta perilaku truncation dan wrap-around.
Buka → # Type AliasesPelajari 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 valPelajari 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 LifetimePelajari scope variabel di Kotlin: block scope, inner shadowing, loop variable scope, scope function run { }, serta lifetime variabel setelah blok berakhir.
Buka → # Naming ConventionsPelajari 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
Pelajari operator aritmetika Kotlin: penjumlahan, pengurangan, perkalian, pembagian, dan modulo, termasuk pembagian bilangan bulat dan perhitungan Char.
Buka → # Comparison OperatorsPelajari operator pembanding Kotlin, perbedaan == (equals) dan === (referensial), serta cara kerja compareTo pada objek.
Buka → # Logical OperatorsPelajari operator logika Kotlin: &&, ||, dan !, perilaku short-circuit, dan penggunaan array Boolean.
Buka → # Assignment OperatorsPelajari operator penugasan Kotlin: = dasar dan augmented +=, -=, *=, /=, %=, termasuk aturan untuk variabel mutable dan collection.
Buka → # Unary OperatorsPelajari operator unary Kotlin: +a, -a, !a, ++a, --a, baik prefix maupun postfix, serta pola counter pada loop.
Buka → # Range OperatorsPelajari operator rentang Kotlin: .., until, downTo, dan step, serta tipe IntRange, CharRange, dan LongRange untuk loop for.
Buka → # in dan !inPelajari operator keanggotaan Kotlin: x in range, x in list, key in map, dan negasinya !in untuk Iterable apa pun.
Buka → # is dan !isPelajari operator pemeriksaan tipe Kotlin: x is String, x !is Int, dan bagaimana keduanya memicu smart cast otomatis.
Buka → # Safe Cast dan Unsafe CastPelajari cast Kotlin: as (unsafe, melempar ClassCastException) dan as? (safe, mengembalikan null saat gagal), serta pola type narrowing yang aman.
Buka → # Operator OverloadingPelajari operator overloading Kotlin: define operator fun plus, minus, times, get, set, contains, rangeTo, compareTo, dan invoke pada class buatan.
Buka → # Precedence dan AssociativityPelajari tabel precedence operator Kotlin, urutan evaluasi dari postfix hingga assignment, dan asosiativitas left vs right yang memengaruhi hasil ekspresi.
Buka → # Expressions vs StatementsPelajari 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
Pelajari cara mencetak output ke stdout dengan println, print, dan System.out, serta bagaimana menggabungkan banyak nilai menggunakan string template dan concatenation.
Buka → # Membaca InputPelajari 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 ArgumentsPelajari 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 TemplatePelajari 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 FormattingPelajari 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 FormattingPelajari 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 AngkaPelajari 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 FundamentalsPelajari 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
Pelajari perbedaan tipe non-nullable (String) dan nullable (String?) di Kotlin, serta bagaimana kompilator mencegah NullPointerException sejak compile-time.
Buka → # Nullable VariablesPelajari 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 OperatorPelajari operator safe call ?. di Kotlin untuk memanggil method pada variabel nullable tanpa risiko NullPointerException, termasuk perantaian (chaining) beberapa safe call.
Buka → # Elvis OperatorPelajari operator Elvis ?: di Kotlin untuk memberi nilai default saat ekspresi nullable menghasilkan null, termasuk penggunaan return dan throw di sisi kanan.
Buka → # Not-Null AssertionPelajari operator not-null assertion !! di Kotlin yang memaksa konversi tipe nullable menjadi non-nullable, serta risiko NullPointerException yang menyertainya.
Buka → # Safe CastPelajari operator safe cast as? di Kotlin yang mengembalikan null alih-alih melempar ClassCastException saat konversi tipe gagal.
Buka → # Smart CastsPelajari smart cast Kotlin yang mengubah tipe statis secara otomatis setelah pengecekan is atau != null, tanpa memerlukan cast eksplisit.
Buka → # Null CheckingPelajari 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 HandlingPelajari 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 TypesPelajari 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 PracticesPelajari 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
Pelajari bentuk if sebagai expression pada Kotlin yang mengembalikan nilai serta bentuk blok dengan baris terakhir sebagai hasil cabang.
Buka → # if-elsePelajari rantai else-if pada Kotlin untuk klasifikasi multi-kondisi, perbedaan bentuk statement dan expression, serta ketiadaan operator ternary ?:.
Buka → # when ExpressionPelajari when expression sebagai pengganti switch, pencocokan banyak nilai, dan bentuk when tanpa argumen untuk rantai kondisi.
Buka → # when dengan RangePelajari pencocokan cabang when menggunakan range operator in, kombinasi beberapa range, dan operator !in untuk negasi keanggotaan.
Buka → # when dengan Type CheckingPelajari pencocokan cabang when berdasarkan tipe data dengan operator is, lengkap dengan smart cast yang mengubah tipe statis di setiap cabang.
Buka → # for LoopPelajari for loop pada Kotlin untuk iterasi range, list, map, string, lengkap dengan indices, withIndex, dan step.
Buka → # while LoopPelajari while loop pada Kotlin yang mengevaluasi kondisi sebelum setiap iterasi, lengkap dengan pola pengurangan saldo dan pencarian elemen.
Buka → # do-while LoopPelajari do-while loop pada Kotlin yang mengeksekusi body minimal satu kali sebelum kondisi diperiksa, dengan contoh validasi input berulang.
Buka → # Ranges dan ProgressionsPelajari range naik, downTo, until, step, serta tipe IntRange, CharRange, LongRange, dan IntProgression sebagai pondasi iterasi numerik Kotlin.
Buka → # break dan continuePelajari keyword break untuk keluar dari loop dan continue untuk melewatkan iterasi, bekerja pada for, while, dan iterasi string.
Buka → # Labeled break dan continuePelajari labeled break dan continue pada Kotlin untuk mengontrol loop bersarang, keluar dari loop luar, atau melompat ke iterasi loop luar.
Buka → # Nested LoopsPelajari loop bersarang pada Kotlin untuk traversal matriks, pola segitiga, dan tabel perkalian, lengkap dengan variable shadowing serta pertimbangan performa.
Buka → # Control Flow AnalysisPelajari bagaimana kompilator Kotlin menganalisis alur kontrol pada cabang if, when, dan assignment untuk mengaktifkan smart cast tanpa cast eksplisit.
Buka →Bab 9 Functions
Pelajari anatomi deklarasi function Kotlin dengan keyword fun, daftar parameter, return type, dan body yang berisi logika program.
Buka → # Parameter dan ArgumentBedakan parameter (di deklarasi function) dan argument (saat pemanggilan) serta cara menyusun banyak parameter bertipe berbeda.
Buka → # Return TypesPelajari 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 FunctionsPelajari bentuk ringkas deklarasi function dengan tanda sama dengan, tanpa kurung kurawal dan tanpa keyword return, lengkap dengan type inference.
Buka → # Default ArgumentsBerikan nilai default pada parameter function sehingga pemanggil boleh menghilangkan argumen tertentu dan menyederhanakan pemanggilan umum.
Buka → # Named ArgumentsSebut argumen dengan nama parameter eksplisit sehingga urutan bebas dan kode pemanggilan lebih jelas, terutama untuk function dengan banyak parameter Boolean.
Buka → # vararg ParametersPelajari cara membuat function yang menerima jumlah argumen variabel dengan keyword vararg, termasuk spread operator untuk meneruskan array.
Buka → # infix FunctionsPanggil function dengan sintaks `a op b` tanpa titik dan kurung sehingga kode terbaca seperti kalimat natural, contohnya `2 kali 3`.
Buka → # operator FunctionsDefinisikan ulang operator seperti +, *, in, dan [] pada tipe buatan sendiri dengan keyword operator agar pemanggilan terasa natural.
Buka → # Local FunctionsDeklarasikan function di dalam function lain untuk menyembunyikan logika penolong dan tetap mengakses variabel dari scope luar (closure).
Buka → # Extension FunctionsTambahkan method baru ke class yang sudah ada (termasuk class pihak ketiga) tanpa memodifikasi kode sumbernya, dengan resolusi statis saat kompilasi.
Buka → # tailrec FunctionsTulis function rekursif dengan keyword tailrec agar kompilator mengoptimalkan menjadi loop iteratif tanpa pertumbuhan stack call.
Buka → # Higher-Order FunctionsFunction yang menerima function lain sebagai parameter atau mengembalikan function sebagai nilai, fondasi gaya pemrograman fungsional di Kotlin.
Buka → # Function TypesTuliskan tipe function secara eksplisit sebagai (A, B) -> C, pelajari suspend function type, dan receiver type seperti Int.(Int) -> Int.
Buka → # Function ReferencesKonversi function yang sudah dideklarasikan menjadi nilai dengan operator ::, termasuk bound dan unbound references untuk top-level dan member function.
Buka → # inline FunctionsTandai higher-order function dengan keyword inline agar kompilator menyalin body ke call site dan mengurangi overhead alokasi lambda.
Buka → # noinline dan crossinlineKontrol perilaku inline function: noinline untuk parameter yang tidak boleh di-inline, crossinline untuk melarang non-local return.
Buka → # Pure Functions dan Side EffectsBedakan pure function yang outputnya hanya bergantung pada input dari function impure yang mengakses state global, IO, atau random.
Buka →Bab 10 Collections
Pahami hierarki collection Kotlin: Iterable, Collection, List, Set, Map, dan pemisahan antara interface read-only dan mutable.
Buka → # ListPelajari cara membuat List read-only, mengakses elemen lewat indeks, dan menggunakan query dasar seperti size, indexOf, contains, first, last.
Buka → # MutableListPelajari cara memodifikasi MutableList: menambah, mengganti, menghapus elemen, serta catatan keamanan thread saat dipakai bersamaan.
Buka → # SetPelajari Set read-only: cara membuat himpunan tanpa duplikat, memeriksa keanggotaan, dan operasi himpunan seperti union, intersect, subtract.
Buka → # MutableSetPelajari MutableSet: menambah dan menghapus elemen, serta perbedaan urutan antara LinkedHashSet (urutan penyisipan) dan HashSet (urutan hash).
Buka → # MapPelajari Map read-only: menyimpan pasangan key-value, mengakses nilai, iterasi keys/values/entries, dan urutan penyisipan LinkedHashMap.
Buka → # MutableMapPelajari MutableMap: put, putIfAbsent, getOrPut, compute, remove, dan alternatif aman untuk konkurensi seperti ConcurrentHashMap.
Buka → # ArrayPelajari Array<T> di Kotlin: cara membuat, mengakses, dan memodifikasi elemen dengan ukuran tetap, serta kapan Array cocok dipakai.
Buka → # Primitive ArraysPelajari array primitif (IntArray, LongArray, DoubleArray, dll.) yang menghindari overhead boxing dan cocok untuk hot path.
Buka → # Array vs ListBandingkan Array dan List di Kotlin: ukuran tetap vs dapat berubah, operasi yang tersedia, dan kapan memilih masing-masing.
Buka → # Collection OperationsPelajari operasi fungsional dasar pada collection: map, filter, forEach, find, any, all, none, dan count dengan gaya deklaratif.
Buka → # Filtering CollectionsPelajari varian filter: filterNot, filterNotNull, filterIndexed, partition, takeWhile, dropWhile, dan filterIsInstance.
Buka → # Transforming CollectionsPelajari transformasi struktural: map, mapIndexed, flatMap, zip, unzip, associate, groupBy, chunked, dan windowed.
Buka → # Grouping CollectionsPelajari aggregasi berbasis kunci: groupBy, groupingBy, eachCount, fold, reduce, dan aggregate untuk merangkum data per grup.
Buka → # Sorting CollectionsPelajari pengurutan collection: sorted, sortedBy, sortedDescending, sortedWith comparator, shuffled, reversed, dan sort in-place.
Buka → # Aggregating CollectionsPelajari agregasi: sum, sumOf, average, maxOrNull, minOrNull, maxByOrNull, reduce, fold, dan pola agregasi multi-nilai.
Buka → # Collection IterationPelajari berbagai cara iterasi collection: for-in, forEach, forEachIndexed, withIndex, destructuring Map, dan iterator protocol kustom.
Buka → # SequencesPelajari Sequence di Kotlin: evaluasi lazy, sequenceOf, asSequence, generateSequence, dan builder sequence dengan yield.
Buka → # Lazy vs Eager OperationsBandingkan evaluasi eager (List) dan lazy (Sequence): kapan Sequence unggul, kapan List lebih cepat, dan cara memilih dengan tepat.
Buka → # Memilih Collection yang TepatPanduan memilih collection Kotlin: List, Set, Map, Array, primitive arrays, dan Sequence berdasarkan kebutuhan akses, keunikan, dan performa.
Buka →Bab 11 String dan Text Processing
Pelajari dasar tipe String di Kotlin: literal, perbedaan dengan Char, akses karakter, panjang, pemeriksaan kosong, dan perbandingan antar string.
Buka → # String ImmutabilityPahami mengapa String di Kotlin bersifat immutable: method seperti uppercase() dan replace() mengembalikan string baru tanpa mengubah nilai asli.
Buka → # String TemplatePelajari string template di Kotlin: interpolasi $var, ekspresi ${expr}, dan penggunaan template di dalam multiline raw string.
Buka → # String MethodsTinjau katalog method String yang sering dipakai: length, toUpperCase, toLowerCase, trim, substring, split, replace, startsWith, endsWith, contains, indexOf.
Buka → # StringBuilderGunakan StringBuilder untuk konkatenasi teks yang banyak: append, insert, delete, toString, kapasitas, serta perbandingan performa dengan operator +.
Buka → # Multiline StringsPelajari 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 MarginKuasai trimIndent dan trimMargin untuk merapikan multiline raw string: hapus indentasi umum, gunakan prefix khusus, dan pertahankan indentasi internal.
Buka → # Regular ExpressionsKuasai Regex di Kotlin: matches, containsMatchIn, find, findAll, replace, capture groups, dan named groups untuk pencocokan pola teks.
Buka → # Splitting dan Joining TextPelajari pemisahan dan penggabungan teks di Kotlin: split dengan literal dan Regex, parameter limit, joinToString dengan prefix/suffix/transform, dan pola umum.
Buka → # Character ProcessingPelajari tipe Char dan method-nya: isDigit, isLetter, isWhitespace, isUpperCase, digitToInt, toLowerCase, code, serta pola pemrosesan karakter umum.
Buka → # Text Processing Best PracticesPraktik 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
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 ObjectPelajari cara mendeklarasikan class, membuat object, dan menyusun anggota class seperti property, method, serta constructor pada Kotlin.
Buka → # PropertiesPelajari 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 ConstructorPelajari primary constructor Kotlin, cara mendeklarasikan property langsung di daftar parameter, dan mengeksekusi inisialisasi melalui property initializer serta init block.
Buka → # Secondary ConstructorsPelajari cara mendeklarasikan secondary constructor dengan keyword constructor, mendelegasikan ke primary constructor, dan menyediakan beberapa jalur pembuatan object.
Buka → # init BlocksPelajari cara kerja init block Kotlin, urutan eksekusi terhadap property initializer, multiple init block, dan penggunaannya untuk validasi constructor.
Buka → # Property AccessorsPelajari 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 FieldsPelajari backing field pada property Kotlin, keyword `field` yang hanya tersedia di custom accessor, serta cara menghindari setter rekursif.
Buka → # Visibility ModifiersPelajari empat visibility modifier Kotlin — public, private, protected, internal — beserta perbedaannya pada anggota class dan deklarasi top-level.
Buka → # EncapsulationPelajari encapsulation Kotlin — menyembunyikan data internal dengan private, menyajikan akses melalui method publik tervalidasi, dan memakai property sebagai alat bantu encapsulation.
Buka → # InheritancePelajari 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 MethodsPelajari 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 MethodsPelajari cara meng-override property dan method pada subclass Kotlin, aturan val menjadi var, serta bagaimana property override ikut polymorphism.
Buka → # Abstract ClassesPelajari cara mendeklarasikan abstract class Kotlin, abstract property dan method, dan kontrak yang memaksa subclass menyediakan implementasi tertentu.
Buka → # InterfacesPelajari cara mendeklarasikan interface Kotlin, method default, property abstrak, dan implementasi multiple interface sekaligus dalam satu class.
Buka → # Interface DelegationMendelegasikan implementasi interface ke object lain dengan keyword `by` agar class dapat menggunakan ulang kode tanpa inheritance.
Buka → # Nested ClassesMendeklarasikan class di dalam class lain tanpa keyword `inner` — class bersarang statis yang tidak mengakses instance outer class.
Buka → # Inner ClassesMendeklarasikan inner class dengan keyword `inner` yang membawa referensi ke instance outer class dan dapat mengakses anggotanya.
Buka → # object DeclarationsMendeklarasikan singleton dengan keyword `object` — instance tunggal yang diinisialisasi secara lazy saat akses pertama.
Buka → # companion ObjectsMendeklarasikan companion object di dalam class untuk menyediakan anggota statis, konstanta, factory method, dan pola desain berbasis class.
Buka → # Anonymous ObjectsMembuat instance object tanpa nama dengan `object : Type { ... }` — implementasi ad-hoc dari interface atau abstract class.
Buka → # data classMendeklarasikan data class Kotlin yang otomatis menghasilkan method equals, hashCode, toString, copy, dan componentN untuk destrukturisasi.
Buka → # enum classMendeklarasikan enum class Kotlin dengan konstanta, property, constructor, method, dan implementasi interface untuk merepresentasikan nilai konstan bertipe aman.
Buka → # sealed classMendeklarasikan sealed class Kotlin — hierarki terbatas yang membuat kompilator mengetahui seluruh subtype dan memaksa when yang exhaustive.
Buka → # sealed interfaceMendeklarasikan sealed interface Kotlin — interface dengan daftar implementor terbatas yang dapat dikombinasikan dengan sealed class untuk hierarki bertingkat.
Buka → # value classMendeklarasikan @JvmInline value class Kotlin — wrapper yang diinline pada saat kompilasi sehingga tidak menambah overhead alokasi memori.
Buka → # DelegationPola delegation di Kotlin — composition over inheritance — baik secara manual maupun via keyword `by` untuk meneruskan pemanggilan method ke object lain.
Buka → # Equality dan IdentityMembedakan operator `==` (structural equals) dan `===` (referential identity) di Kotlin serta cara mengoverride method `equals` dan `hashCode`.
Buka → # copy dan component FunctionsMemakai method copy dan componentN yang dihasilkan otomatis oleh data class untuk membuat salinan dan destrukturisasi instance.
Buka → # OOP Design PrinciplesPanduan 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
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 FunctionsPelajari cara mendeklarasikan function generic dengan type parameter sebelum nama function, serta kapan pemanggil boleh menentukan atau mengandalkan type inference.
Buka → # Generic InterfacesPelajari cara mendeklarasikan interface generic dan mengimplementasikannya dengan tipe konkret untuk membangun kontrak yang reusable dan type-safe.
Buka → # Type ParametersPelajari konvensi penamaan type parameter (T, E, K, V, R) serta cara membatasinya dengan upper bound tunggal maupun recursive bound.
Buka → # Upper BoundsPelajari 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 → # VariancePahami mengapa List<String> bukan subtype List<Any> dan bagaimana Kotlin memperlakukan tipe generic secara invariant secara default untuk menjaga type safety.
Buka → # CovariancePelajari keyword out untuk membuat class generic covariant sehingga Producer<Sub> menjadi subtype Producer<Super> dengan aman.
Buka → # ContravariancePelajari keyword in untuk membuat class generic contravariant sehingga Consumer<Super> menjadi subtype Consumer<Sub> dengan aman.
Buka → # Declaration-Site VariancePelajari cara menentukan variance pada deklarasi class dengan out dan in sehingga pemakai tidak perlu mengulang variance setiap kali memakai class tersebut.
Buka → # Use-Site VariancePelajari cara menentukan variance pada saat pemakaian tipe dengan out dan in projections ketika class tidak dapat dideklarasikan covariant atau contravariant secara keseluruhan.
Buka → # Star ProjectionsPelajari cara memakai star projection List<*> untuk bekerja dengan tipe generic tanpa peduli terhadap type argument, mirip dengan Java List<?>.
Buka → # Type ErasurePahami 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 ParametersPelajari inline fun dengan reified type parameter untuk mengakses tipe generic saat runtime, melakukan pemeriksaan is T, dan filter berbasis tipe.
Buka → # Designing Generic APIsPelajari 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
Pelajari lambda expression di Kotlin — function literal yang disimpan dalam variabel dan dipanggil layaknya function biasa.
Buka → # Lambda SyntaxBedah anatomi lambda Kotlin: parameter, arrow `->`, body multi-statement, dan ekspresi terakhir sebagai nilai kembalian.
Buka → # Trailing LambdasPelajari trailing lambda — idiom Kotlin yang menempatkan lambda di luar tanda kurung saat menjadi parameter terakhir.
Buka → # it ParameterPelajari parameter implisit `it` pada lambda satu parameter — idiom ringkas yang wajib dipakai dengan hati-hati saat lambda bersarang.
Buka → # Anonymous FunctionsPelajari anonymous function — function literal dengan keyword `fun` eksplisit yang memberi kontrol penuh atas tipe kembalian dan perilaku return.
Buka → # Higher-Order FunctionsPelajari higher-order function — function yang menerima atau mengembalikan function lain, dasar pemrograman fungsional di Kotlin.
Buka → # Function TypesPelajari function type di Kotlin — dari `(Int, Int) -> Int` hingga nullable return, suspend function type, dan receiver function type.
Buka → # Receiver Function TypesPelajari receiver function type `A.() -> B` yang membuat `this` di dalam lambda merujuk ke receiver — dasar DSL Kotlin.
Buka → # Extension LambdasPelajari extension lambda — kombinasi extension function dengan lambda yang disimpan dalam variabel bertipe receiver function type.
Buka → # ClosuresPelajari closure — lambda yang menangkap variabel dari lingkup luar, dari read-only hingga mutable dengan implikasi lifecycle.
Buka → # inline FunctionsPelajari inline function — fitur yang menyisipkan body function ke setiap pemanggil, mengurangi alokasi lambda, dan membuka fitur seperti reified.
Buka → # Callable ReferencesPelajari callable reference — sintaks `::namaFungsi`, `String::length`, dan bound reference untuk merujuk function tanpa lambda.
Buka → # Function CompositionPelajari function composition — menggabungkan function kecil menjadi pipeline dengan `compose` dan `andThen`, plus dasar currying.
Buka → # Scope FunctionsPengenal lima scope functions Kotlin — let, run, with, apply, also — beserta perbandingan receiver, return, dan use case masing-masing.
Buka → # letPelajari scope function `let` — receiver `it`, mengembalikan lambda result. Cocok untuk null-safety dan transformasi nilai.
Buka → # runPelajari scope function `run` — receiver `this`, mengembalikan lambda result. Cocok untuk eksekusi block pada receiver dan kombinasi dengan `with`.
Buka → # withPelajari scope function `with` — bukan extension function. Receiver `this`, mengembalikan lambda result. Cocok untuk mengelompokkan panggilan.
Buka → # applyPelajari scope function `apply` — receiver `this`, mengembalikan objek. Cocok untuk konfigurasi objek dan builder pattern.
Buka → # alsoPelajari scope function `also` — receiver `it`, mengembalikan objek. Cocok untuk side effect seperti logging tanpa mengganggu chain.
Buka → # Functional Design PatternsPelajari pola desain fungsional di Kotlin — map/filter/reduce, function composition, immutability, dan perbandingan dengan Haskell.
Buka →Bab 15 DSL (Domain Specific Language)
Pelajari konsep DSL (Domain Specific Language), perbedaan internal vs external DSL, dan bagaimana Kotlin memungkinkan DSL type-safe dengan receiver function types.
Buka → # Type-Safe BuildersBangun builder type-safe dengan receiver lambda, pelajari buildList, buildMap, buildString, dan bagaimana cara merancang builder DSL sendiri.
Buka → # DSL dengan @DslMarkerCegah scope leak di DSL bersarang dengan anotasi @DslMarker — pelajari masalah implicit receiver dan bagaimana Kotlin menyelesaikannya.
Buka → # Internal DSL DesignPraktik terbaik merancang DSL internal: API surface, extension functions, infix notation, operator overloading, dan trade-off antara fleksibilitas dan kekakuan.
Buka →Bab 16 Error Handling
Pahami hierarki Throwable, perbedaan Error dan Exception, serta bagaimana Kotlin memperlakukan semua exception sebagai unchecked.
Buka → # try-catchTangkap exception dengan try-catch, pelajari urutan multiple catch clause dari spesifik ke umum, serta peran blok finally yang opsional.
Buka → # try ExpressionGunakan try sebagai expression yang menghasilkan nilai, padukan dengan elvis operator, dan pahami bahwa finally tidak mengubah nilai balik.
Buka → # finally BlockPastikan pembersihan resource selalu jalan dengan blok finally, dan ganti try-with-resources Java dengan extension function .use {}.
Buka → # throw Expressionthrow adalah expression bertipe Nothing yang dapat dipakai di elvis operator, cabang when, dan function dengan return type apa pun.
Buka → # Custom ExceptionsBuat class exception sendiri yang mewarisi Exception atau RuntimeException, tambahkan field konteks, dan teruskan cause dari exception asli.
Buka → # Exception PropagationTelusuri bagaimana exception merambat naik dari function dalam ke pemanggil luar melalui stack unwinding, dan kapan membungkus dengan cause.
Buka → # Checked vs Unchecked ExceptionsPelajari bagaimana Kotlin menghapus pembedaan checked dan unchecked exception warisan Java, dan kapan anotasi @Throws tetap diperlukan.
Buka → # Result Type PatternsGunakan kotlin.Result untuk merepresentasikan nilai sukses atau kegagalan secara eksplisit dengan map, getOrNull, getOrElse, fold, dan recoverCatching.
Buka → # Error vs ExceptionBedakan Error fatal tingkat JVM dari Exception yang dapat dipulihkan, serta pisahkan programming error dari business error.
Buka → # Error Handling Best PracticesRangkum praktik terbaik: fail fast, jangan menelan exception, log dengan konteks, lempar di layer yang tepat, dan pakai Result untuk expected errors.
Buka →Bab 17 Packages dan Modul
Pelajari cara mendeklarasikan package di Kotlin dengan konvensi reverse-DNS dan kaitannya dengan struktur direktori proyek Gradle.
Buka → # import StatementsPelajari import tunggal, wildcard, alias dengan as, dan resolusi konflik nama di Kotlin.
Buka → # Visibility ModifiersPelajari modifier public, private, protected, dan internal di Kotlin, serta perbedaan antara top-level dan member declaration.
Buka → # File-Level DeclarationsPelajari deklarasi top-level function, property, class, dan constant di file .kt tanpa class pembungkus.
Buka → # Multi-File ProjectsPelajari cara memecah kode Kotlin ke beberapa file .kt dalam satu package dan memanggil deklarasi lintas file.
Buka → # Kotlin ModulesPelajari definisi modul Kotlin, kaitannya dengan Gradle module, output build (jar/klib), dan keterkaitannya dengan visibility internal.
Buka → # Source SetsPelajari konsep Gradle source set, source set bawaan (main/test), source set kustom, dan KMP source set (commonMain/jvmMain).
Buka → # internal VisibilityPelajari kapan dan bagaimana memakai modifier internal untuk membatasi API ke satu modul, termasuk akses dari kode uji.
Buka → # Library DesignPelajari cara merancang library Kotlin: minimalkan API publik, sembunyikan implementasi dengan internal, dan organisasi modul api/main/test.
Buka →Bab 18 Annotations dan Reflection
Pelajari anotasi bawaan Kotlin: @Deprecated, @JvmStatic, @JvmField, @JvmOverloads, @Target, @Retention, dan kegunaannya.
Buka → # Custom AnnotationsPelajari cara mendeklarasikan anotasi custom dengan annotation class, menerapkannya, dan membacanya via reflection.
Buka → # Annotation TargetsPelajari AnnotationTarget dan @Target untuk membatasi tempat anotasi boleh dipasang: class, function, property, getter, setter, parameter, file, dan type.
Buka → # Annotation RetentionPelajari AnnotationRetention SOURCE, BINARY, dan RUNTIME, serta dampaknya pada ketersediaan anotasi saat kompilasi dan runtime.
Buka → # Annotation ParametersPelajari tipe parameter yang diperbolehkan pada anotasi Kotlin: primitif, String, enum, anotasi, KClass, dan array dari tipe tersebut, serta default value.
Buka → # Annotation ProcessingPelajari tiga jalur pemrosesan anotasi di Kotlin: KSP saat kompilasi, KAPT sebagai jembatan Java, dan reflection saat runtime.
Buka → # Kotlin ReflectionPelajari dasar-dasar kotlin.reflect: KClass, KFunction, KProperty, cara mendapatkannya via ::class, dan interop dengan Java reflection.
Buka → # Inspecting ClassesPelajari cara menginspeksi class via KClass: simpleName, members, constructors, isData, isSealed, sealedSubclasses, dan membuat instance via primary constructor.
Buka → # Property ReflectionPelajari KProperty dan KMutableProperty, akses getter/setter via reflection, serta properti isLateinit dan isConst pada property Kotlin.
Buka → # Callable ReferencesPelajari tiga bentuk callable reference: ::funcName top-level, Class::member unbound, dan instance::method bound — sebagai nilai function untuk higher-order.
Buka → # Reflection PerformancePelajari biaya performa reflection 10-100x lipat lebih lambat daripada pemanggilan langsung, cara caching KClass/KFunction, dan kapan memakai generated code.
Buka →Bab 19 Delegated Properties
Pelajari konsep property delegation di Kotlin: keyword `by` menyerahkan logika get/set ke objek delegate lain untuk menyederhanakan kode berulang.
Buka → # lazy DelegationPelajari lazy delegation di Kotlin: inisialisasi property hanya sekali saat akses pertama, dengan pilihan mode thread-safety SYNCHRONIZED, PUBLICATION, dan NONE.
Buka → # observable PropertiesPelajari Delegates.observable untuk mendapat callback setelah nilai property berubah — dasar audit log, reaksi state, dan pencatatan riwayat.
Buka → # vetoable PropertiesPelajari Delegates.vetoable untuk menolak perubahan property berdasarkan kondisi validasi — ideal untuk constraint domain seperti nilai tidak negatif dan email valid.
Buka → # Map-Backed PropertiesPelajari map-backed property di Kotlin — property yang nilainya disimpan dalam Map, cocok untuk data dinamis seperti hasil parsing JSON.
Buka → # Custom Property DelegatesPelajari cara membuat custom property delegate di Kotlin dengan ReadOnlyProperty, ReadWriteProperty, atau operator getValue/setValue extension function.
Buka → # provideDelegatePelajari operator provideDelegate di Kotlin untuk inspeksi metadata property seperti nama dan annotation sebelum delegate sebenarnya dibuat.
Buka → # Delegated Properties Best PracticesPelajari praktik terbaik delegated properties: kapan memakai lazy, observable, vetoable, map-backed, dan custom delegate, serta jebakan yang harus dihindari.
Buka →Bab 20 Coroutines
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 ParallelismBedakan concurrency (menangani banyak hal sekaligus secara logis) dan parallelism (menjalankan banyak hal sekaligus secara fisik), serta bagaimana coroutines mendukung keduanya.
Buka → # Coroutine FundamentalsPahami apa itu coroutine: komputasi yang dapat ditangguhkan, ringan, dan dijadwalkan secara kooperatif. Pelajari runBlocking, launch, dan await.
Buka → # suspend FunctionsPelajari suspend function: deklarasi, aturan pemanggilan dari coroutine, dan transformasi CPS (Continuation Passing Style) di level bytecode.
Buka → # Coroutine BuildersPelajari tiga coroutine builder utama — runBlocking, launch, dan async — beserta kapan memakai masing-masing untuk hasil yang benar dan idiomatik.
Buka → # Coroutine ScopePelajari CoroutineScope: wadah yang mengatur siklus hidup coroutine anak, builder coroutineScope, dan bagaimana scope otomatis membersihkan coroutine saat berakhir.
Buka → # Structured ConcurrencyPahami structured concurrency: hubungan induk-anak antar coroutine, propagasi exception, dan pembatalan berantai yang menjaga kode tetap aman dan terkontrol.
Buka → # Coroutine ContextPelajari CoroutineContext sebagai kumpulan elemen — Job, Dispatcher, CoroutineName, CoroutineExceptionHandler — yang dapat disusun dengan operator +.
Buka → # DispatchersPelajari Dispatchers.Default, IO, Main, dan Unconfined, kapan memakai masing-masing, serta cara mengganti dispatcher dengan withContext.
Buka → # Job dan CancellationPelajari interface Job, metode cancel(), join(), cancelAndJoin(), dan mekanisme pembatalan kooperatif berbasis suspend function dan ensureActive.
Buka → # Exception Handling in CoroutinesPelajari try-catch di dalam coroutine, CoroutineExceptionHandler untuk handler global, dan SupervisorJob untuk mengisolasi kegagalan antar anak.
Buka → # Coroutine TimeoutsPelajari withTimeout yang melempar TimeoutCancellationException, withTimeoutOrNull yang mengembalikan null, dan pola pembatalan otomatis untuk operasi yang tidak boleh menggantung.
Buka → # async dan awaitPelajari penggunaan async untuk komputasi paralel, pola awaitAll untuk koleksi, dan penanganan exception yang dilempar dari async coroutine.
Buka → # Coroutine ChannelsPelajari Channel<T> untuk komunikasi antar-coroutine, hot stream, send dan receive, buffered channel, dan builder produce.
Buka → # Shared FlowsPengenalan SharedFlow: hot multicast stream di mana banyak collector berbagi emisi yang sama, dengan konfigurasi replay buffer dan buffer overflow.
Buka → # StateFlowPelajari MutableStateFlow sebagai state holder: selalu punya nilai, semantik conflation (hanya nilai terbaru yang dikirim), dan perbandingan dengan SharedFlow.
Buka → # SharedFlowPelajari MutableSharedFlow sebagai event bus: tryEmit non-suspend vs emit suspend, konfigurasi replay, extraBufferCapacity, dan onBufferOverflow.
Buka → # Flow FundamentalsPelajari Flow<T> sebagai cold asynchronous stream: builder flow { emit(...) }, semantik lazy (mulai saat di-collect), dan eksekusi per collector.
Buka → # Flow OperatorsPelajari operator Flow: map, filter, transform, take, drop, combine, zip, flatMapConcat, flatMapMerge, flatMapLatest, debounce, dan distinctUntilChanged.
Buka → # Flow Context dan CancellationPelajari flowOn untuk pindah dispatcher, context preservation (collect tetap di pemanggil), dan perilaku Flow saat scope dibatalkan.
Buka → # Cold vs Hot FlowsPelajari perbedaan Flow (cold) dengan SharedFlow dan StateFlow (hot), kapan memakai masing-masing, dan implikasi desain dari pilihan tersebut.
Buka → # Flow TestingPelajari cara menguji Flow tanpa dependensi tambahan: toList() untuk menangkap emit, runBlocking untuk suspend, dan pola assertion pada List yang dihasilkan.
Buka → # Callback to CoroutinePelajari suspendCoroutine dan suspendCancellableCoroutine untuk membungkus API berbasis callback menjadi suspend function, lengkap dengan penanganan pembatalan.
Buka → # Coroutine TestingPelajari cara menguji coroutine dengan runBlocking, withTimeout, dan assertion standar. Verifikasi exception, pembatalan, dan structured concurrency tanpa dependensi tambahan.
Buka → # Coroutine Best PracticesPelajari 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
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 InteroperabilityPelajari extension function Kotlin di java.io.File seperti readText, writeText, readLines, useLines, dan interaksi dengan InputStream, OutputStream, Reader, dan Writer.
Buka → # java.nio InteroperabilityPelajari java.nio.file.Path dan Files: newBufferedWriter, newBufferedReader, readAllLines, readString, writeString, Files.lines, dan StandardOpenOption.
Buka → # Membaca File TeksPelajari cara membaca file teks dengan aman: File.readText, File.readLines, File.useLines, File.forEachLine, dan bufferedReader untuk file besar.
Buka → # Menulis File TeksPelajari cara menulis file teks dengan aman: File.writeText, File.appendText, bufferedWriter, PrintWriter, dan pola atomic write untuk konfigurasi penting.
Buka → # Buffered File OperationsPelajari operasi file berbuffer untuk file besar: BufferedReader, BufferedWriter, forEachLine, useLines, dan strategi memproses file log gigabyte tanpa memuat seluruhnya ke memori.
Buka → # Path dan DirectoryPelajari 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 AttributesPelajari atribut file di Kotlin: BasicFileAttributes, PosixFileAttributes, Files.getAttribute, Files.setAttribute, dan FileTime untuk membaca dan memodifikasi metadata.
Buka → # File PermissionsAtur permission POSIX file dan direktori menggunakan java.nio.file.attribute.PosixFilePermission.
Buka → # Temporary FilesBuat file dan direktori sementara yang aman dengan Files.createTempFile dan createTempDirectory, plus pola cleanup yang andal.
Buka → # Serialization FundamentalsPelajari konsep serialization, perbedaan Serializable dan Externalizable, serta bagaimana mengubah objek menjadi urutan byte.
Buka → # JSON SerializationPelajari cara mem-parsing dan menghasilkan JSON di Kotlin, mulai dari parser manual hingga pengenalan kotlinx.serialization.
Buka → # Robust File ProcessingPadukan pattern use, validasi path, penanganan IOException, atomic write, dan cleanup idempoten untuk pipeline file yang andal.
Buka →Bab 22 Date dan Time
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 InteroperabilityPelajari cara Kotlin mengonsumsi paket java.time secara langsung tanpa wrapper, termasuk idiom extension function yang membuat API Java terasa Kotlin-idiomatic.
Buka → # kotlinx-datetimePelajari library kotlinx-datetime resmi JetBrains untuk Kotlin Multiplatform: Instant, LocalDate, LocalDateTime, perbedaan dengan java.time, dan kapan library ini lebih unggul.
Buka → # LocalDate dan LocalTimePelajari cara membuat dan mengakses LocalDate, LocalTime, dan LocalDateTime untuk merepresentasikan tanggal dan jam tanpa zona waktu, termasuk parsing ISO-8601.
Buka → # Instant dan Time ZonesPelajari Instant sebagai titik waktu absolut di UTC, ZonedDateTime untuk menampilkan instan di zona tertentu, dan konversi antar zona dengan aman.
Buka → # Date-Time FormattingPelajari DateTimeFormatter.ofPattern untuk format tanggal kustom, predefined formatters ISO, dan format locale-aware yang menyesuaikan bahasa dan regional pengguna.
Buka → # Parsing Date-TimePelajari LocalDate.parse untuk mengubah string menjadi objek tanggal, custom pattern via DateTimeFormatter, dan penanganan DateTimeParseException dengan aman.
Buka → # Date-Time ArithmeticPelajari operasi aritmatika tanggal: plusDays, plus(Duration), Period vs Duration, ChronoUnit.DAYS.between, dan strategi menghitung selisih antar tanggal.
Buka → # Date-Time Best PracticesRangkuman 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
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 JavaPelajari bagaimana top-level function Kotlin menjadi static method FileNameKt di Java, peran @JvmStatic untuk companion object, dan @JvmOverloads untuk default argumen.
Buka → # Platform TypesPelajari 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 AnnotationsPelajari 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 PropertiesPelajari translasi dua arah antara getter/setter Java (getXxx/setXxx) dan properti Kotlin (val/var), termasuk konvensi isXxx untuk Boolean.
Buka → # Checked Exceptions InteroperabilityPelajari bagaimana Kotlin mengabaikan deklarasi throws Java untuk checked exception, tetap dapat menangkapnya dengan try-catch, dan menggunakan @Throws untuk kompatibilitas Java.
Buka → # Static InteropPelajari 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 @JvmStaticPelajari perbedaan @JvmField yang menghasilkan field public langsung tanpa getter, dan @JvmStatic yang menghasilkan static method sejati pada companion object dan object singleton.
Buka → # @JvmOverloadsPelajari cara @JvmOverloads menghasilkan beberapa overload Java untuk default argumen Kotlin pada function, constructor, dan method instance, beserta aturan jumlah overload yang dihasilkan.
Buka → # @JvmNamePelajari @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 InteroperabilityPelajari 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 PracticesRingkasan praktik terbaik interoperabilitas Kotlin-Java: anotasi, @JvmStatic, @JvmOverloads, @JvmField, @Throws, dan salinan defensif.
Buka →Bab 24 JVM dan Memory Management
Pahami alur kompilasi Kotlin/JVM: dari source .kt menjadi bytecode .class oleh kotlinc, lalu dieksekusi oleh JVM.
Buka → # Bytecode FundamentalsBedah struktur file .class: constant pool, fields, methods, dan atribut, serta cara memeriksanya dengan javap.
Buka → # Heap dan StackPahami pembagian memori JVM: stack untuk primitif dan referensi, heap untuk objek, serta stack frame per pemanggilan method.
Buka → # Garbage CollectionPelajari algoritma garbage collection JVM: mark-and-sweep, generational heap, dan kolektor modern G1, ZGC, Shenandoah, serta stop-the-world pauses.
Buka → # Memory LeaksKenali pola umum memory leak di JVM: cache statis, listener tidak dihapus, ThreadLocal tidak dibersihkan, dan cara mendeteksinya via heap dump.
Buka → # JVM OptionsPelajari flag JVM yang paling sering dipakai: -Xmx, -Xms, -XX:+UseG1GC, -XX:+HeapDumpOnOutOfMemoryError, serta cara memverifikasinya.
Buka → # Profiling ToolsKenali alat profiling JVM: VisualVM, async-profiler, Java Flight Recorder, dan cara memilih sampler CPU, memory, atau allocation profile.
Buka → # JFR dan JDK Mission ControlPelajari Java Flight Recorder (JFR) dan JDK Mission Control (JMC) untuk continuous profiling dengan overhead sangat rendah.
Buka → # Memory PerformanceOptimasi performa memori: kapan memakai object pooling, menghindari autoboxing dengan IntArray, reuse buffer, dan pilihan Array<Int> vs IntArray.
Buka →Bab 25 Build Tools dan Dependency Management
Pelajari kotlinc CLI: opsi -include-runtime, -cp, -d, mode daemon, serta perbedaan kotlinc-jvm, kotlinc-js, dan kotlinc-native.
Buka → # Gradle FundamentalsPelajari konsep dasar Gradle: lifecycle init-configure-execute, perbedaan Kotlin DSL (build.gradle.kts) vs Groovy DSL (build.gradle).
Buka → # Kotlin Gradle PluginPelajari kotlin-gradle-plugin: cara mendaftarkan plugin kotlin("jvm"), task yang ditambahkan, dan konfigurasi compiler options.
Buka → # Gradle Project StructurePelajari struktur direktori standar Gradle: settings.gradle.kts, build.gradle.kts, src/main/kotlin, src/test/kotlin, serta setup multi-modul.
Buka → # Gradle DependenciesPelajari cara mendeklarasikan dependensi di Gradle: configuration implementation, api, testImplementation, compileOnly, dan format koordinat group:name:version.
Buka → # Gradle TasksPelajari task Gradle: task bawaan plugin Kotlin, custom task dengan tasks.register, doLast vs doFirst, dan parameter via gradleProperty.
Buka → # Gradle Build LifecycleBedah tiga fase build Gradle: Initialization, Configuration, Execution, dengan doLast vs doFirst dan up-to-date checking.
Buka → # Version CatalogsPelajari version catalog Gradle: file libs.versions.toml dengan [versions], [libraries], [bundles], dan cara mereferensikannya di build.gradle.kts.
Buka → # Dependency ResolutionPelajari cara Gradle menyelesaikan dependensi transitif, strategi konflik versi (highest wins, strict, exclude, constraints), dan pemeriksaan tree.
Buka → # Maven FundamentalsPelajari Maven untuk Kotlin: kotlin-maven-plugin, struktur pom.xml, lifecycle phases compile/test/package, serta perintah mvn umum.
Buka → # Maven DependenciesPelajari dependensi Maven: scope compile, test, provided, runtime; repository Maven Central; serta mvn dependency:tree dan dependency:analyze.
Buka → # Build VariantsPelajari build variants Gradle: buildType debug/release, productFlavors, source set per variant, dan applicationIdSuffix untuk multiple build.
Buka → # Reproducible BuildsPelajari reproducible builds: input yang sama menghasilkan output bytecode identik, pengaturan Gradle (isReproducibleFileOrder, SOURCE_DATE_EPOCH), dan verifikasi.
Buka → # Build Tool Best PracticesRangkuman 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
Memahami mengapa kita menulis test, jenis-jenis test (unit, integration, e2e), pola Arrange-Act-Assert, dan test pyramid.
Buka → # kotlin-testMengenal paket kotlin.test: assertEquals, assertTrue, assertFailsWith, dan peran sebagai lapisan assertion multiplatform.
Buka → # JUnit JupiterMengenal JUnit 5 (Jupiter): @Test, @BeforeEach, @AfterEach, @DisplayName, @Disabled, dan method assertion bawaan.
Buka → # AssertionsMenguasai assertion dasar dan lanjutan: assertEquals, assertNotEquals, assertTrue, assertNull, assertNotNull, assertThrows, dan assertAll untuk grup assertion.
Buka → # Parameterized TestsMengulang test yang sama dengan banyak input: @ParameterizedTest, @ValueSource, @CsvSource, dan @MethodSource.
Buka → # Test LifecycleMempelajari urutan @BeforeAll, @BeforeEach, @Test, @AfterEach, @AfterAll, serta perbedaan static vs instance method.
Buka → # Mocking FundamentalsMengenal konsep mock: mengganti dependency dengan double terkontrol, perbedaan Stub vs Mock vs Spy vs Fake, dan kapan harus memakai mock.
Buka → # MockKMenguasai MockK: mockk<Class>(), every { } returns, verify { }, DSL Kotlin idiomatik untuk mocking.
Buka → # Stubs, Mocks, dan FakesTaksonomi test doubles: kapan memakai Stub (return fixed), Fake (implementasi sederhana), atau Mock (verifikasi panggilan).
Buka → # Coroutine TestingMenguji coroutine dengan runTest dari kotlinx-coroutines-test: virtual time, TestDispatcher, dan skip delay otomatis.
Buka → # Flow TestingMenguji Flow dengan Turbine: flow.test { awaitItem(); awaitComplete(); awaitError() } dan alternatif tanpa library.
Buka → # Integration TestingMenguji integrasi beberapa komponen nyata: pola @SpringBootTest, Ktor testApplication, dan pilihan real database vs Testcontainers.
Buka → # Database TestingStrategi menguji repository: H2 in-memory untuk kecepatan, Testcontainers Postgres untuk kepercayaan, dan migration test untuk skema.
Buka → # Test FixturesSetup bersama dengan @BeforeEach, fixture function, dan test data builder untuk menyusun objek uji yang ringkas dan konsisten.
Buka → # Test CoverageMengukur cakupan test dengan JaCoCo: perbedaan line coverage vs branch coverage, kesalahpahaman umum tentang angka 100%, dan apa yang sebaiknya diuji.
Buka → # Property-Based TestingMenguji sifat (property) yang harus selalu benar dengan input acak: kotest property testing, jqwik, dan menemukan edge case otomatis.
Buka → # TestcontainersMenjalankan service nyata di Docker saat test: PostgreSQLContainer, GenericContainer, dan lifecycle container yang otomatis.
Buka → # Testing Best PracticesPrinsip praktik testing: uji perilaku bukan implementasi, satu assertion per test, penamaan jelas, test cepat dan hermetic.
Buka →Bab 27 Debugging dan Code Quality
Pelajari anatomi stack trace: thread, file:line, rantai method, urutan innermost ke outermost, dan pola 'Caused by'.
Buka → # IDE DebuggersPelajari 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 WatchpointsKuasai jenis breakpoint di IntelliJ: line, conditional, method, dan field watchpoint untuk menjeda eksekusi pada kondisi spesifik.
Buka → # Step-Through DebuggingKuasai Step Over, Step Into, Step Out, dan Drop Frame untuk menelusuri eksekusi program secara presisi.
Buka → # Logging FundamentalsPelajari dasar logging: level log TRACE/DEBUG/INFO/WARN/ERROR, format structured, dan agregasi log di lingkungan produksi.
Buka → # SLF4J dan LogbackPelajari pola SLF4J sebagai façade logger dan Logback sebagai implementasi: LoggerFactory.getLogger, logback.xml, appender console dan file.
Buka → # Logging LevelsPelajari kapan memakai TRACE, DEBUG, INFO, WARN, dan ERROR dengan contoh skenario produksi yang konkret.
Buka → # Static AnalysisPelajari mengapa static analysis penting: menangkap bug tanpa menjalankan kode, tools utama (detekt, ktlint, IntelliJ inspections), dan integrasi CI.
Buka → # detektPelajari detekt sebagai static analyzer Kotlin: konfigurasi config/detekt.yml, custom rules, dan integrasi Gradle plugin.
Buka → # ktlintPelajari ktlint sebagai linter dan formatter Kotlin Coding Conventions: ktlintCheck, ktlintFormat, dan integrasi Gradle.
Buka → # Compiler WarningsPelajari compiler warning umum (unused variable, deprecated API, parameter shadowing) dan kapan memakai @Suppress dengan tepat.
Buka → # RefactoringPelajari IDE refactoring di IntelliJ: rename, extract method, extract class, inline, dan kapan melakukan refactoring dengan aman.
Buka → # Code FormattingPelajari konvensi formatting Kotlin: 4 spasi, tanpa semicolon, max 120 karakter, dan otomatisasi via ktlint serta pre-commit hook.
Buka → # Code Review PracticesPelajari praktik code review yang efektif: PR kecil, single concern, self-review, checklist, dan umpan balik yang konstruktif.
Buka →Bab 28 Software Design dan Architecture
Pelajari prinsip clean code: nama bermakna, fungsi kecil, single responsibility, dan komentar yang menjelaskan mengapa bukan apa.
Buka → # SOLID PrinciplesPelajari lima prinsip SOLID: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
Buka → # Separation of ConcernsPelajari pemisahan tanggung jawab antar layer: UI, business logic, dan data, dengan contoh kode konkret.
Buka → # Dependency InversionPelajari Dependency Inversion Principle: bagaimana modul tingkat tinggi bergantung pada abstraction, bukan concretion, sehingga kode menjadi mudah diganti dan diuji.
Buka → # Dependency InjectionPelajari 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 InheritancePelajari mengapa composition lebih fleksibel daripada inheritance mendalam, dan bagaimana menyusun object dari perilaku-perilaku kecil menggunakan interface di Kotlin.
Buka → # ImmutabilityPelajari immutability di Kotlin: pakai val alih-alih var, copy data class alih-alih mutate, dan dapatkan thread-safety secara default.
Buka → # Domain ModelingPelajari domain modeling di Kotlin: value objects, entities, aggregates, dan bounded contexts untuk merepresentasikan aturan bisnis dalam kode.
Buka → # Layered ArchitecturePelajari layered architecture: presentation, application, domain, dan infrastructure, serta bagaimana setiap layer hanya bergantung pada layer di bawahnya.
Buka → # Clean ArchitecturePelajari Clean Architecture: entities, use cases, interface adapters, dan frameworks, dengan aturan dependency yang ketat dari luar ke dalam.
Buka → # Hexagonal ArchitecturePelajari 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 DesignPelajari Domain-Driven Design: strategic design dengan bounded contexts dan ubiquitous language, tactical design dengan entities, value objects, aggregates, repositories, dan domain services.
Buka → # Design PatternsPelajari katalog design patterns GoF: creational, structural, dan behavioral, dengan implementasi idiomatic Kotlin yang memanfaatkan fitur bahasa modern.
Buka → # Factory PatternPelajari Factory Pattern di Kotlin: companion object sebagai factory, generic interface Factory<T>, dan sealed class factory untuk parsing input terstruktur.
Buka → # Builder PatternPelajari Builder Pattern di Kotlin: data class dengan default parameter, named arguments, scope function apply, dan DSL-like nested config.
Buka → # Strategy PatternPelajari Strategy Pattern di Kotlin: interface Strategy klasik dan function type sebagai alternatif idiomatic yang lebih ringkas.
Buka → # Observer PatternPelajari Observer Pattern di Kotlin: Subject + Observer klasik, function-based subscriber, dan implementasi StateFlow-like yang terinspirasi dari ReactiveX.
Buka → # Adapter PatternPelajari Adapter Pattern di Kotlin: class adapter untuk interface tidak kompatibel, extension function sebagai adapter idiomatic, dan adapter untuk koleksi dan JSON.
Buka → # Decorator PatternPelajari Decorator Pattern di Kotlin: tambah behavior tanpa modifikasi original, dengan `by` delegation yang mengeliminasi boilerplate Java tradisional.
Buka → # Repository PatternPelajari Repository Pattern di Kotlin: abstract data access dengan generic interface Repository<T, ID>, decorator cache, specification pattern, dan adapter API.
Buka → # Memilih Arsitektur AplikasiPelajari 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
Pelajari cara mengukur kinerja algoritma dengan kompleksitas waktu dan memori, serta trade-off klasik antara waktu dan ruang.
Buka → # Big-O NotationPelajari Big-O Notation dari O(1) hingga O(2^n), beserta best/worst/average case untuk setiap algoritma.
Buka → # Array dan Linked ListPelajari 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 QueuePelajari Stack (LIFO) dan Queue (FIFO) di Kotlin: implementasi dengan ArrayDeque, cek bracket seimbang, dan simulasi antrian.
Buka → # Hash TablePelajari Hash Table: hash function, collision resolution dengan chaining dan open addressing, load factor, dan perbandingan dengan HashMap Kotlin.
Buka → # Tree dan Binary Search TreePelajari struktur tree: terminologi root/leaf/height, Binary Search Tree dengan insert/search O(log n), dan tiga jenis traversal.
Buka → # Heap dan Priority QueuePelajari Min-Heap dan Max-Heap, implementasi sift-up/sift-down, java.util.PriorityQueue, dan use case top-K.
Buka → # GraphPelajari struktur data graph: adjacency list vs matrix, directed/undirected, weighted, dan implementasi class Graph di Kotlin.
Buka → # Searching AlgorithmsPelajari linear search O(n) dan binary search O(log n) pada sorted array, lengkap dengan function binarySearch bawaan Kotlin stdlib.
Buka → # Sorting AlgorithmsPelajari algoritma pengurutan bubble, selection, insertion O(n²) dan merge, quick, heap O(n log n), serta function sorted() bawaan Kotlin.
Buka → # Recursion dan BacktrackingPelajari recursion dengan base case dan recursive case, risiko stack overflow, serta backtracking untuk N-Queens, permutasi, dan subset sum.
Buka → # Greedy AlgorithmsPelajari pola greedy yang memilih local optimum menuju global optimum: coin change, activity selection, fractional knapsack, dan kapan greedy gagal.
Buka → # Dynamic ProgrammingPelajari memoization (top-down) dan tabulation (bottom-up) dengan contoh Fibonacci, 0/1 knapsack, LCS, dan minimum coin change.
Buka → # Graph AlgorithmsPelajari BFS, DFS, Dijkstra shortest path, dan topological sort Kahn's algorithm dengan implementasi Kotlin di graph adjacency list berbobot.
Buka → # Implementasi Algoritma dengan KotlinPelajari cara menulis algoritma secara idiomatic Kotlin: extension function, sealed class untuk state, sequence untuk lazy evaluation, dan tail recursion.
Buka →Bab 30 Security
Pelajari empat prinsip dasar pengkodean aman: least privilege, defense in depth, fail secure, dan jangan percaya input.
Buka → # Input ValidationPelajari validasi input di boundary sistem dengan pendekatan whitelist, parsing tipe-aman, serta pencegahan SQL injection dan command injection.
Buka → # Output EncodingPelajari encoding output untuk HTML, URL, dan JSON untuk mencegah serangan cross-site scripting (XSS) saat data dikirim ke lapisan presentasi.
Buka → # Secrets ManagementPelajari pengelolaan rahasia aplikasi dengan environment variable, Vault, dan KMS, serta mengapa hardcoding secret di source code adalah praktik berbahaya.
Buka → # Cryptography FundamentalsPelajari dasar-dasar kriptografi: algoritma simetris (AES) vs asimetris (RSA), fungsi hash (SHA-256), HMAC, serta key derivation dengan PBKDF2.
Buka → # Secure RandomnessPelajari perbedaan SecureRandom dengan kotlin.random.Random, generasi UUID yang aman, serta cara membangkitkan token dengan kualitas kriptografis.
Buka → # Password HashingPelajari 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 SignaturesPelajari SHA-256 message digest untuk verifikasi integritas, serta tanda tangan digital RSA dan ECDSA untuk memverifikasi keaslian data.
Buka → # TLS dan Certificate ValidationPelajari handshake TLS, validasi rantai sertifikat X.509, certificate pinning, serta jebakan umum yang sering membahayakan implementasi TLS di aplikasi.
Buka → # Deserialization SecurityPelajari mengapa Java Serializable berbahaya saat dipakai pada sumber tidak terpercaya, serta cara memilih format dan parser yang aman dengan validasi eksplisit.
Buka → # Path TraversalPelajari serangan path traversal dengan payload seperti ../etc/passwd, serta tiga lapis mitigasi: normalize+startsWith, whitelist nama file, dan validasi karakter.
Buka → # Dependency Vulnerability ManagementPelajari manajemen kerentanan dependency dengan basis data CVE, OWASP Dependency-Check, Snyk, dan bot Renovate untuk menjaga rantai suplai tetap aman.
Buka → # Secure Kotlin ApplicationsRangkuman praktik keamanan Kotlin: defense in depth checklist, null safety, immutability, dan sealed class untuk state machine yang aman.
Buka →Bab 31 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 StructurePelajari 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 SetsPelajari peran commonMain sebagai tempat kode bersama, hubungannya dengan source set spesifik platform, dan mekanisme expect/actual yang menjembatani keduanya.
Buka → # expect dan actualPelajari mekanisme expect/actual: deklarasi kontrak di commonMain dan implementasi per platform, untuk fungsi, property, dan class.
Buka → # Platform-Specific CodePelajari kapan harus menulis kode platform-specific—file I/O, network, threading, logging—dan cara memilih antara expect/actual versus dependency injection.
Buka → # Multiplatform DependenciesPelajari cara mendeklarasikan dependency KMP di build.gradle.kts—commonMain untuk library multiplatform, platform source sets untuk library spesifik.
Buka → # Multiplatform TestingPelajari commonTest source set: tulis test sekali dengan kotlin.test, jalankan di setiap target platform—JVM, Android, iOS—dengan hasil yang konsisten.
Buka → # Kotlin Multiplatform LibraryPelajari cara membangun library KMP untuk Maven Central: struktur source set, deklarasi target, plugin maven-publish, dan metadata POM.
Buka → # Multiplatform NetworkingPelajari ktor-client untuk KMP: kode HTTP bersama di commonMain dengan engine spesifik per platform—OkHttp untuk JVM/Android, Darwin untuk iOS.
Buka → # Multiplatform PersistencePelajari SQLDelight dan Room KMP: definisi SQL bersama di commonMain, driver spesifik platform—AndroidSqliteDriver untuk Android, NativeSqliteDriver untuk iOS.
Buka → # Multiplatform UI OverviewPelajari tiga opsi UI untuk KMP: native (SwiftUI + Compose), shared ViewModel dengan UI native, dan Compose Multiplatform yang berbagi UI lintas platform.
Buka → # Compose MultiplatformPelajari Compose Multiplatform: satu UI codebase Compose untuk Android, iOS, Desktop, dan Web dengan struktur source set KMP.
Buka → # Multiplatform DeploymentPelajari 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
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 SDKMengenal Android Studio sebagai IDE resmi, SDK Manager, AVD emulator, build variants, serta alat baris perintah seperti ADB dan logcat.
Buka → # Android Project StructureMembedah struktur proyek Android: modul Gradle, file build.gradle.kts, AndroidManifest.xml, serta source set main, test, dan androidTest.
Buka → # Activity LifecycleMembahas state Activity Android: created, started, resumed, paused, stopped, destroyed; serta override callback onCreate, onResume, onPause, dan skenario rotasi layar.
Buka → # Intents dan NavigationMengenal 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 ComponentsMengenal layout XML Android: LinearLayout, ConstraintLayout; common views seperti TextView, Button, RecyclerView; serta prinsip Material Design.
Buka → # Jetpack Compose FundamentalsMengenal UI deklaratif Jetpack Compose: @Composable function, Column, Row, Box, Text, Button, dan anotasi @Preview.
Buka → # Composable FunctionsMembedah anotasi @Composable, sifat fungsi murni dari state, konsep recomposition, serta aturan stabilitas parameter.
Buka → # State dan RecompositionMembahas state hoisting, State`<T>` dan MutableState`<T>`, remember, serta rememberSaveable untuk mempertahankan state lintas perubahan konfigurasi.
Buka → # Compose LayoutsMengenal Column, Row, Box, LazyColumn, LazyRow, LazyVerticalGrid; serta rantai Modifier untuk padding, spacing, dan ukuran.
Buka → # Compose NavigationNavigation Component untuk Jetpack Compose: NavHost, route, argumen type-safe, dan bottom navigation bar.
Buka → # ViewModelMengenal ViewModel sebagai penampung state UI yang bertahan lintas perubahan konfigurasi, viewModelScope untuk coroutine, dan ekspos StateFlow ke Compose.
Buka → # Lifecycle-Aware ComponentsMengenal LifecycleObserver, @OnLifecycleEvent, LifecycleService, dan komponen yang sadar terhadap siklus hidup Activity.
Buka → # StateFlow untuk UIMembeding StateFlow vs LiveData, pola single source of truth di ViewModel, dan collectAsState() di Compose.
Buka → # Coroutines di AndroidMenggunakan viewModelScope.launch dan lifecycleScope.launch, integrasi Retrofit + coroutines, serta perbedaan Dispatchers.Main vs Dispatchers.IO.
Buka → # Repository Pattern AndroidMengenal Repository sebagai abstraksi sumber data (network, db) dengan single source of truth, serta lapisan Use Case untuk logika bisnis.
Buka → # Room DatabaseMengenal Room sebagai ORM Android: @Database, @Entity, @Dao, verifikasi SQL saat kompilasi, dan migrasi skema antar versi.
Buka → # DataStoreMengenal DataStore sebagai pengganti SharedPreferences: Preferences DataStore async dan Proto DataStore type-safe.
Buka → # Networking dan RetrofitSetup Retrofit, anotasi @GET/@POST, converter Moshi/Gson, dan OkHttp interceptor untuk autentikasi serta logging.
Buka → # Serialization dan JSONMengenal kotlinx.serialization dengan @Serializable, @SerialName, custom serializer, dan perbandingan dengan Moshi untuk network DTO.
Buka → # Dependency Injection dengan HiltMengenal Hilt sebagai wrapper Dagger untuk Android: @HiltAndroidApp, @Inject, @Module, @InstallIn, dan @Provides.
Buka → # Permissions dan Runtime PermissionsMengenal runtime permission Android 6+: requestPermission API, rememberLauncherForActivityResult di Compose, dan UI rationale.
Buka → # Background Work dengan WorkManagerMengenal WorkManager untuk tugas latar belakang yang dijamin selesai: OneTimeWorkRequest, PeriodicWorkRequest, constraints, dan backoff policy.
Buka → # NotificationsMengenal notification channels Android 8+, NotificationManager, PendingIntent, action button, dan foreground service notification.
Buka → # Android SecurityPraktik keamanan aplikasi Android: penyimpanan terenkripsi, network security config, ProGuard/R8, dan mitigasi risiko umum.
Buka → # Android Unit TestingStrategi pengujian unit di Android: test lokal (JVM), instrumented test (di device/emulator), mock dengan MockK, dan pola MVVM testable.
Buka → # Compose UI TestingPengujian UI Jetpack Compose: createComposeRule, findNode, performClick, dan screenshot testing.
Buka → # Performance dan ProfilingProfiling aplikasi Android: CPU Profiler, Memory Profiler, Layout Inspector, dan Macrobenchmark untuk pengukuran kinerja.
Buka → # Release dan PublishingBuild APK/AAB, sign dengan keystore, publikasi ke Google Play Console, dan staged rollout.
Buka →Bab 33 Backend Development
Kenali alasan Kotlin dipakai untuk backend: sintaks ringkas, null-safety, coroutines, dan ekosistem yang menopang layanan produksi.
Buka → # Memilih Backend FrameworkBandingkan Ktor dan Spring Boot berdasarkan ukuran tim, kebutuhan ekosistem, latensi target, dan kurva belajar untuk memilih framework backend Kotlin.
Buka → # Ktor FundamentalsPahami tiga konsep inti Ktor: Application class, pipeline phases, dan plugin — fondasi yang menopang seluruh permintaan HTTP di framework Ktor.
Buka → # Ktor Project StructureBedah struktur proyek Ktor: file build.gradle.kts, application.conf HOCON, layout source code, dan konvensi modul yang dipakai kode produksi.
Buka → # Ktor RoutingPelajari DSL routing Ktor: route statis, route parameter dinamis {id}, nested route, dan mekanisme pencocokan path yang dipakai framework Ktor.
Buka → # Ktor Request dan ResponsePelajari ApplicationCall di Ktor: membaca body request via call.receive, menghasilkan respons via call.respondText, mengatur status code dan header HTTP.
Buka → # Ktor Content NegotiationPasang plugin ContentNegotiation Ktor untuk mengonversi objek Kotlin ke JSON dan sebaliknya secara otomatis lewat serializer yang terdaftar.
Buka → # Ktor SerializationPelajari kotlinx.serialization: anotasi @Serializable, serializer yang dihasilkan kompilator, dan round-trip objek Kotlin ke JSON dengan aman.
Buka → # Ktor ValidationValidasi body request di Ktor: validator kustom per entitas, pengumpulan error multi-field, dan respons error mengikuti RFC 7807 Problem Details.
Buka → # Ktor Error HandlingPasang plugin StatusPages Ktor untuk memetakan exception ke respons HTTP, mendaftar handler per tipe exception, dan menyediakan fallback untuk kesalahan tak terduga.
Buka → # Ktor AuthenticationPasang plugin Authentication Ktor dengan Basic auth, JWT, dan Session — pahami kontrak Principal, AuthProvider, dan urutan provider dalam pipeline.
Buka → # Ktor AuthorizationTerapkan 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 IntegrationIntegrasikan Ktor dengan database via JDBC: HikariCP untuk connection pool, pola repository untuk akses data, dan SQLite in-memory untuk demonstrasi.
Buka → # Ktor TestingUji aplikasi Ktor dengan testApplication: hidupkan engine in-memory, jalankan request, dan periksa respons dengan assertion yang jelas.
Buka → # Spring Boot dengan KotlinMulai dengan Spring Boot dan Kotlin: anotasi @SpringBootApplication, container IoC, dan konstruktor injection untuk membangun aplikasi modular.
Buka → # Spring Dependency InjectionPahami Dependency Injection Spring: anotasi @Component, @Service, @Repository, @Autowired, dan container IoC yang mengelola lifecycle bean.
Buka → # Spring MVC dan REST APIBangun REST API dengan Spring MVC: anotasi @RestController, @GetMapping, @PostMapping, @PathVariable, dan @RequestBody untuk routing dan binding.
Buka → # Spring Data JPAPakai Spring Data JPA: JpaRepository<T, ID>, derived query methods seperti findByNama, dan @Query untuk query kustom yang terstruktur.
Buka → # Spring SecurityPahami Spring Security: filter chain, JWT auth filter, SecurityContext berbasis ThreadLocal, dan anotasi @PreAuthorize untuk otorisasi method-level.
Buka → # Database TransactionsPahami transaksi database: prinsip ACID, @Transactional Spring, isolation level, dan commit/rollback yang diuji lewat SQLite in-memory.
Buka → # API Pagination dan FilteringTerapkan pagination page/pageSize dan cursor-based pada REST API, lengkap dengan filter dinamis berdasarkan kategori dan range harga.
Buka → # API VersioningStrategi versioning REST API: URL versioning /v1/, header versioning X-API-Version, content negotiation via Accept header, dan header Deprecation.
Buka → # API DocumentationHasilkan dokumentasi API OpenAPI/Swagger secara otomatis dengan springdoc-openapi: tag, operation, parameter, response, dan tautan Swagger UI.
Buka → # Background JobsJadwalkan tugas latar belakang dengan @Scheduled Spring, Quartz scheduler, JobStore, dan cron expression untuk eksekusi teratur.
Buka → # Backend Production ReadinessSiapkan aplikasi backend untuk produksi: health check via HealthIndicator, metrics Micrometer, graceful shutdown, dan structured logging.
Buka →Bab 34 Database Programming
Pelajari konsep inti relational database: table, primary key, foreign key, normalisasi 1NF-3NF, dan indeks untuk akses data yang konsisten.
Buka → # JDBC FundamentalsPelajari JDBC API di Kotlin: DriverManager, Connection, Statement, dan ResultSet sebagai fondasi akses database langsung tanpa ORM.
Buka → # Connecting to DatabasePelajari format JDBC URL, perbedaan SQLite (embedded) vs PostgreSQL (client-server), dan lifecycle koneksi yang aman.
Buka → # Executing SQL QueriesPelajari tiga method eksekusi SQL JDBC — execute(), executeQuery(), executeUpdate() — dan kapan memakai masing-masing untuk operasi baca atau tulis.
Buka → # Prepared StatementsPelajari PreparedStatement, parameter binding dengan placeholder ?, dan cara mencegah SQL injection yang menjadi celah paling umum di aplikasi database.
Buka → # Result SetsPelajari iterasi ResultSet dengan next(), akses kolom via getString/getInt, serta jenis cursor forward-only dan scrollable untuk navigasi fleksibel.
Buka → # Transaction ManagementPelajari transaction management JDBC: setAutoCommit(false), commit, rollback, savepoint, ACID properties, dan isolation levels untuk integritas data.
Buka → # Connection PoolingPelajari connection pooling dengan HikariCP: konfigurasi max pool size, idle timeout, dan mengapa pooling penting untuk aplikasi server.
Buka → # ORM FundamentalsPelajari Object-Relational Mapping: memetakan class Kotlin ke tabel SQL, keuntungan dan kerugian ORM, serta kapan memakainya.
Buka → # Exposed FrameworkPelajari Exposed DSL dari JetBrains: definisi Table, insert, select, dan blok transaction untuk akses database type-safe di Kotlin.
Buka → # JPA dan HibernatePelajari JPA sebagai standar persistence Java, implementasi Hibernate, anotasi @Entity/@Id/@OneToMany, serta lifecycle session.
Buka → # Entities dan RelationshipsPelajari 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 MigrationsPelajari database migrations dengan Flyway dan Liquibase: skrip SQL versi yang diterapkan berurutan untuk evolusi skema yang terkontrol.
Buka → # Database SeedingPelajari database seeding untuk mengisi data awal secara idempoten: INSERT OR IGNORE, ON CONFLICT, dan kapan seeding dipakai.
Buka → # Database TestingPelajari strategi testing database: SQLite in-memory atau H2 untuk kecepatan, Testcontainers untuk realisme, serta pola fixture per test.
Buka → # Database SecurityPelajari keamanan database: koneksi terenkripsi TLS, prinsip least privilege pada user DB, dan audit log untuk akuntabilitas operasi.
Buka →Bab 35 Serialization dan Data Formats
Pelajari konsep dasar serialisasi: mengubah object menjadi bytes dan sebaliknya, tiga use case utama (persistence, network, cache), dan strategi skema evolusi.
Buka → # kotlinx.serializationPelajari kotlinx.serialization: anotasi @Serializable, compiler plugin yang menghasilkan serializer otomatis, dan penggunaan Json.encodeToString / decodeFromString.
Buka → # JSON SerializationPelajari JSON serialization dengan kotlinx.serialization: anotasi @SerialName, @Transient, @Optional, konfigurasi Json (prettyPrint, ignoreUnknownKeys), dan nested object.
Buka → # Custom SerializersPelajari cara menulis KSerializer`<T>` kustom untuk tipe kompleks seperti LocalDate, BigDecimal, dan Color yang belum didukung bawaan kotlinx.serialization.
Buka → # Polymorphic SerializationPelajari polymorphic serialization: sealed class dengan beberapa subclass, discriminator field, dan anotasi @JsonClassDiscriminator untuk kontrol nama discriminator.
Buka → # JSON Schema ValidationPelajari validasi JSON terhadap schema: cek tipe field, required, range, format (email/date), enum, dan deteksi field tidak dikenali sebelum diproses aplikasi.
Buka → # CSV ProcessingPelajari parsing dan penulisan CSV di Kotlin: compliance RFC 4180, type-safe mapping ke data class, dan streaming reader untuk file besar.
Buka → # XML ProcessingPelajari 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 FormatsPelajari format binary ProtoBuf: encoding field tag + wire type, varint compression, schema evolution (backward dan forward compatibility), dan perbandingan ukuran dengan JSON.
Buka → # Serialization SecurityPelajari 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 36 Scripting dan Automation
Mengenal Kotlin Scripting: file .kts, eksekusi dengan kotlinc -script, JSR-223, dan use case seperti build script, REPL, serta DSL.
Buka → # Kotlin Script FilesMembedah anatomi file .kts: top-level statements, akses args, function lokal, shebang untuk pemanggilan langsung dari terminal.
Buka → # Command-Line UtilitiesMembangun CLI tool dengan Kotlin: struktur sub-command, manual argument parsing, exit code, dan contoh utility lengkap dengan bantuan.
Buka → # Command-Line Argument ParsingParsing argumen command-line manual: positional vs flags, format --key=value, opsi singkat -n, validasi, dan pola help text yang baik.
Buka → # File System AutomationOtomasi sistem file dengan Kotlin: rename massal, copy selektif, organize by date, dan walk directory tree dengan java.nio.file.
Buka → # Batch ProcessingMemproses banyak file secara batch dengan coroutines, paralelisme via Dispatchers.Default, Semaphore untuk concurrency limit, dan progress reporting.
Buka → # Scheduled JobsMenjadwalkan tugas berkala dengan java.util.Timer, ScheduledExecutorService, ekspresi cron-like, dan Quartz Scheduler untuk produksi.
Buka → # Packaging CLI ApplicationsMengemas CLI Kotlin untuk distribusi: Fat JAR dengan -include-runtime, GraalVM native-image, Kotlin/Native, dan checklist publikasi.
Buka →Bab 37 Performance dan Optimization
Mengenal profiling aplikasi Kotlin: tools utama (VisualVM, async-profiler, JFR), CPU sampler, memory profiler, dan teknik step-counting untuk demo deterministik.
Buka → # Benchmarking FundamentalsFundamental microbenchmark: tiga jebakan utama (JIT warmup, dead code elimination, GC pauses), aturan emas, dan demo step-counting yang deterministik.
Buka → # JMHJava Microbenchmark Harness: anotasi @Benchmark, @State, @Warmup, @Measurement, plugin Gradle JMH, dan simulasi runner yang menangani jebakan microbenchmark otomatis.
Buka → # Allocation ProfilingMenemukan alokasi objek berlebih dengan profiler, escape analysis JIT, dan perbandingan strategi implementasi: String concat vs StringBuilder, Array`<Int>` vs IntArray.
Buka → # Collection PerformancePerformansi koleksi Kotlin: ArrayList vs LinkedList, HashMap vs TreeMap, pre-size dengan initialCapacity, dan tabel ringkasan Big-O.
Buka → # Sequence PerformanceSequence vs List untuk chained operations: Sequence menang untuk koleksi besar dengan banyak operasi, List menang untuk koleksi kecil atau single pass.
Buka → # Coroutine PerformancePerformansi coroutine: lebih ringan daripada thread, pilihan dispatcher (Default, IO, Main), context switch overhead, dan aturan optimasi concurrency.
Buka → # Memory UsageMengukur overhead memori: object header, primitif vs boxed, IntArray vs Array<Int>, dan string deduplication.
Buka → # Avoiding Unnecessary AllocationsPola mengurangi alokasi objek: StringBuilder, object reuse, value class, pooling, dan sequence untuk pipeline lazy.
Buka → # inline Functions PerformanceMekanisme inline function, eliminasi alokasi lambda, reified type, crossinline/noinline, serta trade-off bytecode size.
Buka → # Performance Regression TestingMendeteksi regression performance via benchmark CI, output JSON, baseline comparison, dan threshold warning/fail.
Buka →Bab 38 Deployment dan Production
Tipe artefak JAR (thin, fat, executable, Spring Boot), manifest Main-Class, dan perintah packaging populer (kotlinc, Shadow, bootJar).
Buka → # Executable JARsAtribut Main-Class di manifest, execution flow java -jar, dan mekanisme loader Spring Boot untuk nested JAR.
Buka → # Native Binaries dengan Kotlin/NativeKompilasi Kotlin ke binary native via LLVM, target platform (linuxX64, macosArm64, iosArm64), komparasi dengan GraalVM native-image.
Buka → # Runtime ConfigurationStrategi konfigurasi runtime: defaults, file config (HOCON/YAML/TOML), system properties, environment variables, CLI args, dengan urutan override yang jelas.
Buka → # Environment VariablesMembaca env vars via System.getenv(), normalisasi SNAKE_CASE ke dot notation, validasi wajib, dan praktik 12-factor app untuk secrets.
Buka → # Logging dan ObservabilityStructured logging JSON, trace ID untuk korelasi antar service, dan tiga pilar observability (logs, metrics, traces) via OpenTelemetry.
Buka → # Health ChecksEndpoint /health/live dan /health/ready, HealthIndicator, liveness vs readiness Kubernetes probe, dan agregasi worst-status.
Buka → # Metrics dan MonitoringEmpat tipe metric (counter, gauge, timer, histogram), Micrometer registry, format Prometheus, dan dashboard Grafana.
Buka → # Docker FundamentalsKonsep Docker (image, layer, container, registry), anatomi Dockerfile, multi-stage build, layer caching, dan base image JVM populer.
Buka → # Containerizing Kotlin ApplicationsContainerization spesifik Kotlin: Dockerfile multi-stage, JVM args untuk container, jlink untuk runtime minimal, dan distroless image.
Buka → # CI/CD FundamentalsTahapan pipeline (build, test, lint, package, deploy), fail-fast, build matrix, dan artifact retention — pondasi praktik CI/CD untuk Kotlin.
Buka → # GitHub ActionsWorkflow GitHub Actions untuk Kotlin: trigger, matrix build, cache Gradle, step build/test/package, dan upload artifact.
Buka → # Graceful ShutdownMenangani SIGTERM, menyelesaikan request in-flight, menutup resource (DB pool, koneksi), dan kontrak Kubernetes terminationGracePeriodSeconds.
Buka → # Production TroubleshootingMendiagnosis masalah produksi: thread dump, heap snapshot, deteksi deadlock, pesan kesalahan umum, dan strategi incident response.
Buka → # Release ManagementSemantic versioning, release candidate, changelog (Keep a Changelog), strategi rollback blue-green/canary, dan checklist rilis.
Buka →Bab 39 Modern Kotlin
Ringkasan fitur bahasa Kotlin terbaru (1.9 - 2.2): data object, when guard, K2 compiler, context parameters, dan builder inference.
Buka → # Context ParametersContext parameters (Kotlin 2.2+): pengganti context receiver untuk menyuntik dependensi implisit dengan deklarasi eksplisit dan rename parameter.
Buka → # data objectdata object — singleton dengan toString/equals/hashCode otomatis. Cocok untuk deklarasi konstanta terstruktur dan sealed child tanpa state.
Buka → # Guard ConditionsGuard conditions pada when — menggabungkan is Type dengan kondisi boolean tambahan di satu branch. Tersedia stabil di Kotlin 2.1+.
Buka → # when Expressions Lanjutanwhen tingkat lanjut: exhaustive sealed class, binding variabel subject, destructuring, range, dan multiple values.
Buka → # Definitely Non-Nullable TypesT & Any — sintaks untuk memaksa tipe parameter generik T menjadi non-nullable di scope tertentu. Stabil sejak Kotlin 1.8.
Buka → # Builder InferenceBuilder inference — kompilator menyimpulkan tipe parameter generik dari isi lambda body. buildList, buildMap, dan builder kustom jadi lebih ringkas.
Buka → # Kotlin K2 CompilerK2 compiler (Kotlin 2.0+) — arsitektur frontend baru yang lebih cepat dan akurat dalam inferensi tipe. Default sejak Kotlin 2.0.
Buka → # Kotlin Language EvolutionKotlin Evolution and Review Process (KEEP) — bagaimana fitur bahasa baru diusulkan, didiskusikan, dan distabilkan oleh Language Design Group.
Buka → # Compatibility dan MigrationKompatibilitas biner/sumber/behavior, deprecation cycle (warning -> error -> removal), language version, api version, dan strategi migrasi.
Buka →Bab 40 Proyek
Bangun aplikasi CLI untuk pencatatan tugas sederhana dengan parsing argumen, validasi, penyimpanan JSON, dan packaging.
Lihat proyek → # Proyek: Sistem Manajemen PerpustakaanBangun sistem perpustakaan dengan pemodelan domain, pengelolaan buku/anggota, transaksi peminjaman, dan persistensi.
Lihat proyek → # Proyek: Aplikasi Keuangan PribadiBangun aplikasi pencatat keuangan dengan transaksi, kategori, anggaran, laporan, dan penyimpanan data.
Lihat proyek → # Proyek: REST API Manajemen TugasBangun REST API untuk manajemen tugas dengan Ktor: desain endpoint, implementasi, database, validasi, authentication.
Lihat proyek → # Proyek: Aplikasi InventarisBangun aplikasi inventaris dengan model barang/stok, transaksi masuk/keluar, pencarian database, dan laporan.
Lihat proyek → # Proyek: Aplikasi Android Pencatat KeuanganBangun aplikasi Android Jetpack Compose pencatat keuangan dengan database lokal dan pengujian UI.
Lihat proyek → # Proyek: Aplikasi Web KtorBangun aplikasi web lengkap dengan Ktor: REST API, database, authentication, testing, dan deployment.
Lihat proyek → # Proyek: Aplikasi MultiplatformBangun aplikasi Kotlin Multiplatform dengan shared domain logic, multiplatform data layer, dan platform-specific integration.
Lihat proyek → # Proyek: Aplikasi Pemrosesan Data AsinkronBangun aplikasi pipeline data dengan coroutines, concurrency, error handling, retry, dan pengujian performa.
Lihat proyek →Bab 41 Sumber Belajar
Tur dokumentasi resmi Kotlin di kotlinlang.org/docs/home.html: Get Started, Tour of Kotlin, Idioms, dan cara navigasi yang efektif.
Buka → # Kotlin Language SpecificationMengenal Kotlin Language Specification di kotlinlang.org/spec/: aturan formal smart cast, overload resolution, nullability, dan operator overloading.
Buka → # Kotlin API ReferenceTur Kotlin API reference (standard library) di kotlinlang.org/api/latest/jvm/stdlib/: collections, strings, scope functions, dan cara navigasi paket.
Buka → # Panduan CoroutinesTur panduan resmi Coroutines di kotlinlang.org/docs/coroutines-overview.html: suspend function, async/await, Flow, dispatcher, dan structured concurrency.
Buka → # Panduan Kotlin MultiplatformTur panduan Kotlin Multiplatform di kotlinlang.org/docs/multiplatform.html: source set common/jvm/ios, kontrak expect/actual, dan kapan memakai KMP.
Buka → # Panduan AndroidTur panduan Android Kotlin di developer.android.com/kotlin: activity lifecycle, ViewModel, observable state, intent, dan stack Jetpack modern.
Buka → # Panduan BackendTur panduan backend Kotlin: Ktor (ktor.io/docs/) dan Spring Boot (spring.io). Router DSL, service layer, request/response model, dan perbandingan framework.
Buka → # Panduan TestingTur panduan testing Kotlin: kotlin-test, JUnit 5, MockK, Testcontainers, dan Turbine untuk Flow. Anatomi test Arrange-Act-Assert dan tipe test.
Buka → # Panduan KeamananTur panduan keamanan Kotlin: OWASP Top 10, hashing password, AES-GCM, validasi input, HTML escape, dan ProGuard/R8 untuk Android.
Buka → # Panduan PerformanceTur panduan performance Kotlin: JMH microbenchmark, async-profiler, VisualVM, JVM tuning flags, dan optimasi idiomatik Kotlin.
Buka → # TroubleshootingDaftar galat umum Kotlin dan cara memperbaikinya: compiler error, runtime exception, build problem, plus demo safe call, safe cast, dan require/check.
Buka → # GlosariumGlosarium istilah Kotlin: data class, sealed class, extension function, scope function, nullable, coroutine, suspend, Flow, value class, smart cast, elvis, dan lainnya.
Buka → # Roadmap BelajarRoadmap belajar Kotlin dari pemula hingga lanjutan: tiga tahap utama dengan topik, target, dan proyek portofolio plus kebiasaan belajar harian.
Buka →