Kotlin untuk Android: dasar sintaksis dan kemampuan

Penulis: IT Sectr Diterbitkan: 2026-02-10 Waktu membaca: 8 mnt

Kotlin — bahasa pemrograman bertipe statis dari JetBrains, berjalan di JVM dan secara resmi didukung oleh Google untuk pengembangan Android sejak 2017. Kotlin sepenuhnya kompatibel dengan Java, memiliki sintaksis ringkas dan null-safety bawaan. Kotlin Documentation — panduan lengkap bahasa dan pustaka standar.

Poin Utama

  • Kotlin — bahasa JVM bertipe statis dari JetBrains dengan sintaksis ringkas dan null-safety
  • Null safety — compiler membedakan tipe nullable (String?) dan non-null (String), menghilangkan NullPointerException
  • Data classes — pembuatan otomatis equals, hashCode, toString, copy dan componentN
  • Extension functions — penambahan metode ke kelas yang ada tanpa pewarisan melalui panggilan statis
  • Coroutines — pemrograman asinkron dengan gaya sekuensial melalui fungsi suspend tanpa memblokir thread

Apa itu Kotlin?

Kotlin — bahasa pemrograman bertipe statis yang dibuat oleh JetBrains (pengembang IntelliJ IDEA) dan dirilis pada tahun 2016 di bawah lisensi Apache 2.0. Kotlin dikompilasi ke bytecode JVM, JavaScript, dan kode native (melalui Kotlin/Native). Bidang aplikasi utama — pengembangan Android, aplikasi server, dan proyek lintas platform.

Google mendeklarasikan Kotlin sebagai bahasa resmi pengembangan Android di Google I/O 2017. Menurut data Google (Android Developer Blog, 2026), lebih dari 85% proyek baru di Google Play menggunakan Kotlin. Bahasa ini juga aktif digunakan dalam pengembangan server (Spring Boot, Ktor) dan proyek multiplatform (Kotlin Multiplatform Mobile).

Kotlin sepenuhnya kompatibel dengan Java — kode Java dapat dipanggil dari Kotlin dan sebaliknya dalam satu proyek. Alat build (Gradle, Maven) mendukung kedua bahasa, memungkinkan migrasi bertahap dari Java ke Kotlin tanpa downtime pengembangan.

Mengapa Kotlin lebih populer daripada Java untuk Android

Alasan utama: keringkasan — Kotlin membutuhkan rata-rata 40% lebih sedikit baris kode daripada Java untuk tugas yang sama. Null-safety — compiler melarang penggunaan tipe nullable tanpa pemeriksaan. Kemampuan fungsional — fungsi tingkat tinggi, lambda, extension functions, dan coroutine membuat kode lebih ekspresif dan aman.

Dasar-dasar Sintaksis

Sintaksis dasar Kotlin menggabungkan keringkasan dengan kejelasan. Variabel dideklarasikan melalui val (immutable) dan var (mutable). Compiler menggunakan type inference, tetapi penentuan tipe secara eksplisit juga didukung. Fungsi dideklarasikan dengan kata kunci fun.

kotlin
package com.example.intro

// Konstanta dan variabel
val appName: String = "KotlinApp"  // tidak dapat diubah
var version = 1.0  // dapat diubah, tipe disimpulkan

// Fungsi dengan expression body
fun sum(a: Int, b: Int) = a + b

// String templates
fun greet(name: String) = "Halo, $name! Versi ${appName}_$version"

// Default and named arguments
fun createUser(
    name: String,
    age: Int = 18,
    email: String? = null
)

When-expression menggantikan switch di Java dan lebih fleksibel: mendukung pemeriksaan tipe, rentang, kondisi, dan cabang tanpa break. Compiler memeriksa cakupan menyeluruh untuk enum dan sealed class. Smart casts secara otomatis mengonversi tipe setelah pemeriksaan is, menghilangkan cast eksplisit.

kotlin
fun analyzeValue(value: Any) = when (value) {
    is String -> "String dengan panjang ${value.length}"  // smart cast
    is Int -> "Bilangan bulat: $value"
    in 1..10 -> "Angka dalam rentang 1-10"
    else -> "Tipe tidak dikenal"
}

Null-safety dan Operator Elvis

