when

Aplica un callback cuando se cumple un predicado; si no, devuelve el valor sin cambios.

T when<T>(bool Function(T) predicate, T Function(T) callback, T value)

Lección

when(predicate, callback, value) es un único condicional expresado como datos: si predicate(value) es verdadero, el resultado es callback(value); si no, el resultado es el propio value, intacto. Se lee muy bien dentro de un callback de map cuando quieres transformar solo los elementos que lo necesitan y dejar el resto en paz.

La versión de FxTS puede ampliar el tipo de retorno a una unión T | R cuando las ramas no coinciden. Dart no tiene tipos de unión, así que tanto la rama del callback como la de paso directo deben compartir el mismo tipo T; si de verdad necesitas tipos de resultado distintos, recurre a cases, que sí permite que R difiera del tipo de entrada.

Demo 1 · Fundamentos

Demo 2 · Acotar valores en un pipeline

Pruébalo tú

Ejercicio: usa when para duplicar solo los precios positivos, dejando los negativos intactos.

Relacionado: unless — el hermano de when con la condición invertida · cases — varios predicados y un tipo de resultado distinto · not / negate — construir el predicado que le pasas · map — el sitio habitual donde usar when como callback