Lambda Expression & Anonymous Function & Higher Order Function Part-2

UMUTCAN SAHIN
2 min readJun 21, 2023

--

Selamlar, arkadaşlar! Bugün Higher Order fonksiyonlardan bahsedeceğim. İyi okumalar !:)

Bir fonksiyon’a parametre olarak fonksiyon geliyorsa veya bir fonksiyon döndürüyorsa o fonksiyonun kendisi higher order fonksiyondur.

Bir higher order fonksiyon parametre olarak fonksiyon veya lambda expression alır.

Fonksiyon aldığı durum;

val func = fun(sum: Int) {
println("$sum")
}

fun sum(number1: Int, number2: Int, action: (Int) -> Unit) {
action(number1 + number2)
}

sum(3, 4, func)

lambda expression aldığı durum;

fun sum(number1: Int, number2: Int, action: (Int) -> Unit) {
action(number1 + number2)
}

sum(3, 4, {
println("$it")
})

Birde yanlış anlaşılan bir örnek verelim;

fun sample1(): String {
return "!"
}

fun sample2(value: String) {
println(value)
}

sample2(sample1())

Bu bir higher order fonksiyon olmuyor 1. fonksiyon string döndürdüğü için 2. fonksiyon’a birinci fonksiyonun döndürdüğü değer verilmiş oluyor.

Eğer lambda expression son parametre ise süslü parantezler fonksiyon parantezi dışında çıkarılarak kullanılması tercih edilir.

Higher order fonksiyon içerisine fonksiyon referancı ile baska bir fonksiyon verilebilir.

Bunun için lambda expression’ın aldığı değer sayısı, aldığı değer tipi ve dönüş değeri referans ile verilecek fonksiyon ile aynı olmalıdır.

örnek-1

fun sum(number1: Int, number2: Int, action: (Int) -> Unit) {
action(number1 + number2)
}

fun sumHigher(value: Int) {
println("$value")
}

sum(3,4,::sumHigher)

örnek-2

fun sample1(action: (Int,Float)->String) {
action(3,3f)
}

fun sample2(value1:Int,value2: Float): String {
return ""
}

sample1(::sample2)

örnek-3

fun higherOrder(number1: Int, number2: Int, sum: (Int) -> Unit) {
sum(number1 + number2)
}

higherOrder(3, 4) { sum ->
println(sum) //7
}

örnek-4

fun higherOrder(number1: Int, number2: Int, sum: (Int) -> String) {
val result = sum(number1 + number2)
println(result) //done
}

higherOrder(3, 4) { sum ->
println(sum) //7
"done"
}

--

--