cases
Construye una tabla de despacho de predicado/mapeador, con un valor por defecto opcional.
Lección
cases construye una función de coincidencia a partir de una lista de pares
(predicado, mapeador): prueba cada par en orden y, al primero
cuyo predicado devuelve true, le aplica su mapeador para producir el
resultado. Es el sustituto funcional de una cadena de
if/else if, y compone bien con
map: la función devuelta es una función unaria normal
T -> R que puedes pasar directamente.
Esta forma difiere de FxTS a propósito. El
cases de FxTS es variádico: cada par
[predicate, mapper] se pasa como su propio argumento final, con
una función suelta opcional al final que actúa como valor por defecto, y los genéricos
sobrecargados de TypeScript tipan cada aridad a mano. Dart no tiene ni
genéricos variádicos ni sobrecargas por aridad, así que no hay forma de
aceptar «cualquier número de pares» y conservar una comprobación de tipos
real. La versión de FxDart toma en su lugar una única List de
(predicado, mapeador) en forma de registros
—el tipo tupla de Dart— más un parámetro con nombre orElse
aparte, para que el valor por defecto nunca se confunda con un par más.
Si no coincide nada y no se pasa orElse, cases
recurre a devolver el propio value, lo cual solo compila en el
punto de llamada si T resulta satisfacer también R;
en caso contrario lanza un StateError en tiempo de ejecución.
En la práctica, pasa siempre orElse salvo que tengas la certeza
de que tus predicados son exhaustivos.
Demo 1 · Fundamentos
Demo 2 · Un pipeline de calificaciones
Pruébalo tú
Ejercicio: clasifica cada tamaño como 'small' (<10),
'medium' (<30) o 'large'.
when / unless — un solo predicado, mismo tipo de resultado ·
throwError — un orElse habitual cuando no encontrar coincidencia debe ser fatal ·
always — un orElse constante ·
matches — un predicado que puedes conectar a un caso