Kotlin Academy · Pelajaran

Indeks dan Invoke

get, set, dan invoke

Pelajaran 3 dari 413 langkah

Indeks dan Invoke adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Operator Indeks

Mendefinisikan operator fun get memungkinkan Anda membaca menggunakan sintaks kurung siku: obj[i].

class Row(val cells: List<String>) {
    operator fun get(i: Int) = cells[i]
}

fun main() {
    val r = Row(listOf("a", "b", "c"))
    println(r[1])
}

Menulis dengan Penetapan Berindeks

operator fun set memungkinkan penetapan: obj[i] = value. Parameter terakhir adalah nilainya.

class Grid {
    private val data = IntArray(3)
    operator fun get(i: Int) = data[i]
    operator fun set(i: Int, value: Int) { data[i] = value }
}

fun main() {
    val g = Grid()
    g[0] = 42
    println(g[0])
}

Pengindeksan dengan Beberapa Argumen

get dan set dapat menerima beberapa indeks, sehingga sangat cocok untuk matriks.

class Matrix {
    private val d = Array(2) { IntArray(2) }
    operator fun get(r: Int, c: Int) = d[r][c]
    operator fun set(r: Int, c: Int, v: Int) { d[r][c] = v }
}

fun main() {
    val m = Matrix()
    m[1, 1] = 9
    println(m[1, 1])
}

Indeks dengan Kunci Non-Int

Parameter indeks dapat berupa tipe apa pun, sehingga memungkinkan akses seperti peta.

class Settings {
    private val map = mutableMapOf<String, String>()
    operator fun get(key: String) = map[key]
    operator fun set(key: String, value: String) { map[key] = value }
}

fun main() {
    val s = Settings()
    s["theme"] = "dark"
    println(s["theme"])
}

Operator Pemanggilan

Mendefinisikan operator fun invoke memungkinkan Anda memanggil sebuah instans seperti fungsi: obj().

class Greeter(val name: String) {
    operator fun invoke() = "Hello, $name"
}

fun main() {
    val g = Greeter("Sam")
    println(g())
}

Pemanggilan dengan Argumen

invoke dapat menerima parameter, sehingga objek tersebut berperilaku seperti fungsi berparameter.

class Multiplier(val factor: Int) {
    operator fun invoke(x: Int) = x * factor
}

fun main() {
    val triple = Multiplier(3)
    println(triple(5))
}

Objek yang Dapat Dipanggil dan Mempertahankan Status

Karena objek menyimpan status, invoke dapat membangun objek mirip fungsi yang dapat dikonfigurasi.

class Accumulator {
    var total = 0
    operator fun invoke(n: Int) { total += n }
}

fun main() {
    val acc = Accumulator()
    acc(5)
    acc(10)
    println(acc.total)
}

Beberapa Definisi Pemanggilan

Anda dapat mendeklarasikan beberapa versi invoke dengan parameter yang berbeda.

class Printer {
    operator fun invoke(s: String) = println(s)
    operator fun invoke(n: Int) = println("num: $n")
}

fun main() {
    val p = Printer()
    p("hi")
    p(7)
}

Indeks dalam Ekspresi

Akses indeks dapat digabungkan secara alami dengan operasi lain.

class Scores(private val list: List<Int>) {
    operator fun get(i: Int) = list[i]
}

fun main() {
    val s = Scores(listOf(10, 20, 30))
    println(s[0] + s[2])
}

Menggabungkan Pengambilan dan Pemanggilan

Sebuah tipe dapat mendukung pengindeksan sekaligus pemanggilan untuk menghasilkan API yang ekspresif.

class Lookup(private val data: Map<String, Int>) {
    operator fun get(key: String) = data[key]
    operator fun invoke() = data.size
}

fun main() {
    val l = Lookup(mapOf("a" to 1))
    println(l["a"])
    println(l())
}

Cara Pustaka Standar Menggunakannya

Koleksi standar menggunakan operator ini secara persis: list[i] untuk daftar dan map[key] untuk peta. Tipe Anda juga dapat terasa sama alaminya.

fun main() {
    val list = listOf(1, 2, 3)
    val map = mapOf("x" to 9)
    println(list[0])
    println(map["x"])
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang indeks dan pemanggilan.

Rangkuman

Anda telah mempelajari indeks dan pemanggilan:

  • get mendukung obj[i]; set mendukung obj[i] = v.
  • Operator indeks mendukung beberapa kunci dan kunci yang bukan Int.
  • invoke memungkinkan instans dipanggil seperti fungsi, dengan atau tanpa argumen.
  • Koleksi standar menggunakan operator ini secara persis.
class Box {
    private val m = mutableMapOf<String, Int>()
    operator fun get(k: String) = m[k]
    operator fun set(k: String, v: Int) { m[k] = v }
}

fun main() {
    val b = Box()
    b["x"] = 5
    println(b["x"])
}
Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Indeks dan Invoke” gratis?

Ya — teks lengkap “Indeks dan Invoke” 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 “Indeks dan Invoke”?

get, set, dan invoke 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 3 dari 4.

Berapa lama pelajaran “Indeks dan Invoke” 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. Fungsi Operator
  2. Operator Perbandingan
  3. Indeks dan Invoke
  4. Praktik Terbaik
← Kembali ke Kotlin Academy