Extensões

Tango.Functional.FunctionExtensions

Esta classe estática contém diversos métodos que funcionam como extensão para os delegates Action e Func. Com isso, é possível utilizar todos os métodos disponíveis nas classes Currying e PartialApplication como extensão para os delegates.

Além disso, esta classe adiciona a possibilidade de converter uma Action para um Func que retorne um Unit e vice-versa.

Métodos

Nome Parâmetros Retorno Descrição
ToFunction this Action action Func<Unit> Converte um delegate Action para um delegate Func, mantendo os mesmos parâmetros e retornando um Unit.
ToFunction this Action<T> action Func<T, Unit> Converte um delegate Action para um delegate Func, mantendo os mesmos parâmetros e retornando um Unit.
ToFunction this Action<T, T2> action Func<T, T2, Unit> Converte um delegate Action para um delegate Func, mantendo os mesmos parâmetros e retornando um Unit.
ToFunction this Action<T, T2, T3> action Func<T, T2, T3, Unit> Converte um delegate Action para um delegate Func, mantendo os mesmos parâmetros e retornando um Unit.
ToFunction this Action<T, T2, T3, T4> action Func<T, T2, T3, T4, Unit> Converte um delegate Action para um delegate Func, mantendo os mesmos parâmetros e retornando um Unit.
ToAction this Func<Unit> function Action Converte um delegate Func que retorne um Unit para um delegate Action, mantendo os mesmos parâmetros.
ToAction this Func<T, Unit> function Action<T> Converte um delegate Func que retorne um Unit para um delegate Action, mantendo os mesmos parâmetros.
ToAction this Func<T, T2, Unit> function Action<T, T2> Converte um delegate Func que retorne um Unit para um delegate Action, mantendo os mesmos parâmetros.
ToAction this Func<T, T2, T3, Unit> function Action<T, T2, T3> Converte um delegate Func que retorne um Unit para um delegate Action, mantendo os mesmos parâmetros.
ToAction this Func<T, T2, T3, T4, Unit> function Action<T, T2, T3, T4> Converte um delegate Func que retorne um Unit para um delegate Action, mantendo os mesmos parâmetros.

Atenção

Esta classe possui mais métodos, mas todos os métodos não listados aqui são apenas sobrecargas para os métodos disponíveis em Currying e PartialApplication.

Estas sobrecargas simplesmente transformam os métodos das classes acima em extensões para os delegates Func e Action.

Como Usar

Diferente das outras classes deste namespace, esta classe pode atuar como extensão para os delegates Func e Action, presentes na linguagem.

Após importar o namespace Tango.Functional você será capaz de realizar estas operações como se elas fossem métodos dos próprios delegates!

Veja o exemplo a seguir:

Action<int> writeNumber = (number) => Console.WriteLine(number);
Func<int, Unit> functionWriteNumber = writeNumber.ToFunction();

Com isso podemos converter um delegate para outro facilmente!

Isso poderá auxiliá-lo na utilização de funções de alta ordem quando o parâmetro necessário for de um delegate diferente do utilizado para encapsular sua função!

As operações de Curry e Aplicação Parcial funcionam de forma bastante similar às descritas nas seções: Currying e PartialApplication, no entanto, através desta classe os métodos podem ser utilizados como extensão.

Veja a função de soma descrita abaixo:

 Func<int, int, int> add = (value, value2) => value + value2;

Podemos realizar tanto o processo de currying quanto de aplicação parcial, conforme código:

 Func<int, int, int> add = 
   (value, value2) => value + value2;

Func<int, Func<int,int>> addCurried = add.Curry();
Func<int,int> addPartialApplied = add.PartialApply(2);

Perceba que os métodos agora podem ser utilizados como se fossem métodos do próprio delegate.

add.Curry();
//ao invés de:
Currying.Curry(add);
//e
add.PartialApply(2);
//ao invés de:
PartialApplication.PartialApply(add,2);

O conceito as técnicas de currying e aplicação parcial, além de mais exemplos podem ser encontrados na seção Conceitos > Currying e Aplicação Parcial.

results matching ""

    No results matching ""