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.
İlk Yorumu Siz Yapın