Fold ve recursion
- Kotlin kursu
- İleri seviye
- Ders 52/83
- 5 dk
fold ve özyineleme ile fonksiyonel desen öğrenirsin.
fold ile accumulate
fold, bir koleksiyonu bir başlangıç değeriyle accumulator'a dönüştürür. Her öğe için bir lambda çağrılır; lambda accumulator'ı günceller.
Örnek: val sum = listOf(1, 2, 3, 4).fold(0) { acc, n -> acc + n }. Bu, 0 + 1 + 2 + 3 + 4 = 10 sonucunu verir. fold, listeyi tek bir değere indirger; reduce'dan farkı bir başlangıç değeri almasıdır. Boş liste için reduce hata verirken fold başlangıç değerini döndürür.
Recursion ile faktöriyel
Recursion, bir fonksiyonun kendini çağırmasıdır. Fonksiyonel programlamada döngüler yerine sık kullanılır. Her recursif çağrı bir temel duruma (base case) yaklaşmalıdır.
Örnek: fun fact(n: Int): Long { if (n <= 1) return 1; return n * fact(n - 1) }. n <= 1 temel durumdur. fact(5), 5 * 4 * 3 * 2 * 1 = 120 döndürür. Derin recursif çağrılar stack taşmasına neden olabilir; bu yüzden tailrec kullanılır.
Uygulama fold ile liste toplamı
main içinde listOf(1, 2, 3, 4, 5).fold(0) { acc, n -> acc + n } sonucunu bir değişkene ata ve println ile yazdır.
Başlangıç kodu
// main'de 1..5 listesini fold ile topla
// sonucu println ile yazdırÖrnek çözüm
fun main() {
val sum = listOf(1, 2, 3, 4, 5).fold(0) { acc, n ->
acc + n
}
println(sum)
}Beklenen çıktı
15
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 fold ve reduce arasındaki temel fark nedir?
- fold sadece Int ile çalışır
- reduce daha hızlıdır
- fold bir başlangıç değeri alır Doğru cevap
- fold yan etkili değildir
Açıklama: fold başlangıç değeri alır; reduce almaz.
2 fold ve recursion parçalarını eşle
| Kavram | Anlamı |
|---|---|
fold(0) { acc, n -> } |
Accumulator |
{ acc, n -> acc + n } |
Lambda |
if (n <= 1) return 1 |
Temel durum |
fact(n - 1) |
Recursif çağrı |
3 fold çağrısını tamamla
val sum = listOf(1, 2, 3).____(0) { acc, n -> acc + n }
val sum = listOf(1, 2, 3).fold(0) { acc, n -> acc + n }
Açıklama: fold başlangıç değeriyle accumulator döndürür.