Null-safety — fitur utama Kotlin yang menghilangkan NullPointerException di level kompilasi. Di Kotlin, tipe secara default tidak boleh null. Untuk mengizinkan null, tambahkan ? ke tipe: String?. Compiler memerlukan pemeriksaan eksplisit setiap nilai nullable.

kotlin
// Tipe nullable dan non-null
val nonNull: String = "Selalu non-null"
val nullable: String? = null  // diizinkan

// Safe call — hanya dijalankan jika tidak null
val length: Int? = nullable?.length

// Elvis operator — nilai default
val text: String = nullable ?: "Default text"

// Let — eksekusi blok dengan nilai non-null
nullable?.let { value ->
    println("Nilai: $value")
}

Operator Safe call (?.) mengembalikan null jika objek sebelum operator adalah null, dan memanggil metode/properti sebaliknya. Operator Elvis (?:) menyediakan nilai default jika bagian kiri adalah null. Not-null assertion (!!) melempar NullPointerException jika nilainya null — gunakan hanya jika 100% yakin nilai tersebut ada.

Tipe platform (platform types) — tipe Java dari kode Java yang dipanggil yang tidak dapat ditandai oleh Kotlin sebagai nullable atau non-null. Tipe ditampilkan sebagai String! (dengan tanda seru). Pengembang sendiri bertanggung jawab atas null-safety saat bekerja dengan kode Java.

Data class dan Destrukturisasi

Data class di Kotlin secara otomatis menghasilkan equals(), hashCode(), toString(), copy() dan componentN(). Ini menghilangkan boilerplate model Java (POJO) dan membuat kode lebih bersih. Deklarasi data class membutuhkan satu baris, bukan 20-30 baris di Java.

kotlin
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val age: Int? = null
)

// Penggunaan
val user = User(1, "Anna", "anna@example.com")
val updatedUser = user.copy(age = 25)

// Destrukturisasi
val (id, name) = user
println("Pengguna #$id: $name")

Destrukturisasi memungkinkan penguraian data class menjadi variabel dalam satu baris. Ini nyaman saat bekerja dengan pasangan, tripel, dan nilai komposit lainnya. Destrukturisasi didukung untuk data class, koleksi standar (List, Map), dan kelas apa pun dengan operator fun componentN().

Extension Functions

Extension functions — mekanisme Kotlin untuk menambahkan metode baru ke kelas yang ada tanpa pewarisan. Ekstensi dikompilasi menjadi metode statis dengan parameter receiver, sehingga pewarisan tidak diperlukan dan virtualitas tidak didukung.

kotlin
// Extension function untuk String
fun String.isEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

// Extension property
val String.isPhoneNumber: Boolean
    get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))

// Generic extension untuk koleksi
fun List<Int>.sumOfEvens(): Int {
    return this.filter { it % 2 == 0 }.sum()
}

// Penggunaan
println("test@mail.com".isEmail())  // true

Ekstensi banyak digunakan di Android SDK dan pustaka. Misalnya, Activity extensions di Android KTX adalah extension functions untuk Activity, Fragment, View, dan kelas lainnya. Ekstensi dapat dideklarasikan sebagai fungsi top-level di file atau sebagai anggota kelas (member extensions).

Coroutine untuk Pemrograman Asinkron

Coroutines — mekanisme pemrograman asinkron di Kotlin yang memungkinkan penulisan kode tidak memblokir dalam gaya sekuensial. Coroutine menangguhkan eksekusi pada fungsi suspend tanpa memblokir thread dan melanjutkan pekerjaan setelah operasi selesai. Ini adalah alternatif untuk rantai callback RxJava dan AsyncTask.

kotlin
import kotlinx.coroutines.*

// Fungsi Suspend — dapat ditangguhkan
suspend fun fetchUserData(userId: Int): User {
    // delay — fungsi suspend, tidak memblokir thread
    delay(500)
    return User(userId, "User $userId", "user@example.com")
}

// Menjalankan di coroutine
fun loadData() {
    CoroutineScope(Dispatchers.Main).launch {
        val user = fetchUserData(1)  // penangguhan di sini
        updateUI(user)  // lanjutan di thread utama
    }
}

Dispatchers menentukan kumpulan thread untuk coroutine: Dispatchers.Main (thread UI), Dispatchers.IO (operasi jaringan/disk), Dispatchers.Default (tugas intensif CPU). Structured concurrency menjamin bahwa coroutine tidak akan tetap aktif setelah scope berakhir — ini mencegah kebocoran memori.

