0Pricing
Kotlin Academy · Ders

noinline ve crossinline Değiştiricileri

Satır içi işlevlerde belirli lambda parametrelerinin satır içine alınma davranışını denetleyin.

noinline ve crossinline Değiştiricileri, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. 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 İçinin Çözdüğü ve Ortaya Çıkardığı Sorun

Bir işlev inline olduğunda, tüm lambda parametreleri varsayılan olarak satır içine alınır. Bazen belirli bir lambda'nın satır içine alınmaması gerekir — örneğin onu saklamak veya satır içi olmayan başka bir işleve aktarmak için.

noinline: Bir Lambda'yı Nesne Olarak Tutma

Geri kalan parametreleri satır içine alırken belirli bir lambda parametresini satır içine alma işleminden hariç tutmak için başına noinline ekleyin.

inline fun doWork(
    action: () -> Unit,
    noinline callback: () -> Unit   // stored, not inlined
) {
    action()                        // inlined at call site
    scheduleCallback(callback)      // passed as object — valid
}

noinline Ne Zaman Gereklidir

Lambda şu durumlarda noinline kullanmalısınız:

  • Bir değişkende veya alanda saklanıyorsa
  • İşlev türü bekleyen başka bir işleve aktarılıyorsa
  • Satır içi işlevden döndürülüyorsa

crossinline: Yerel Olmayan Dönüşleri Engelleme

crossinline, satır içine alınan bir lambda farklı bir yürütme bağlamında (örneğin başka bir lambda içinde veya farklı bir iş parçacığında) çağrılacaksa kullanılır. Derleyiciye şunu söyler: bu lambda'yı satır içine al, ancak içinde yerel olmayan dönüşlere izin verme.

inline fun runAsync(crossinline block: () -> Unit) {
    Thread {
        block()   // block is inlined but cannot use non-local return
    }.start()
}

Yerel Olmayan Dönüşler Burada Neden Tehlikelidir?

block yerel olmayan bir return kullanabilseydi, runAsync'i çağıran işlevden dönmeye çalışırdı. Ancak iş parçacığı çalıştığında bu işlev çoktan dönmüş olabilir ve bu da tanımsız davranışa yol açabilir. crossinline bunu derleme zamanında engeller.

noinline ve crossinline'ı Birleştirme

Tek bir satır içi işlev, normal, noinline ve crossinline parametrelerini birlikte kullanabilir:

inline fun orchestrate(
    crossinline setup: () -> Unit,
    action: () -> Unit,
    noinline teardown: () -> Unit
) {
    Thread { setup() }.start()
    action()
    register(teardown)
}

crossinline Olmadan Derleyici Hatası

crossinline olmadan satır içine alınan bir lambda'yı lambda bağlamına aktarırsanız derleyici şu hatayı verir: "'block' burada satır içine alınamaz: yerel olmayan dönüşler içerebilir. crossinline değiştiricisini ekleyin."

Standart Kitaplık Kullanımı

Standart kitaplık, kullanıcı tarafından sağlanan lambda'nın farklı bir bağlamda güvenle çalışmasını sağlamak için Sequence { } gibi işlevlerde ve bazı korutin oluşturucularında crossinline kullanır.

noinline, Satır İçini Bozmaz

Bir parametreyi noinline olarak işaretlemek, işlevin tamamında satır içine alma işlemini kapatmaz. İşlev gövdesi ve diğer tüm lambda parametreleri yine satır içine alınır. Yalnızca noinline ile işaretlenen lambda nesne kimliğini korur.

Performans Hususları

noinline, o tek parametre için olağan lambda ayırma maliyetini getirir. crossinline yine satır içine alır — tek kısıtlama, yerel olmayan dönüşlere izin vermemesidir. Her iki değiştirici de diğer parametrelerin satır içine alınmasını etkilemez.

Özet Tablosu

Değiştirici özeti:

  • Değiştirici yok → lambda tamamen satır içine alınır, yerel olmayan dönüşlere izin verilir
  • noinline → lambda nesne olarak tutulur, saklanabilir veya aktarılabilir
  • crossinline → lambda satır içine alınır, yerel olmayan dönüşlere izin verilmez

Hızlı Kontrol

Bir inline işlevin lambda parametresinde ne zaman noinline kullanmalısınız?

Özet: noinline ve crossinline

Önemli çıkarımlar:

  • noinline: normalde satır içine alınan bir işlevin içinde bir lambda'yı nesne olarak tutar
  • crossinline: lambda'yı satır içine alır ancak farklı bağlamlarda güvenli kullanım için yerel olmayan dönüşleri engeller
  • Her iki değiştirici de işlevin tamamına değil, parametre bazında uygulanır

Sıkça Sorulan Sorular

“noinline ve crossinline Değiştiricileri” dersi ücretsiz mi?

Evet — “noinline ve crossinline Değiştiricileri” 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.

“noinline ve crossinline Değiştiricileri” dersinde ne öğreneceğim?

Satır içi işlevlerde belirli lambda parametrelerinin satır içine alınma davranışını denetleyin. 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 2. dersidir.

“noinline ve crossinline Değiştiricileri” 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

  1. inline İşlevleri: Lambda Ek Yükünü Ortadan Kaldırma
  2. noinline ve crossinline Değiştiricileri
  3. reified Tür Parametreleri: Çalışma Zamanında T'ye Erişme
  4. Uygulamalı Reified Kalıpları: Ayrıştırma, DI ve Serileştirme
← Kotlin Academy Sayfasına Dön