İçeriğe geç

Kotlin Higher-Order Functions ve Lambda – Android Eski Notlar #13

Lambda ifadesinin ne olduğunu bildiğinizi tahmin diyorum ancak ben yine de kısaca bahsetmeye çalışacağım. Kotlin fonksiyonları first-class fonksiyonlardır. Bu ne anlama geliyor? İçerisinde değişken tutabilir başka bir fonksiyona parametre olarak gönderilebilir ve bir higher-order functions için geri dönüş tipi olabilir. Aşağıda basit bir lamda örneği kodu gösterilmiştir.

fun main() {

    var modAl : (Int, Int) -> Int = { sayi1, sayi2 ->
        val mod : Int = sayi1 % sayi2
        println("${sayi1} sayısının ${sayi2}'e göre modu alınıyor: ${mod} ")
        mod
    }

    println(modAl(7,9))

}
7 sayısının 9'e göre modu alınıyor: 7 
7

Kullanmasını öğrendikten sonra gerçeten bırakamayacağınız bir özelliktir. Kolay bir şekilde fonksyion tanımlamamızı sağlar ve okunurluk açısından son derece kuvvetlidir. Peki Higher-Order Functions'larla ilişkisi ne? Lambda ifadeleri bir parametre olarak kullanabiliriz. Ne demek istiyorum aşağıdaki ifadeye bakalım.

fun main() {

    var modAl : (Int, Int) -> Int = { sayi1, sayi2 ->
        val mod : Int = sayi1 % sayi2
        println("${sayi1} sayısının ${sayi2}'e göre modu alınıyor: ${mod} ")
        mod
    }

    fun higherOrder(
        sayi1 : Int, sayi2: Int,
        lambd : (Int, Int) -> Int,
    ){
        lambd(sayi1, sayi2)
    }

    higherOrder(7, 9, modAl)

}
7 sayısının 9'e göre modu alınıyor: 7 

Harika değil mi? Aslında belirli kurallarımızı oluşturduktan sonra çok generic metodlar yazabiliriz.

İstersek bir fonksiyonu direkt parametre olarak gönderebiliriz.

fun main() {

    fun modAl(sayi1 : Int, sayi2: Int) : Int {
        val mod : Int = sayi1 % sayi2
        println("${sayi1} sayısının ${sayi2}'e göre modu alınıyor: ${mod} ")
        return mod
    }

    fun higherOrder(
        sayi1 : Int, sayi2: Int,
        lambd : (Int, Int) -> Int,
    ){
        lambd(sayi1, sayi2)
    }

    higherOrder(7, 9, ::modAl)

}

Umarım anlaşılmıştır. Sonraki yazılarda görüşmek üzere.

Kategori:AndroidKotlin

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir