Kotlin öğreniyorum ,Lambdas, Modifiers,Null kontrol— Part 4

Buse Tekin Aydın
İyi Programlama
Published in
2 min readSep 6, 2018

Lambdas

Örnek bir setOnClickListener methodunun lambda ile yazılışı:

Normali

view.setOnClickListener(object : OnClickListener {    override fun onClick(v: View) {       toast("Click") // bu toast mesajı Anko'dan    }})

Lambda kullanarak :

fun setOnClickListener(listener: (View) -> Unit)

Burda ok ‘un sol tarafı fonksiyona girecek inputu sağ tarafı return type’ı gösterir. Yani ;

(View) =function input arguments

Unit = return type ( nothing)

view.setOnClickListener({ view -> toast(“Click”)})

Niteliyiciler(Modifiers)

private — tanımlandığı dosyada görünebilir

public — heryerde görünebilir

internal — aynı modülde görünebilir ( kendiyle derlenen dosyalar diyebiriz)

protected — kendi sınıfında ve ondan türeyen sınıflarda görünebilir.

Örnek :

open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4 // public olarak tanımlanır defaultta

protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// a görünür değil , çünkü private subclassta görünmez
// b, c ve d görünür,çünkü protected subclassta internal aynı modülde görünebilirdir,public heryerde görünür
// Nested ve e görünür protected ve public olduğu için
override val b = 5 // ‘b’ protected
}
class Unrelated(o: Outer) {
// o.a, o.b görünür değil, çünkü farklı bir class içerisinden ulaşmaya çalışıyoruz
// o.c ve o.d görünür
// Outer.Nested ve Nested::e görünür değil
}
örnek kaynak = https://kotlinlang.org/docs/reference/visibility-modifiers.html

internal ve public arasındaki farkı anlamak isteyenler şu yorumu inceleyebilir.

Delegated property

Sık kullanılan fonsiyonları gruplayabiliriz.Örneğin getter ve setter methodları gibi.Kodu tekrar tekrar yazmaktan kurtuluruz.

örnek:

class Delegate<T> {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
return..
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
}
}

Aggregate operations

val list = listOf(1, 2, 3, 4, 5, 6)

list.forEach { println(it) }

Kotlinde Null kontrolü

val a: Int? = nulla?.toLong()

Burada a?. ile null değilse toLong() işlemini yapmasını sağladık.

?. buna safe call operator denir.

Diğer bir alternatif Elvis operator (?:) kullanmak:

val myLong = a?.toLong() ?: return falseval myLong = a?.toLong() ?: throw IllegalStateException()

Burada ise myLong ‘a gelen değer a null değilse a.toLong() , null ise false.

Şimdilik burda bırakalım.

--

--