Extensões
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
ePartialApplication
.Estas sobrecargas simplesmente transformam os métodos das classes acima em extensões para os delegates
Func
eAction
.
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.