Menu
CoddyTech

Cheat Sheet Kotlin

Terakhir diperbarui

Hello World & dasar

Program Kotlin dimulai di fungsi main tingkat atas, tanpa perlu class.

SintaksArti
fun main() { println("Hello") }Titik masuk program
println("text")Mencetak satu baris ke standard output
print("text")Mencetak tanpa baris baru di akhir
// commentKomentar satu baris
/* comment */Komentar beberapa baris
val input = readLine()Membaca satu baris dari stdin (nullable String?)
val line = readln()Membaca satu baris dari stdin (non-null, Kotlin 1.6+)

Variabel (val / var) & tipe

Utamakan val; pakai var hanya saat nilainya harus berubah.

SintaksArti
val name = "Ada"Variabel read-only, tipenya disimpulkan sebagai String
var count = 0Variabel yang bisa diubah
val age: Int = 30Anotasi tipe eksplisit
Int, Long, Double, FloatTipe angka (42, 42L, 3.14, 3.14f)
Boolean, Char, Stringtrue/false, 'a', "text"
val big = 1_000_000Garis bawah agar literal mudah dibaca
"3".toInt(), "2.5".toDouble()Mengubah string menjadi angka
42.toString()Angka ke string
const val MAX = 10Konstanta saat compile (di tingkat atas atau di dalam object)

String & template

String template menggantikan penggabungan string hampir di mana saja.

SintaksArti
"Hi, $name"Menyisipkan variabel ke dalam string
"Total: ${price * qty}"Menyisipkan ekspresi
s.lengthJumlah karakter
s.uppercase(), s.lowercase()Mengubah huruf besar/kecil
s.trim()Menghapus spasi di awal dan akhir
s.contains("x"), s.startsWith("a")Mencari di dalam string
s.substring(0, 3)Memotong berdasarkan rentang indeks
s.split(",")Memecah menjadi List<String>
s[0]Karakter di sebuah indeks
"""raw text"""String mentah beberapa baris, tanpa escape
"%.2f".format(3.14159)Output dengan format (3.14)

Null safety

Sebuah tipe bersifat non-null secara default; tambahkan ? untuk mengizinkan null, dan compiler memaksamu menanganinya.

SintaksArti
var s: String? = nullTipe nullable
s?.lengthSafe call: mengembalikan null jika s bernilai null
s?.length ?: 0Operator Elvis: nilai cadangan saat null
s!!.lengthNot-null assertion: melempar error jika s bernilai null
if (s != null) s.lengthSmart cast ke non-null di dalam pemeriksaan
s?.let { println(it) }Menjalankan blok hanya jika tidak null
val n = s?.toIntOrNull()Mengubah ke angka, atau null jika input tidak valid
lateinit var x: StringVar non-null yang diinisialisasi belakangan

Operator

OperatorArti
+ - * / %Aritmetika (/ pada Int adalah pembagian bilangan bulat)
+= -= *= /= %=Penugasan gabungan
++ --Increment / decrement
== !=Kesamaan struktural (memanggil equals)
=== !==Kesamaan referensial (object yang sama)
< > <= >=Perbandingan
&& || !Logika and / or / not
a in 1..10Keanggotaan dalam range atau collection
x as Int, x as? IntCast / safe cast (null jika gagal)
x is StringPemeriksaan tipe (smart cast jika berhasil)

Alur kontrol (if / when)

if dan when adalah ekspresi: keduanya mengembalikan nilai.

SintaksArti
if (a > b) x else yif sebagai ekspresi (Kotlin tidak punya ternary ?:)
if (c) { ... } else if (d) { ... } else { ... }Cabang berantai
when (x) { 1 -> "one"; 2 -> "two"; else -> "other" }Mencocokkan sebuah nilai
when (x) { 1, 2 -> "low" }Beberapa nilai dalam satu cabang
when (x) { in 1..9 -> "digit" }Mencocokkan range
when (x) { is String -> x.length }Mencocokkan tipe (dengan smart cast)
when { x < 0 -> "neg"; x == 0 -> "zero"; else -> "pos" }when tanpa subjek, seperti if/else if
val label = when (x) { ... }when sebagai ekspresi (butuh else)

Perulangan & range

