Kotlin Academy · Pelajaran

Fungsi inline: Menghapuskan Overhed Lambda

Tandakan fungsi sebagai inline untuk mengelakkan penciptaan objek bagi parameter lambda.

Pelajaran 1 daripada 413 langkah

Fungsi inline: Menghapuskan Overhed Lambda ialah pelajaran Kotlin Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kotlin Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah Fungsi inline?

Biasanya, lambda yang dihantar kepada fungsi disusun menjadi kelas tanpa nama. Setiap seruan memperuntukkan objek baharu, yang menggunakan memori dan masa. Kata kunci inline memberitahu pengkompil supaya menyalin badan fungsi (serta argumen lambda) terus ke tapak panggilan.

Mengisytiharkan inline

Tambahkan pengubah suai inline sebelum fun:

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

Cara Pengkompil Menulis Semula Seruan

Seruan seperti measureTime { doWork() } menjadi, pada aras kod bait, badan measureTime yang ditampal sebaris — tiada objek lambda diperuntukkan.

Bila Hendak Menggunakan inline

Gunakan inline apabila:

  • Fungsi menerima satu atau lebih parameter lambda
  • Fungsi kerap dipanggil dalam laluan panas (gelung rapat, composable)
  • Anda memerlukan parameter jenis reified (diterangkan seterusnya)

Contoh Penanda Aras Prestasi

Tanpa inline, setiap seruan kepada fungsi tertib tinggi memperuntukkan objek lambda. Dengan inline, JVM melihat kod lurus — tiada peruntukan dan tiada penghantaran maya.

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

Pulangan Bukan Setempat

Satu manfaat utama fungsi inline ialah lambda boleh menggunakan return untuk keluar daripada fungsi yang melingkunginya, bukan sekadar lambda. Ini dipanggil pulangan bukan setempat.

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 boleh disimpan dalam pemboleh ubah atau dihantar sebagai objek kerana fungsi tersebut tidak wujud sebagai entiti kelas pertama pada masa jalan. Anda tidak boleh memanggil f(::measureTime) apabila f menjangkakan rujukan fungsi dengan tandatangan tersebut.

Menjadikan Saluran Paip Koleksi Sebaris

Fungsi pustaka standard seperti map, filter, forEach dan sebagainya semuanya inline. Oleh itu, merangkaikannya tidak menghasilkan objek penutupan tambahan bagi setiap elemen.

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

Pertukaran Saiz Kod

Setiap tapak panggilan menerima salinan kod yang disejajarkan. Jika badan fungsi besar dan dipanggil dari banyak tempat, saiz kod bait meningkat. Utamakan inline untuk lambda yang kecil dan kerap dipanggil.

Interaksi dengan companion dan Aras Atas

inline berfungsi pada fungsi aras atas dan fungsi ahli. Ia tidak berfungsi pada sifat atau pembina. Fungsi tersebut mesti kelihatan pada tapak panggilan (biasanya public atau internal).

Contoh Pustaka Standard

Fungsi yang mungkin sudah anda kenali dan bersifat inline: let, run, apply, also, with, use, synchronized, lazy (varian blok). Pengubah suai inline menjadikan lambda fungsi-fungsi tersebut tanpa kos.

Semakan Pantas

Apakah manfaat utama menandakan fungsi tertib tinggi sebagai inline?

Ringkasan: Fungsi inline

Kesimpulan utama:

  • inline menghapuskan peruntukan objek lambda
  • Membolehkan pulangan bukan setempat daripada lambda
  • Diperlukan untuk parameter jenis reified
  • Paling sesuai untuk fungsi tertib tinggi yang kecil dan kerap dipanggil
  • Semua fungsi skop pustaka standard ialah inline
Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Fungsi inline: Menghapuskan Overhed Lambda” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kotlin Academy, termasuk “Fungsi inline: Menghapuskan Overhed Lambda”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kotlin Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Fungsi inline: Menghapuskan Overhed Lambda”?

Tandakan fungsi sebagai inline untuk mengelakkan penciptaan objek bagi parameter lambda. Anda berlatih Kotlin Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kotlin Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kotlin Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Fungsi inline: Menghapuskan Overhed Lambda” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Fungsi inline: Menghapuskan Overhed Lambda
  2. Pengubah noinline dan crossinline
  3. Parameter Jenis reified: Mengakses T semasa Masa Jalan
  4. Corak reified Praktikal: Penghuraian, DI dan Pensirilan
← Kembali ke Kotlin Academy