0Pricing
Kotlin Academy · Pelajaran

Fungsi inline: Menghilangkan Overhead Lambda

Tandai fungsi sebagai inline untuk menghindari pembuatan objek bagi parameter lambda.

Fungsi inline: Menghilangkan Overhead Lambda adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 1 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 Fungsi inline

Biasanya, lambda yang diteruskan ke suatu fungsi dikompilasi menjadi kelas anonim. Setiap pemanggilan mengalokasikan objek baru, yang membutuhkan memori dan waktu. Kata kunci inline memberi tahu compiler untuk menyalin isi fungsi (beserta argumen lambda-nya) langsung ke lokasi pemanggilan.

Mendeklarasikan inline

Tambahkan pengubah inline sebelum fun:

inline fun measureTime(block: () -> Unit): Long {
    val start = System.nanoTime()
    block()
    return System.nanoTime() - start
}

Cara Compiler Menulis Ulang Pemanggilan

Pemanggilan seperti measureTime { doWork() } menjadi, pada tingkat bytecode, isi measureTime yang ditempelkan secara sebaris — tidak ada objek lambda yang dialokasikan.

Kapan Menggunakan inline

Gunakan inline ketika:

  • Fungsi menerima satu atau beberapa parameter lambda
  • Fungsi sering dipanggil pada jalur yang sering dieksekusi, seperti loop ketat atau composable
  • Anda memerlukan parameter tipe reified (dibahas berikutnya)

Contoh Tolok Ukur Performa

Tanpa inline, setiap pemanggilan fungsi orde tinggi mengalokasikan objek lambda. Dengan inline, JVM melihat kode yang berjalan langsung — tanpa alokasi dan tanpa pengiriman virtual.

inline fun repeat(n: Int, block: () -> Unit) {
    for (i in 0 until n) block()
}

Pengembalian Nonlokal

Salah satu manfaat utama fungsi inline: lambda dapat menggunakan return untuk keluar dari fungsi yang membungkusnya, bukan hanya dari lambda. Ini disebut pengembalian nonlokal.

inline fun forEach(list: List<Int>, block: (Int) -> Unit) {
    for (item in list) block(item)
}

fun findFirst(list: List<Int>): Int {
    forEach(list) { if (it > 5) return it }  // returns from findFirst
    return -1
}

Batasan inline

Fungsi inline tidak dapat disimpan dalam variabel atau diteruskan sebagai objek karena tidak ada sebagai entitas kelas satu saat program berjalan. Anda tidak dapat memanggil f(::measureTime) jika f mengharapkan referensi fungsi dengan tanda tangan tersebut.

Menyebariskan Pipeline Koleksi

Fungsi pustaka standar seperti map, filter, forEach, dan sebagainya semuanya adalah inline. Inilah sebabnya merangkainya tidak membuat objek closure tambahan untuk setiap elemen.

val result = (1..1_000_000)
    .filter { it % 2 == 0 }   // inline
    .map { it * it }           // inline
    .take(10)

Kompromi Ukuran Kode

Setiap lokasi pemanggilan menerima salinan kode yang disebariskan. Jika isi fungsi besar dan dipanggil dari banyak tempat, ukuran bytecode bertambah. Utamakan inline untuk lambda kecil yang sering dipanggil.

Interaksi dengan companion dan Tingkat Teratas

inline dapat digunakan pada fungsi tingkat teratas dan fungsi anggota. Pengubah ini tidak dapat digunakan pada properti atau konstruktor. Fungsi tersebut harus terlihat dari lokasi pemanggilan, biasanya dengan visibilitas public atau internal.

Contoh dari Pustaka Standar

Fungsi yang mungkin sudah Anda kenal dan bersifat inline: let, run, apply, also, with, use, synchronized, dan lazy (varian blok). Pengubah inline-lah yang membuat lambda-nya tidak memerlukan biaya tambahan.

Pemeriksaan Cepat

Apa manfaat utama menandai fungsi orde tinggi sebagai inline?

Ringkasan: Fungsi inline

Poin penting:

  • inline menghilangkan alokasi objek lambda
  • Memungkinkan pengembalian nonlokal dari lambda
  • Diperlukan untuk parameter tipe reified
  • Paling cocok untuk fungsi orde tinggi yang kecil dan sering dipanggil
  • Semua fungsi cakupan pustaka standar bersifat inline

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi inline: Menghilangkan Overhead Lambda” gratis?

Ya — teks lengkap “Fungsi inline: Menghilangkan Overhead Lambda” 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 “Fungsi inline: Menghilangkan Overhead Lambda”?

Tandai fungsi sebagai inline untuk menghindari pembuatan objek bagi parameter lambda. 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 1 dari 4.

Berapa lama pelajaran “Fungsi inline: Menghilangkan Overhead Lambda” 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 inline: Menghilangkan Overhead Lambda
  2. Modifier noinline dan crossinline
  3. Parameter Tipe reified: Mengakses T saat Runtime
  4. Pola Reified Praktis: Parsing, DI, dan Serialisasi
← Kembali ke Kotlin Academy