sum

Suma todos los números que produce un pipeline perezoso.

num sum(Iterable<num> iterable) Future<num> sumAsync(FxAsyncIterable<num> iterable) num Fx<num>.sum() // chain (sync) Future<num> FxAsync<num>.sum() // chain (async)

Lección

sum es un operador terminal y uno de los pliegues especializados más simples de la librería: por dentro es literalmente fold(0, (a, b) => a + b, iterable). Como todo operador terminal, llamarlo tira de todo el pipeline perezoso que tiene aguas arriba: puedes montar una cadena elaborada de pasos map/filter y solo pagas por los valores que sum realmente necesita, que son todos.

Como el valor inicial es 0, sumar un iterable vacío da 0: ni error, ni NaN. Eso lo diferencia de sus vecinos min, max y average, cada uno con su propio comportamiento (¡sorprendente!) ante entradas vacías, que conviene conocer.

La forma encadenada está disponible como método de extensión, Fx<num>.sum() / FxAsync<num>.sum(): solo aparece cuando el tipo de elemento de tu cadena se sabe que es num (o int/double, gracias a la covarianza de los genéricos).

Demo 1 · Fundamentos

Demo 2 · Asíncrono

Pruébalo tú

Ejercicio: suma solo los números pares de la lista.

Relacionado: average — la suma dividida entre la cantidad · fold — la forma general que sum especializa · min · max — los otros terminales numéricos