0Pricing
Kotlin Academy · Pelajaran

Blok init dan Urutan Inisialisasi

Gunakan blok init dan pahami urutan inisialisasi properti serta blok.

Blok init dan Urutan Inisialisasi adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa Itu Blok Inisialisasi?

Blok init { } berisi kode yang dijalankan ketika sebuah instans dibuat. Blok ini merupakan bagian dari logika konstruktor utama.

Blok Inisialisasi Sederhana

Blok inisialisasi dijalankan selama pembuatan instans, setelah penginisialisasi properti, sesuai urutan dalam kode sumber.

class Logger(val name: String) {
    init {
        println("Constructed Logger("$name")")
    }
}
fun main() {
    val l = Logger("auth")
}

Validasi dalam Inisialisasi

Gunakan require / check di dalam blok inisialisasi untuk menegakkan invarian saat pembuatan instans.

class Percentage(val value: Int) {
    init {
        require(value in 0..100) { "value must be 0..100, was $value" }
    }
}
fun main() {
    println(Percentage(75).value)
    // Percentage(150) // throws IllegalArgumentException
}

Beberapa Blok Inisialisasi

Anda dapat memiliki beberapa blok inisialisasi; blok-blok tersebut dijalankan sesuai urutan dalam kode sumber, diselingi oleh penginisialisasi properti.

class Demo(val x: Int) {
    init { println("First init, x=$x") }
    val doubled = x * 2
    init { println("Second init, doubled=$doubled") }
}
fun main() {
    Demo(5)
}

Penginisialisasi Properti dan Urutan Inisialisasi

Penginisialisasi properti dan blok inisialisasi dijalankan dari atas ke bawah sesuai urutan dalam kode sumber. Properti harus diberi nilai sebelum digunakan.

class Order {
    val createdAt = System.currentTimeMillis()
    init { println("created at $createdAt") }
    val nextId = 1
    init { println("next id = $nextId") }
}
fun main() {
    Order()
}

Properti Tidak Dapat Digunakan Sebelum Diinisialisasi

Mereferensikan properti sebelum penginisialisasinya dijalankan merupakan kesalahan kompilasi.

class Bad {
    init {
        // println(name) // ERROR: name not yet initialized
    }
    val name = "after init"
}
fun main() { Bad() }

Menghitung Properti Turunan

Gunakan blok inisialisasi untuk menghitung keadaan turunan yang bergantung pada beberapa parameter konstruktor.

class Rectangle(val width: Int, val height: Int) {
    val area: Int
    init {
        area = width * height
    }
}
fun main() {
    val r = Rectangle(4, 5)
    println("area = ${r.area}") // 20
}

Efek Samping: Pencatatan

Gunakan blok inisialisasi untuk persiapan yang tidak sederhana, seperti pencatatan, alokasi, atau pendaftaran.

class Service(val name: String) {
    init {
        println("[BOOT] starting service '$name'")
    }
}
fun main() {
    Service("auth")
    Service("payments")
}

Urutan Inisialisasi dengan Subkelas

Inisialisasi kelas super dijalankan sebelum inisialisasi subkelas. Properti milik setiap kelas diinisialisasi sesuai urutan dalam kode sumber.

open class Base {
    init { println("Base init") }
}
class Sub : Base() {
    init { println("Sub init") }
}
fun main() { Sub() }

Hindari Logika Berat dalam Inisialisasi

Blok inisialisasi yang berjalan lama memperlambat setiap pembuatan instans. Pertimbangkan inisialisasi malas atau metode pabrik jika persiapannya membutuhkan banyak waktu.

class Heavy(val n: Int) {
    val data: List<Int> by lazy { (1..n).toList() }
}
fun main() {
    val h = Heavy(1_000_000)
    println("Created without computing data")
    println("First element: ${h.data[0]}") // now data initializes
}

Menggabungkan Inisialisasi dengan Konstruktor Sekunder

Konstruktor sekunder mendelegasikan tugas ke konstruktor utama; blok inisialisasi dijalankan sebagai bagian dari jalur konstruktor utama.

class Box(val content: String) {
    init { println("init for '$content'") }
    constructor(): this("empty") { println("secondary done") }
}
fun main() {
    Box()
}

Pemeriksaan Singkat

Bagaimana urutan eksekusi beberapa blok init dan penginisialisasi properti dalam kelas Kotlin?

Ringkasan

Blok init berisi logika saat pembuatan instans — validasi, properti turunan, dan efek samping. Beberapa blok dijalankan sesuai urutan dalam kode sumber, diselingi oleh penginisialisasi properti. Hindari pekerjaan berat dalam inisialisasi; gunakan lazy atau metode pabrik sebagai gantinya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Blok init dan Urutan Inisialisasi” gratis?

Ya — teks lengkap “Blok init dan Urutan Inisialisasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Blok init dan Urutan Inisialisasi”?

Gunakan blok init dan pahami urutan inisialisasi properti serta blok. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Blok init dan Urutan Inisialisasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Konstruktor Utama dan Parameter Properti
  2. Blok init dan Urutan Inisialisasi
  3. Getter dan Setter Kustom dengan field
  4. lateinit dan Inisialisasi Tertunda
← Kembali ke Kotlin Academy