Either
Un valor que es o bien un fallo Left(L) o bien un acierto
Right(R) — el tipo frontera del sistema de errores tipados.
Lección
Either<L, R> convierte el fallo en parte de la
firma de una función: en lugar de lanzar una excepción (invisible
para el sistema de tipos) o devolver null (que no dice nada
sobre el porqué), devuelves Left(error) o
Right(value). La clase es sealed, así que un
switch sobre ella es exhaustivo — el compilador te recuerda
que trates el caso de fallo.
El conjunto de métodos es el que Arrow 2.x ha depurado:
fold colapsa ambos lados en un único valor,
map/mapLeft transforman uno de los dos lados,
flatMap encadena un paso falible dependiente, y
getOrNull/getOrElse hacen de puente de vuelta al
Dart de siempre. Either está pensado para vivir en la
frontera: dentro de un cómputo, es preferible el
constructor either, donde cada paso
es un r.bind en línea recta en vez de una pirámide de
flatMap.
Demo 1 · Left, Right y switch exhaustivo
Demo 2 · fold, map, mapLeft, flatMap
Demo 3 · dot shorthands (Dart ≥ 3.10)
Either incluye las factorías const
Either.left / Either.right para que los
dot shorthands de Dart 3.10 se resuelvan contra ella: allí donde
el tipo del contexto ya es Either — una posición de retorno,
una rama de una expresión switch, el lado derecho de
== — puedes omitir el nombre del tipo y escribir
.left(error) / .right(value). Son los mismos
objetos que Left(…) / Right(…), solo que
inferidos a partir del contexto.
Pruébalo tú
Las excepciones y los errores tipados se mantienen estrictamente
separados: una excepción lanzada atraviesa el código de errores
tipados sin que nada la toque. Para capturar un throw dentro de un
Either, sé explícito con Either.catching (tipo
de fallo Object) o Either.catchingWith (que
primero convierte la excepción a tu propio tipo de fallo). Ejercicio: haz
que el parseo fallido imprima Left(bad input) en vez de
reventar.
either — construye Eithers con código en línea recta ·
acumulación — recoge todos los fallos, no solo el primero ·
Either × pipelines — rights, lefts, sequence sobre cadenas ·
errores tipados — guía completa