fold ve reduce
- Kotlin kursu
- Orta seviye
- Ders 65/116
- 5 dk
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
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
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
numbers.____(0) { acc, n -> acc + n }
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.