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

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.

Last updated