Kotlin, özelliklerin getter'larını ve setter'larını inline modifikatörü ile işaretlemeye izin verir. Bu, derleyiciye aksesuarın kodunu, performansı optimize etmek için çağırma yerlerine doğrudan yerleştirme hakkı verir.
Örnek:
val foo: Int inline get() = expensiveCalculation()
inline kullanılamaz.En iyi uygulama: inline aksesuarı yalnızca yan etkisi olmayan, çok kısa ve sıkça çağrılan ifadeler için kullanmaktır.
Inline getter/setter olan bir özelliğe, yansıma (reflection) ile bir annotation eklenirse (örneğin KProperty ile kullanmak), inline çalışır mı?
Cevap: Hayır. Özellik yansıma API'si aracılığıyla kullanılıyorsa veya KProperty'ye atıfta bulunuyorsa, derleyici getter/setteri inline yapamaz ve bunlar normal yöntemler olarak kalır. Inline, kodda doğrudan erişim sırasında gerçekleşir.
Tarih
Yansımanın inline getter ile çalışma nedeniyle performans kaybı:
Sıcak bir özelliği inline getter'a yazdık ve gereksiz çağrılardan kurtulmayı umuyorduk. Daha sonra KProperty aracılığıyla doğrulama ekledik - ve sonunda çağrılar yansıma üzerinden gerçekleşmeye başladı, inline erişicinin avantajını tamamen iptal etti.
Tarih
Inlining sırasında istenmeyen yan etkiler:
Inline getter'ı günlük kaydı yapıyordu:
inline get() { println("erişim sağlandı!") return field }
Bu uygulama, özelliğin farklı yerlerde sıkça okunması durumunda, beklenmedik günlüklemeye yol açarak logları oldukça karmaşık hale getirdi.
Tarih
Inline özelliğin değiştirilmesi nedeniyle ABI kırılması:
Kütüphanede inline getter'ın mantığını değiştirdik, bağlı modülleri yeniden derlemeden, istemciler eski imzayı kullanmaya devam etti - genişletilmiş ABI ve inlining, güncellemede istemcilerin uyumsuzluğuna ve gizli düşüşüne neden oldu.