min
El número más pequeño del pipeline, con las rarezas exactas de FxTS ante entradas vacías y NaN.
num min(Iterable<num> iterable)
Future<num> minAsync(FxAsyncIterable<num> iterable)
num Fx<num>.min() // chain (sync)
Future<num> FxAsync<num>.min() // chain (async)
Lección
min es un fold terminal, solo numérico: internamente es
fold(double.infinity, ..., iterable), y compara cada elemento
contra un mínimo acumulado que empieza en +infinity.
Merece la pena memorizar dos comportamientos, porque sorprenden a quien viene de una API «segura» y están portados fielmente desde FxTS:
-
Un iterable vacío devuelve
double.infinity: ninull, ni un error. Es simplemente el valor inicial del fold cuando nada llega a superarlo. -
Un solo
NaNen cualquier punto del iterable envenena todo el resultado y lo convierte enNaN: toda comparación contraNaNes falsa, así que en cuanto pasa a ser el mínimo acumulado (o aparece como candidato), se queda enNaNpara siempre.
Si lo que necesitas es la semántica «el más pequeño, o null si está vacío»,
comprueba tú mismo result.isInfinite, o recurre a
find /
reduce con tu propio comparador.
Demo 1 · Fundamentos, vacío y NaN
Demo 2 · Asíncrono
Pruébalo tú
Ejercicio: encuentra el precio más barato entre los productos.