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:

  1. Utilizando Apply<T, TResult>(function) com a function pondendo ou não ser um Option;

  2. 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

Last updated