CodeBlanks Logo Icon CodeBlanks

fold ve reduce

fold ve reduce ile toplu hesap öğrenirsin.

fold ve reduce

fold bir başlangıç değeriyle birleşmeli bir işlem yapar. Örnek: numbers.fold(0) { acc, n -> acc + n } toplamı hesaplar. acc birikim, n aktif elemandır. Başlangıç değeri listenin boş olması durumunu güvenli kılar.

reduce ise başlangıç değeri vermez; ilk eleman başlangıç kabul edilir. Örnek: numbers.reduce { a, b -> a + b }. Boş listede reduce hata fırlatır çünkü başlangıç elemanı yoktur. Toplam gibi mutlaka bir başlangıç gerektiren işlemlerde fold tercih edilir.

fold ve reduce farkı

fold ve reduce arasındaki temel fark başlangıç değeridir. fold açık bir başlangıç alır; bu değer listenin türünden farklı olabilir. Örnek: numbers.fold("") { acc, n -> acc + n.toString() } sayıları dizgeye birleştirir.

reduce başlangıç olarak ilk elemanı kullanır; bu yüzden sonuç türü liste türüyle aynı olmak zorundadır. Boş listede reduce bir NoSuchElementException fırlatır. Güvenli toplam için fold(0), ilk eleman gerekliyorsa reduce seçilir.

Uygulama fold ile topla, reduce ile en büyük

val numbers = listOf(3, 1, 4, 1, 5) tanımla. fold(0) { acc, n -> acc + n } ile toplamı hesapla. reduce { a, b -> if (a > b) a else b } ile en büyük elemanı bul. Sonucu println("Toplam: $sum, En büyük: $max") biçiminde yazdır.

Başlangıç kodu

Main.kt
fun main() {
    val numbers = listOf(3, 1, 4, 1, 5)
    // fold ile toplamı, reduce ile en büyüğü bul ve yazdır
}

Örnek çözüm

Main.kt
fun main() {
    val numbers = listOf(3, 1, 4, 1, 5)
    val sum = numbers.fold(0) { acc, n -> acc + n }
    val max = numbers.reduce { a, b -> if (a > b) a else b }
    println("Toplam: $sum, En büyük: $max")
}

Beklenen çıktı

Toplam: 14, En büyük: 5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 fold çağrısını tamamla

Soru
numbers.____(0) { acc, n -> acc + n }
Cevap
numbers.fold(0) { acc, n -> acc + n }

Açıklama: fold(0) toplamı başlangıç sıfırla hesaplar.

2 fold ve reduce kavramlarını eşle

Kavram Anlamı
fold(0) Başlangıç değeri var
reduce İlk eleman başlangıç
acc Birikim
{ acc, n -> } İşlem

3 Boş listede reduce ne yapar?

  • Exception fırlatır Doğru cevap
  • Sıfır döndürür
  • Null döndürür
  • Boş liste döndürür

Açıklama: reduce boş listede NoSuchElementException fırlatır.

Orta seviye bölümündeki tüm dersler