Fungsi inline: Menghapuskan Overhed Lambda
Tandakan fungsi sebagai inline untuk mengelakkan penciptaan objek bagi parameter lambda.
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:
inlinemenghapuskan 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
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
- Fungsi inline: Menghapuskan Overhed Lambda
- Pengubah noinline dan crossinline
- Parameter Jenis reified: Mengakses T semasa Masa Jalan
- Corak reified Praktikal: Penghuraian, DI dan Pensirilan