SintaksArti
for (i in 1..5)Range inklusif 1 sampai 5
for (i in 1 until 5)1 sampai 4 (ujung akhir tidak termasuk)
for (i in 0..<5)Sama, dengan sintaks range terbuka (Kotlin 1.9+)
for (i in 10 downTo 1 step 2)Menghitung mundur dengan langkah tertentu
for (item in list)Iterasi collection
for ((i, item) in list.withIndex())Indeks dan elemen sekaligus
for (ch in "abc")Iterasi karakter sebuah string
while (cond) { ... }Mengulang selama bernilai true
do { ... } while (cond)Dijalankan minimal sekali
break, continueKeluar dari perulangan / lompat ke iterasi berikutnya
repeat(3) { println(it) }Menjalankan blok sebanyak n kali

Fungsi

SintaksArti
fun add(a: Int, b: Int): Int { return a + b }Mendeklarasikan fungsi
fun add(a: Int, b: Int) = a + bFungsi satu ekspresi, tipe kembaliannya disimpulkan
fun greet(name: String = "world")Nilai parameter default
greet(name = "Ada")Argumen bernama
fun log(vararg items: String)Jumlah argumen yang bervariasi
fun say(): UnitTanpa nilai kembalian (Unit boleh tidak ditulis)
val square = { x: Int -> x * x }Lambda yang disimpan di variabel
fun String.shout() = uppercase() + "!"Extension function
fun apply(f: (Int) -> Int) = f(2)Fungsi sebagai parameter
list.map { it * 2 }Trailing lambda, it adalah parameter tunggalnya

List

listOf bersifat read-only; mutableListOf bisa diubah.

SintaksArti
val nums = listOf(1, 2, 3)List read-only
val items = mutableListOf("a")List yang bisa diubah
nums[0], nums.first(), nums.last()Mengakses elemen
nums.getOrNull(9)Akses aman, null jika di luar rentang
items.add("b"), items.remove("a")Menambah / menghapus
items[0] = "z"Mengganti lewat indeks
nums.size, nums.isEmpty()Ukuran dan kekosongan
x in nums, nums.contains(x)Keanggotaan
nums.indexOf(2)Posisi sebuah elemen, -1 jika tidak ada
nums.subList(0, 2)Potongan (ujung akhir tidak termasuk)
nums.take(2), nums.drop(1)n elemen pertama / semua kecuali n elemen pertama
nums.sorted(), nums.reversed()List baru yang diurutkan / dibalik
nums.sum(), nums.average(), nums.maxOrNull()Agregat
nums.joinToString(", ")Menggabungkan menjadi satu string
Pair(1, "a"), 1 to "a", Triple(1, 2, 3)Tuple kecil berukuran tetap

Map & set

SintaksArti
val m = mapOf("a" to 1, "b" to 2)Map read-only
val mm = mutableMapOf<String, Int>()Map yang bisa diubah
m["a"]Pencarian (null jika tidak ada)
m.getOrDefault("z", 0)Pencarian dengan nilai cadangan
mm["c"] = 3Menyisipkan atau memperbarui
for ((k, v) in m)Iterasi entry dengan destructuring
m.keys, m.valuesCollection berisi key / value
"a" in mKeanggotaan key
val s = setOf(1, 2, 2)Set berisi nilai unik ({1, 2})
mutableSetOf<Int>()Set yang bisa diubah

Operasi collection (lambda)

SintaksArti
list.map { it * 2 }Mengubah setiap elemen
list.filter { it > 2 }Menyisakan elemen yang cocok
list.forEach { println(it) }Melakukan sesuatu pada setiap elemen
list.any { it > 2 }, list.all { it > 0 }Apakah ada / semua elemen cocok
list.count { it % 2 == 0 }Menghitung yang cocok
list.find { it > 2 }Kecocokan pertama atau null
list.sortedBy { it.length }Mengurutkan berdasarkan key
list.groupBy { it.first() }Mengelompokkan menjadi Map
list.distinct()Menghapus duplikat
list.fold(0) { acc, x -> acc + x }Reduce dengan nilai awal
list.zip(other)Memasangkan dua list
list.flatMap { it.toList() }Map lalu diratakan (flatten)

Class & data class

SintaksArti
class User(val name: String, var age: Int)Class dengan primary constructor dan property
val u = User("Ada", 36)Membuat instance (tanpa new)
u.name, u.age = 37Membaca / menulis property
data class Point(val x: Int, val y: Int)equals, hashCode, toString, copy langsung tersedia
p.copy(y = 5)Menyalin dengan sebagian property diubah
val (x, y) = pDeklarasi destructuring
open class Base, class Sub : Base()Inheritance (class bersifat final secara default)
override fun toString() = "..."Override anggota
object Config { val debug = true }Singleton
companion object { fun create() = User("", 0) }Anggota mirip static
enum class Color { RED, GREEN }Enum
sealed class ResultHierarki class terbatas, lengkap di dalam when
interface Shape { fun area(): Double }Interface