kotlin
// Menjalankan paralel melalui async/await
suspend fun loadDashboard(): Dashboard = coroutineScope {
    val user = async { fetchUserData(1) }
    val orders = async { fetchOrders(1) }
    val stats = async { fetchStats() }
    
    Dashboard(user.await(), orders.await(), stats.await())
}

Kotlin vs Java: Perbandingan

Pilihan antara Kotlin dan Java untuk proyek Android baru — keputusan arsitektur fundamental. Kotlin menawarkan sintaksis yang lebih modern dan mekanisme keamanan bawaan, Java — kumpulan pengembang yang lebih luas dan pustaka yang matang.

KarakteristikKotlinJava
Null-safetyBawaan (nullable/non-null)Tidak ada (anotasi @Nullable)
Volume kode−40% dibanding JavaBoilerplate (getters/setters)
Data classdata class (satu baris)POJO dengan Lombok atau manual
AsinkronitasCoroutines (suspend/await)CompletableFuture, RxJava
Extension functionsBawaanHanya melalui kelas utility
Smart castsSetelah pemeriksaan isCast eksplisit (Type) obj
Kompatibilitas mundur100% dengan Java

Kinerja Kotlin dan Java sebanding — keduanya dikompilasi ke bytecode JVM. Kotlin terkadang menambahkan overhead mikro pada coroutine dan inlining, tetapi ini tidak signifikan untuk aplikasi seluler. Google dan JetBrains secara aktif berinvestasi di Kotlin: Kotlin Multiplatform, Kotlin/Wasm, dan peningkatan kinerja compiler K2.

Pertanyaan yang Sering Diajukan

Apa perbedaan Kotlin dengan Java?

Kotlin lebih pendek dari Java 40% — lebih sedikit boilerplate. Kotlin menambahkan null-safety, data class, extension functions, coroutine, smart casts, when-expression. Kompatibilitas penuh dengan Java: kedua bahasa berjalan di JVM dan dapat digunakan dalam satu proyek tanpa konflik.

Bagaimana cara kerja null-safety di Kotlin?

Tipe secara default non-null. Untuk nullable gunakan ?: String?. Compiler melarang akses langsung ke nilai nullable. Safe call (?.) mengembalikan null saat receiver null. Operator Elvis (?:) menetapkan nilai default. !! — ekstraksi paksa dengan kemungkinan pengecualian.

Apa itu coroutine di Kotlin?

Coroutine — thread ringan yang memungkinkan penulisan kode asinkron secara sekuensial. Fungsi suspend berhenti tanpa memblokir thread. launch dan async menjalankan coroutine di CoroutineScope. Dispatchers.IO untuk permintaan jaringan, Dispatchers.Main untuk pembaruan UI.

Apa itu data class di Kotlin?

data class secara otomatis menghasilkan equals(), hashCode(), toString(), copy() dan componentN(). Contoh: data class User(val name: String, val age: Int). Destrukturisasi melalui val (name, age) = user. Analog dengan record di Java 14+, tetapi dengan metode copy() tambahan.

Bagaimana cara kerja extension functions?

Extension functions menambahkan metode ke kelas yang ada: fun String.isEmail(): Boolean. Compiler menggantinya dengan panggilan statis dengan parameter receiver. Pewarisan tidak diperlukan. Ekstensi banyak digunakan di Android KTX: view.showToast(), activity.viewModels().

Kesimpulan

  • Kotlin — bahasa JVM bertipe statis dari JetBrains, bahasa resmi Android sejak 2017
  • Null safety — tipe nullable/non-null, safe call (?.), elvis (??), blok let untuk bekerja aman dengan nullable
  • Data classes — pembuatan otomatis equals, hashCode, toString, copy dan destrukturisasi
  • Extension functions — penambahan metode ke kelas apa pun tanpa pewarisan, dikompilasi ke panggilan statis
  • Coroutines — kode asinkron dalam gaya sekuensial dengan fungsi suspend, launch/async dan Dispatchers
  • Perbandingan dengan Java — −40% kode, null-safety, smart casts, when-expression dan 100% kompatibilitas dengan Java
  • Kotlin Multiplatform — Kotlin tidak hanya digunakan untuk Android, tetapi juga untuk iOS (KMM) dan server (Ktor, Spring)

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga