Map
Cria um novo valor Either<TLeft, TRight>
, onde o valor encapsulado é o resultado da função mapping
sobre o valor either
, de acordo com seu estado.
Parâmetros | Retorno |
---|---|
Func<TRight, TRightResult> mappingWhenRight Func<TLeft, TLeftResult> mappingWhenLeft Either<TLeft, TRight> either |
Either<TLeftResult, TRightResult> |
Como usar
Esta função é comumente utilizada para alterar um valor Either
através de uma função, semelhante ao Map
dos valores opcionais.
Esta função utiliza o Match
para extrair o valor do tipo Either<TLeft, TRight>
, aplica a função mappingWhenRight
ou mappingWhenLeft
de acordo com o estado do valor.
Quando o valor Either está no estado IsRight e os tipos são transformados
Either<string, int> either = 10;
Either<int, bool> eitherResult =
either.Map(
right => right % 2 == 0,
left => Convert.ToInt32(left));
//eitherResult.IsRight = true
//eitherResult.Right = true
Quando o valor Either está no estado IsLeft e os tipos são transformados
Either<string, int> either = "25";
Either<int, bool> eitherResult =
either.Map(
right => right % 2 == 0,
left => Convert.ToInt32(left));
//eitherResult.IsLeft = true
//eitherResult.Left = 25
Abordagens para apenas um dos lados
Você pode utilizar os métodos MapLeft
e MapRight
para obter o mesmo resultado, mas desta vez aplicando a função somente em um dos valores.
Sempre que estas funções forem aplicados para valores Either
que não estão do mesmo tipo que a função de avaliação será retornado o próprio valor Either
.
MapRight Quando o valor Either está no estado IsRight
Either<string, int> either = 10;
Either<string, int> eitherResult =
either.MapRight(right => right * 2);
//eitherResult.IsRight = true
//eitherResult.Right = 20
MapRight Quando o valor Either está no estado IsLeft
Either<string, int> either = "Hello World";
Either<string, int> eitherResult = either.MapRight(
right => right * 2);
//eitherResult.IsLeft = true
//eitherResult.Left = "Hello World"