fold ve reduce
- Dart kursu
- Orta seviye
- Ders 49/116
- 5 dk
fold ve reduce ile toplu hesap öğrenirsin.
fold ve reduce
fold ve reduce bir koleksiyonu tek bir değere indirir. Toplam, çarpım, en büyük gibi hesaplamalar için kullanılırlar. İkisi de her elemanı sırayla biriktirir.
reduce özgün başlangıç değeri almaz; ilk elemanı başlangıç sayar. fold ise bir başlangıç değeri alır; boş koleksiyonda da güvenlidir.
Örnek: var toplam = [1, 2, 3, 4].fold(0, (acc, n) => acc + n);. Burada 0 başlangıç, acc biriken değer, n sıradaki eleman. Sonuç: 10.
reduce ile çarpım
reduce başlangıç değeri almaz. İlk eleman başlangıç kabul edilir ve ikinciden başlanarak biriktirilir. Boş koleksiyonda reduce hata fırlatır.
Örnek: var carpim = [1, 2, 3, 4].reduce((a, b) => a * b);. Burada a biriken, b sıradaki. İşlem: 1*2=2, 2*3=6, 6*4=24. Sonuç: 24.
fold daha güvenlidir çünkü başlangıç değeri verirsin. reduce ise daha kısa yazılır; boş olmayan koleksiyonlarda tercih edilir.
Uygulama Toplam ve çarpım hesapla
[1, 2, 3, 4] listesi üzerinde fold(0, (acc, n) => acc + n) ile toplamı hesapla ve yazdır. Aynı liste üzerinde reduce((a, b) => a * b) ile çarpımı hesapla ve yazdır.
Başlangıç kodu
void main() {
var sayilar = [1, 2, 3, 4];
// .fold ile toplamı, .reduce ile çarpımı hesapla, sonuçları yazdır
}Örnek çözüm
void main() {
var sayilar = [1, 2, 3, 4];
var toplam = sayilar.fold(0, (acc, n) => acc + n);
var carpim = sayilar.reduce((a, b) => a * b);
print(toplam);
print(carpim);
}Beklenen çıktı
10 24
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 fold parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
0 |
Başlangıç değeri |
acc |
Biriken değer |
n |
Sıradaki eleman |
acc + n |
Birikim işlemi |
2 fold ve reduce arasındaki fark nedir?
- fold başlangıç değeri alır, reduce almaz Doğru cevap
- reduce daha hızlıdır
- fold yalnızca liste için çalışır
- İkisi tamamen aynıdır
Açıklama: fold başlangıç değeri alır, reduce ilk elemanı başlangıç sayar.
3 fold çağrısı
var sayilar = [1, 2, 3, 4];
var toplam = sayilar.____(0, (acc, n) => acc + n);
var sayilar = [1, 2, 3, 4];
var toplam = sayilar.fold(0, (acc, n) => acc + n);
Açıklama: fold başlangıç değeriyle indirir.