Apply
Cria um novo valor opcional onde o valor encapsulado é o resultado da função applying
sobre o valor opcional atual, quando a função e o valor estiverem no estado IsSome
, caso contrário retorna um novo valor opcional no estado IsNone
.
Parâmetros | Retorno |
---|---|
Option<Func<T, TResult>> applying Option<T> option |
Option<TResult> |
Como usar
Esta função é comumente utilizada para alterar um valor opcional através de uma função encapsulada em um segundo valor opcional.
Funciona como uma alternativa ao Map
para situações onde tanto o valor quanto à função estiverem sob o contexto opcional.
É possível utilizar a função Apply
através de duas sintaxes diferentes:
Utilizando
Apply<T, TResult>(function)
com afunction
pondendo ou não ser umOption
;Utilizando
Apply(optionFunction)
, dispensando a necessidade de generics. Mas este caso só é possível se a função estiver sob um contexto opcional.
Explicitando a função opcional
Func<int, int> multiply2 = value => value * 2;
Option<Func<int, int>> optionFunction = multiply2;
Option<int> optionValue = 4;
Option<int> result = optionValue.Apply(optionFunction);
//result.IsSome = true
//result.Some = 8
Utilizando a função fora do contexto opcional
Func<int, int> multiply2 = value => value * 2;
Option<int> optionValue = 4;
Option<int> result = optionValue.Apply<int,int>(multiply2);
//result.IsSome = true
//result.Some = 8
Quando a função estiver no estado IsNone
Option<Func<int, int>> optionFunction =
Option<Func<int, int>>.None();
Option<int> optionValue = 4;
Option<int> result = optionValue.Apply(optionFunction);
//result.IsSome = false
//result.IsNone = true
Quando o valor estiver no estado IsNone
Func<int, int> multiply2 = value => value * 2;
Option<int> optionValue = Option<int>.None();
Option<int> result = optionValue.Apply<int,int>(multiply2);
//result.IsSome = false
//result.IsNone = true