Дарт Фолд против Сокращения

В чем разница между fold и уменьшать в Dart и когда я буду использовать один, а не другой? Кажется, что они делают то же самое в соответствии с документами.

Уменьшает коллекцию до одного значения путем итеративного объединения каждого элемент коллекции с существующим значением с использованием предоставленного функция.

Ответ 1

reduce можно использовать только в непустых коллекциях с функциями, возвращающими тот же тип, что и типы, содержащиеся в коллекции.

fold можно использовать во всех случаях.

Например, вы не можете вычислить сумму длины всех строк в списке с помощью reduce. Вы должны использовать fold:

final list = ['a', 'bb', 'ccc'];
// compute the sum of all length
list.fold(0, (t, e) => t + e.length); // result is 6

Кстати, list.reduce(f) можно рассматривать как ярлык для list.skip(1).fold(list.first, f).