diff options
author | baha <bahacan19@gmail.com> | 2017-07-31 17:24:58 +0300 |
---|---|---|
committer | baha <bahacan19@gmail.com> | 2017-07-31 17:24:58 +0300 |
commit | ef1cf7d71ecb3f9879397c0893bb8803b427240f (patch) | |
tree | 35069ac2da1c53e187d029cb39b1931bbf75cdad /tr-tr | |
parent | 04c0ccb2ae6326edc4f17e41ff82fe8af9fa7b4a (diff) |
[kotlin/tr] Delegated properties added
Diffstat (limited to 'tr-tr')
-rw-r--r-- | tr-tr/kotlin-tr.html.markdown | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tr-tr/kotlin-tr.html.markdown b/tr-tr/kotlin-tr.html.markdown index 2dcb92e0..e549ef8e 100644 --- a/tr-tr/kotlin-tr.html.markdown +++ b/tr-tr/kotlin-tr.html.markdown @@ -381,6 +381,63 @@ fun helloWorld(val name : String) { println(EnumExample.A) // => A println(ObjectExample.hello()) // => Merhaba + + //Biraz detaylı Kotlin + + + /* + * Delegated Properties, bir değişken tanımlarken kullanılan birkaç standart yöntemler içerir. + * https://kotlinlang.org/docs/reference/delegated-properties.html + * En bilinen delegate property metodları: lazy(), observable() + * */ + + /* + * Lazy, bir değişkeni ilk erişimde çalıştırılacak olan bir lambda ile tanımlama metodudur. + * Sonraki erişimlerde değişkene atanan değer hatırlanır. + * Lazy, synchronized bir delegation yöntemidir; değer sadece bir thread içinde hesaplanır, + * tüm thread ler aynı değere erişir. Eğer senkronizasyon gerekli değilse, lazy metodu içine + * LazyThreadSafetyMode.PUBLICATION paslanabilir. + * */ + + val lazyValue: String by lazy( { + println("bi sn... hesaplıyorum....") + "Selam!" + }) + + println(lazyValue)// bi sn... hesaplıyorum.... Selam! + println(lazyValue) // Selam! + /* + * Observable, bir değişkende olabilecek yeniden atama değişikliklerini dinleme yöntemidir. + * İki arguman alır; değişkenin ilk değeri, değiştiğinde çağrılan bir handler metodu. Handler + * metodu değişken her değiştiğinde çağırılır. + * */ + var myObservableName: String by Delegates.observable("<isim yok>") { + prop, old, new -> + println("$old -> $new") + } + myObservableName = "Baha" //<isim yok> -> Baha + myObservableName = "Can" //Baha -> Can + + + /* + * Eğer değişkenin yeniden atanmasını denetlemek isterek vetoable() + * metodunu kullanabiliriz. + * */ + + var myVetoableName : String by Delegates.vetoable("<isim yok>"){ + property, oldValue, newValue -> + if (newValue.length < 2) { + println("Tek harfli isim kabul etmiyoruz!") + false + } else { + println("$oldValue -> $newValue") + true + } + } + + myVetoableName = "Baha" //<isim yok> -> Baha + myVetoableName = "C" //Tek harfli isim kabul etmiyoruz! + println(myVetoableName) //Baha } // Enum class lar Java'daki enum lara benzerdir. |