Inline function
- Kotlin kursu
- Uzman
- Ders 2/47
- 5 dk
inline ve noinline ile performans güvenliği öğrenirsin.
inline ne yapar?
inline anahtar sözcüğü, bir fonksiyonun gövdesini çağrıldığı yere kopyalamasını söyler. Bu, yüksek dereceli fonksiyonlarda lambda oluşturma yükünü azaltır.
Örnek: inline fun forEachTwice(items: List<Int>, action: (Int) -> Unit). Burada action lambdası her çağrıda yeni bir nesne oluşturmaz; doğrudan gövdeye kopyalanır. Bu, performansı artırır ama bytecode boyutunu büyütür. Uzun gövdeli fonksiyonlarda inline kullanmamak daha iyidir. Kısa, lambda parametreli fonksiyonlarda idealdir.
noinline ve crossunlune
Bazen bir lambda parametresinin inline edilmesini istemezsin. O zaman noinline işaretini koyarsın: noinline action: () -> Unit.
Bazen de inline edilen lambda, içinden lokal olmayan dönüş (non-local return) yapar; bu da bazı bağlamlarda sorun çıkarır. Bunu önlemek için crossinline kullanılır. Örnek: bir inline fonksiyon içinde lambda'yı başka bir fonksiyona geçerken crossinline gerekir. İki anahtar sözcük de yalnızca inline fonksiyonların parametrelerinde geçerlidir.
Uygulama inline forEachTwice yaz
inline fun forEachTwice(items: List<Int>, action: (Int) -> Unit) tanımla. Her öğe için action'ı iki kez çağırsın. main içinde listOf(1, 2) ile çağırıp her adımda println(it) yapsın.
Başlangıç kodu
// anahtar sözcüğü ekle
fun forEachTwice(items: List<Int>, action: (Int) -> Unit) {
for (i in items) {
// action'ı iki kez çağır
}
}
fun main() {
forEachTwice(listOf(1, 2)) { /* öğeyi yazdır */ }
}Örnek çözüm
inline fun forEachTwice(items: List<Int>, action: (Int) -> Unit) {
for (i in items) {
action(i)
action(i)
}
}
fun main() {
forEachTwice(listOf(1, 2)) { println(it) }
}Beklenen çıktı
1 1 2 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 inline anahtar sözcüğünü ekle
____ fun twice(action: () -> Unit) {
action()
action()
}
inline fun twice(action: () -> Unit) {
action()
action()
}
Açıklama: inline, lambda parametreli fonksiyonları en iyiler.
2 inline anahtarlarını eşle
| Kavram | Anlamı |
|---|---|
inline |
Gövdeyi kopyalar |
noinline |
Parametreyi kopyalama |
crossunlune |
Lokal dönüşü yasaklar |
fun |
Fonksiyon bildirimi |
3 inline fonksiyon ne zaman tercih edilir?
- Kısa, lambda parametreli ve sık çağrılan fonksiyonlarda Doğru cevap
- Yalnızca soyut sınıf metotlarında
- Uzun gövdeli ve nadir çağrılan fonksiyonlarda
- Sadece inline edilemeyen generic fonksiyonlarda
Açıklama: inline kısa ve sık çağrılan lambda-parametreli fonksiyonlarda en iyisini verir.