inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma
Lambda parametreleri için nesne oluşturulmasını önlemek üzere işlevleri inline olarak işaretleyin.
inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Satır İçi İşlev Nedir?
Normalde bir işleve aktarılan lambda, anonim bir sınıfa derlenir. Her çağrı yeni bir nesne ayırır; bu da bellek ve zaman maliyeti oluşturur. inline anahtar sözcüğü, derleyiciye işlev gövdesini (ve lambda bağımsız değişkenlerini) doğrudan çağrı noktasına kopyalamasını söyler.
Satır İçi Tanımlama
fun'dan önce inline değiştiricisini ekleyin:
inline fun measureTime(block: () -> Unit): Long {
val start = System.nanoTime()
block()
return System.nanoTime() - start
}Derleyici Çağrıyı Nasıl Yeniden Yazar
measureTime { doWork() } gibi bir çağrı, bayt kodu düzeyinde measureTime gövdesinin satır içine yapıştırılmasıyla sonuçlanır — hiçbir lambda nesnesi ayrılmaz.
Satır İçi Kullanım Zamanı
inline kullanın:
- İşlev bir veya daha fazla lambda parametresi alıyorsa
- Sıkı döngüler veya oluşturulabilir işlevler gibi yoğun yollarda sık çağrılıyorsa
reifiedtür parametrelerine ihtiyacınız varsa (bir sonraki bölümde ele alınacaktır)
Performans Karşılaştırması Örneği
inline olmadığında, yüksek düzeyli bir işleve yapılan her çağrı bir lambda nesnesi ayırır. Kullanıldığında JVM, doğrusal kod görür — ayırma yoktur, sanal gönderim yoktur.
inline fun repeat(n: Int, block: () -> Unit) {
for (i in 0 until n) block()
}Yerel Olmayan Dönüşler
Satır içi işlevlerin önemli bir yararı şudur: lambda, yalnızca kendisinden değil, kapsayan işlevden çıkmak için return kullanabilir. Buna yerel olmayan dönüş denir.
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
}Satır İçinin Sınırlamaları
Satır içi işlevler, çalışma zamanında birinci sınıf varlıklar olarak bulunmadıkları için değişkenlerde saklanamaz veya nesne olarak aktarılamaz. f(::measureTime) çağrısını, f bu imzaya sahip bir işlev başvurusu bekliyorsa yapamazsınız.
Koleksiyon İşlem Hatlarını Satır İçine Alma
Standart kitaplıkta bulunan map, filter, forEach ve benzeri işlevlerin tümü inlinedır. Bu nedenle bunları zincirlemek, öğe başına ek kapanım nesneleri oluşturmaz.
val result = (1..1_000_000)
.filter { it % 2 == 0 } // inline
.map { it * it } // inline
.take(10)Kod Boyutu Dengesi
Her çağrı noktası, satır içine alınan kodun bir kopyasını alır. İşlev gövdesi büyükse ve birçok yerden çağrılıyorsa bayt kodu boyutu büyür. Küçük ve sık çağrılan lambda'lar için inline kullanmayı tercih edin.
Eşlikçi ve Üst Düzey ile Etkileşim
inline, üst düzey işlevlerde ve üye işlevlerde çalışır. Özelliklerde veya oluşturucularda çalışmaz. İşlev çağrı noktasında görünür olmalıdır (genellikle public veya internal).
Standart Kitaplık Örnekleri
Zaten bildiğiniz ve inline olan işlevler: let, run, apply, also, with, use, synchronized, lazy (blok çeşidi). Lambda'larını sıfır maliyetli yapan şey inline değiştiricisidir.
Hızlı Kontrol
Yüksek düzeyli bir işlevi inline olarak işaretlemenin temel yararı nedir?
Özet: Satır İçi İşlevler
Önemli çıkarımlar:
inline, lambda nesnesi ayrılmasını ortadan kaldırır- Lambda'larda yerel olmayan dönüşleri mümkün kılar
reifiedtür parametreleri için gereklidir- Küçük ve sık çağrılan yüksek düzeyli işlevler için en uygunudur
- Standart kitaplığın kapsam işlevlerinin tümü
inlinedır
Sıkça Sorulan Sorular
“inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma” dersi ücretsiz mi?
Evet — “inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma” dersinde ne öğreneceğim?
Lambda parametreleri için nesne oluşturulmasını önlemek üzere işlevleri inline olarak işaretleyin. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma
- noinline ve crossinline Değiştiricileri
- reified Tür Parametreleri: Çalışma Zamanında T'ye Erişme
- Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme