Kotlin - 12 - Delegasyon ve Delege Özellikler
Delegasyon:
Delegasyon implemantation için oldukça iyi bir alternatif,
Kotlin bunu oldukça kolay ve az bir kod ile destekler. Aşağıdaki örnekte “Base” interface ini miras
alan ve tüm public method larını destekleyen “Derived” adında sınıf
yaratılıyor.
“by b” ifadesi “b” nin “Derived” class’ı içinde obje olarak
tutulacağını ifade ediyor ve derleyici “Base” in tüm method larını “b” için
yaratacak. Yinede override etmek mümkün.
Delegate edilmiş özellikler:
Bazı durumlarda genel değişkenler olur ve sürekli manuel
olarak eklememiz gerekiyor, her şey için bir kere eklemek iyi olabilir, bu
doğrultuda ve aşağıdaki 3 fayda (Belkide fazlası) için Kotlin Delege
özellikleri kullanır.
- Lazy properties: değer sadece ilk erişimde hesaplanır.
- Observable (gözlemlenebilir) properties: listener lar tarafından değer değişiklikleri yakalanır.
- Her alan için ayrı özellik tutmak yerine map içinde tutmak.
Kotlin’de (1.1 sonrası) delege özellikler fonksiyon veya kod
bloğu içinde olabilir, class member’ı olmak zorunda değil.
Standart Delege:
Lazy:
“Lazy()” lambda ifade alan ve ilk çağrımında ifadeyi
çalıştırıp hatırlayan ve sonraki çağrımlarda bu sonucu dönen değişken yaratmak
için kullanılabilir.
Observable
özellikler:
Bu şekilde tanımlanan değişkenlerin değerinde oluşacak her
değişiklik durumunda ilgili yordamlarımız çalışıyor olacak.
Özellikleri Map te
tutmak:
Daha çok JSON parse işlemleri ya da diğer dinamik işlemlerde
kullanılabilir. Böylece bir döngü içinde dinamik dataları key valuepair
şeklinde işleyebilirsiniz. “val” yerine “var” değişkenler ile uğraşmak için “Map”
ifadesi yerine “MutableMap” keyword’ü kullanılabilir.
Yerel
değişkenlerin delege edilmesi: (1.1 versiyonu ile)
Local değişkenleri delege edilebilir, bu şekilde local
değişikeni lazy olarak tanılayabilirsiniz.
Özellik delegasyonu için gerekenler:
“val” (read-only)
özellikler için “getValue” method unu tanımlamalıdır. Ve parametreleri:
-
thisRef : tanımlanacak özellik, ile aynı yada
bir üst tipi olmalı.
-
property : KProperty<*>
veya üst tipinde olmalı.
Return değeri de ilgili özellikle aynı tipte olmalıdır. “var”
(mutable) özellikler için ayrıca “setValue” methodu olmalı ve aşağıdaki
parametreleri içermeli:
-
thisRef : getValue ile Aynı.
-
Property : getValue ile Aynı.
-
new value
: özellikle aynı yada üst tipi olmalı.
Bu method lar member olarak ya da extension fonksiyon
olarak tanımlanabilir. Eğer bu method lara sahip olmayan bir tip için
delegasyon yapılıyor ise bu method lar “operator” keyword’ü ile
işaretlenmelidir. ReadOnlyProperty ve ReadWriteProperty interface leri ilgili “operator”
olarak adlandırılmış olarak içerir.
Çevirim kurallar:
Kotlinde delege edilen her özellik için arkada destekleyici
bir özellik tanımlar ve adresleme yapar.
Örneğin, “prop” için arkada yaratılan “prop$delegate”tir ve
bu değişkeni adresler. “prop” ile ilgili tüm bilgi oluşur, “this” dış sınıfa
denk gelir, yani ‘C’ sınıfına. “this::prop”
(Bu syntax 1.1 ile kullanılabilir.) KProperty için oluşan yansıma objesidir.
Yorumlar
Yorum Gönder