Penanganan error

SintaksArti
try { ... } catch (e: Exception) { ... }Menangkap exception
try { ... } finally { ... }Selalu menjalankan pembersihan
val n = try { s.toInt() } catch (e: NumberFormatException) { 0 }try sebagai ekspresi
throw IllegalArgumentException("bad")Melempar exception
require(x > 0) { "x must be positive" }Pemeriksaan argumen (melempar IllegalArgumentException)
check(ready) { "not ready" }Pemeriksaan state (melempar IllegalStateException)
s.toIntOrNull()Mengembalikan null alih-alih melempar exception
runCatching { risky() }.getOrDefault(0)Membungkus pemanggilan dalam Result

Scope function

Lima fungsi bantu kecil untuk bekerja dengan sebuah object di dalam blok.

SintaksArti
x.let { it + 1 }it adalah object-nya, mengembalikan hasil blok
x.run { this + 1 }this adalah object-nya, mengembalikan hasil blok
x.apply { field = 1 }this adalah object-nya, mengembalikan object itu
x.also { println(it) }it adalah object-nya, mengembalikan object itu
with(x) { field }Bukan extension; this adalah x, mengembalikan hasil blok
x?.let { ... }Cara idiomatis untuk memeriksa null lalu memakainya

Semua sintaks Kotlin yang sering kamu pakai, dalam satu halaman. Cheat sheet Kotlin ini adalah referensi cepat untuk bahasa di balik Android dan sebagian besar JVM modern: mendeklarasikan variabel, menangani null dengan aman, membuat percabangan dengan when, perulangan atas range, menulis fungsi, serta bekerja dengan list dan map.

Semua yang ada di sini adalah Kotlin standar dan berjalan di JVM, Android, maupun Kotlin Multiplatform. Salin yang kamu butuhkan, atau coba langsung di playground Kotlin: tempel potongan kode, tekan Jalankan, dan lihat output-nya di browsermu.

FAQ cheat sheet Kotlin

Apakah cheat sheet Kotlin ini gratis?
Ya. Cheat sheet Kotlin ini sepenuhnya gratis, tanpa perlu daftar. Simpan di bookmark dan kembali kapan pun kamu perlu mencari cabang when, operator null safety, atau method collection.
Apa perbedaan val dan var di Kotlin?
val mendeklarasikan reference read-only: nilainya diisi sekali dan tidak bisa diisi ulang. var mendeklarasikan variabel yang bisa diisi ulang. Perlu diingat, val hanya mengunci reference-nya: val list = mutableListOf(1) tetap bisa ditambah elemennya. Gaya Kotlin adalah memakai val di mana saja dan beralih ke var hanya saat pengisian ulang benar-benar dibutuhkan.
Bagaimana cara kerja null safety di Kotlin?
Tipe bersifat non-null secara default, jadi String tidak pernah bisa berisi null; String? bisa. Compiler tidak akan membiarkanmu memanggil method pada nilai nullable tanpa menangani kasus null: dengan safe call (s?.length), cadangan Elvis (s?.length ?: 0), pemeriksaan null yang melakukan smart cast (if (s != null)), atau sebagai pilihan terakhir, not-null assertion s!!, yang melempar NullPointerException jika nilainya ternyata null.
Kapan sebaiknya saya memakai when alih-alih if di Kotlin?
Pakai when setiap kali kamu membandingkan satu nilai dengan beberapa kemungkinan, entah konstanta, range, tipe, atau campurannya, dan pakai if/else untuk satu kondisi ya-atau-tidak. Keduanya adalah ekspresi, jadi val label = when (x) { ... } dan val label = if (c) a else b sama-sama idiomatis. when yang dipakai sebagai ekspresi harus mencakup semua kemungkinan, yang biasanya berarti menambahkan cabang else (sealed class dan enum bisa lengkap tanpa cabang itu).
Bisakah saya berlatih Kotlin secara online?
Bisa. Buka playground Kotlin untuk menjalankan potongan kode apa pun dari cheat sheet ini di browsermu, tanpa perlu menginstal JDK atau IntelliJ. Kalau kamu ingin belajar terarah, kursus Kotlin interaktif gratis dari Coddy membawamu dari Hello World melewati null safety, when, perulangan, fungsi, dan collection, lalu memberimu sertifikat gratis di akhir.
Ilustrasi bahasa pemrograman di Coddy

Belajar Kotlin bersama Coddy

Mulai