fold, reduce ve runningFold
Koleksiyon öğelerini fold, reduce ve biriktirme işlevleriyle toplulaştırın.
fold, reduce ve runningFold, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Birleştirme İşlemleri
fold ve indirgeme, bir koleksiyonu tek bir değerde birleştirir. fold bir başlangıç değeri kabul eder; indirgeme ilk öğeyi başlangıç değeri olarak kullanır. runningFold, her ara sonucu döndürür.
Temel fold
fold(seed) { acc, x -> ... }, bir başlangıç değeriyle başlar ve her öğeyi biriktiriciyle birleştirir.
fun main() {
val nums = listOf(1, 2, 3, 4)
val sum = nums.fold(0) { acc, n -> acc + n }
println(sum) // 10
}Sayısal Olmayan Başlangıç Değeriyle fold
Başlangıç değeri herhangi bir türde olabilir. fold, List<T> türünü tamamen farklı bir sonuca dönüştürebilir.
fun main() {
val words = listOf("hello", "world", "kotlin")
val joined = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc, $w" }
println(joined) // hello, world, kotlin
}Temel İndirgeme
reduce, ilk öğeyi başlangıç değeri olarak kullanır. Lambda, her seferinde iki öğeyi birleştirir.
fun main() {
val nums = listOf(2, 3, 4, 5)
val product = nums.reduce { acc, n -> acc * n }
println(product) // 120
}Boş Listelerde reduce Hata Verir
reduce en az bir öğe gerektirir. Güvenlik için reduceOrNull kullanın veya başlangıç değeriyle fold kullanmayı tercih edin.
fun main() {
val empty: List<Int> = emptyList()
println(empty.reduceOrNull { a, b -> a + b }) // null
println(empty.fold(0) { a, b -> a + b }) // 0
}fold ve İndirgeme
Farklı bir sonuç türüne veya varsayılan bir değere ihtiyacınız varsa fold kullanın. Sonuç türü öğe türüyle aynıysa ve listede en az bir öğe varsa indirgeme kullanın.
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.reduce { a, b -> a + b }) // 10
println(nums.fold(100) { a, b -> a + b }) // 110 (seed 100)
}runningFold
runningFold, her ara biriktirici değerinin listesini döndürür; birikimli toplamlar ve adım adım işlem zincirleri için kullanışlıdır.
fun main() {
val nums = listOf(1, 2, 3, 4)
val running = nums.runningFold(0) { acc, n -> acc + n }
println(running) // [0, 1, 3, 6, 10]
}Birikimli Toplam Örneği
Yaygın bir analiz kalıbı: aydan aya birikimli toplam.
fun main() {
val monthly = listOf(100, 150, 80, 200, 120)
val cumulative = monthly.runningReduce { acc, x -> acc + x }
println(cumulative) // [100, 250, 330, 530, 650]
}fold ile Harita Oluşturma
Değiştirilebilir bir haritada biriktirerek bir listeyi Map türüne dönüştürün.
fun main() {
val words = listOf("apple", "banana", "cherry")
val byLetter = words.fold(mutableMapOf<Char, MutableList<String>>()) { acc, w ->
val key = w[0]
acc.getOrPut(key) { mutableListOf() }.add(w)
acc
}
println(byLetter)
}fold ile Liste Oluşturma
fold, bir diziyi yapılandırılmış bir listeye dönüştürebilir; örneğin ardışık tekrarları gruplayabilir.
fun main() {
val nums = listOf(1, 1, 2, 3, 3, 3, 4)
val grouped = nums.fold(mutableListOf<MutableList<Int>>()) { acc, n ->
if (acc.isEmpty() || acc.last().last() != n) acc.add(mutableListOf(n))
else acc.last().add(n)
acc
}
println(grouped) // [[1, 1], [2], [3, 3, 3], [4]]
}foldIndexed
Her öğeyle birlikte dizini de geçirin; konuma duyarlı birleştirme işlemleri için kullanışlıdır.
fun main() {
val nums = listOf(10, 20, 30)
val weighted = nums.foldIndexed(0) { i, acc, n -> acc + (i + 1) * n }
// 1*10 + 2*20 + 3*30 = 140
println(weighted)
}reduceRight
reduceRight, sağdan sola doğru birleştirme yapar. İşlem değişmeli değilse bu önemlidir (örneğin dize birleştirme sırası).
fun main() {
val words = listOf("a", "b", "c", "d")
val leftToRight = words.reduce { acc, w -> "$acc-$w" }
val rightToLeft = words.reduceRight { w, acc -> "$w-$acc" }
println(leftToRight) // a-b-c-d
println(rightToLeft) // a-b-c-d (same here but operation matters)
}Hızlı Kontrol
Her ara biriktirici değerini içeren bir listeyi hangi işlev döndürür?
Özet
fold, bir başlangıç değeriyle (herhangi bir tür olabilir) birleştirme yapar. İndirgeme, ilk öğeyi başlangıç değeri olarak kullanır (koleksiyon boş olmamalıdır). runningFold / runningReduce, her ara değeri döndürür. Bu işlevleri toplamlar, çarpımlar, harita oluşturma, gruplama ve adım adım dönüşümler için kullanın.
Sıkça Sorulan Sorular
“fold, reduce ve runningFold” dersi ücretsiz mi?
Evet — “fold, reduce ve runningFold” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“fold, reduce ve runningFold” dersinde ne öğreneceğim?
Koleksiyon öğelerini fold, reduce ve biriktirme işlevleriyle toplulaştırın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“fold, reduce ve runningFold” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- map ve flatMap: Her Öğeyi Dönüştürme
- filter, filterNot ve partition
- fold, reduce ve runningFold
- Sequence ile İşlem Hatlarını Zincirleme ve Ara Listelerden Kaçınma