scan
- Kotlin kursu
- İleri seviye
- Ders 58/83
- 5 dk
scan ile ara sonuçları öğrenirsin.
scan ile çalışan accumulate
scan, fold'a benzer ama her ara sonucu bir listede biriktirir. Bu, ara durumları görmek için kullanışlıdır.
Örnek: listOf(1, 2, 3).scan(0) { acc, n -> acc + n } ifadesi [0, 1, 3, 6] döndürür. İlk değer listede yer alır; her öğe için ara toplam eklenir. fold yalnızca sonucu verirken, scan tüm geçişi gösterir. Bu kalıp, çalışan toplam ve kümülatif hesaplar için idealdir.
scan ve fold farkı
fold yalnızca son değeri döndürür. scan ise başlangıç değeri dahil tüm ara değerleri liste olarak döndürür. Bu yüzden scan çıktısı her zaman giriş boyutundan bir fazladır.
Örnek: listOf(1, 2, 3).fold(0) { acc, n -> acc + n } sonucu 6. Aynı işlemi scan ile yaparsan [0, 1, 3, 6] alırsın. scan, ilerlemeyi izlemek istediğinde tercih edilir.
Uygulama Çalışan toplam hesapla
main içinde listOf(1, 2, 3, 4).scan(0) { acc, n -> acc + n } sonucunu bir değişkene ata ve println ile yazdır.
Başlangıç kodu
// main'de 1..4 listesinin çalışan toplamını scan ile hesapla
// sonucu println ile yazdırÖrnek çözüm
fun main() {
val running = listOf(1, 2, 3, 4).scan(0) { acc, n ->
acc + n
}
println(running)
}Beklenen çıktı
[0, 1, 3, 6, 10]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 listOf(1, 2, 3).scan(0) { acc, n -> acc + n } çağrısı ne döndürür?
- [0, 1, 3, 6] Doğru cevap
- [1, 3, 6]
- [0, 1, 2, 3]
- [6]
Açıklama: scan başlangıç değeri dahil tüm ara toplamları verir.
2 scan parçalarını eşle
| Kavram | Anlamı |
|---|---|
scan(0) |
Başlangıç değeri |
{ acc, n -> } |
Lambda |
[0, 1, 3, 6] |
Ara sonuçlar |
fold(0) |
Yalnızca son değer |
3 scan çağrısını tamamla
val running = listOf(1, 2, 3).____(0) { acc, n -> acc + n }
val running = listOf(1, 2, 3).scan(0) { acc, n -> acc + n }
Açıklama: scan başlangıç değeriyle ara sonuçları listeler.