Cast Rápido para Delegates

Tango.Functional.QuickDelegateCast

Esta classe estática contém métodos para transformar uma função nomeada em seu respectivo delegate: Func ou Action.

Desta forma é possível utilizar as extensões para Curry e Aplicação Parcial mais facilmente.

Métodos

Nome Parâmetros Retorno Descrição
F Func<TResult> function Func<TResult> Retorna a função enviada por parâmetro.
F Func<T, TResult> function Func<T, TResult> Retorna a função enviada por parâmetro.
F Func<T, T2, TResult> function Func<T, T2, TResult> Retorna a função enviada por parâmetro.
F Func<T, T2, T3, TResult> function Func<T, T2, T3, TResult> Retorna a função enviada por parâmetro.
F Func<T, T2, TResult> function Func<T, T2, TResult> Retorna a função enviada por parâmetro.
A Action function Action Retorna a função enviada por parâmetro.
A Action<T> function Action<T> Retorna a função enviada por parâmetro.
A Action<T, T2> function Action<T, T2> Retorna a função enviada por parâmetro.
A Action<T, T2, T3> function Action<T, T2, T3> Retorna a função enviada por parâmetro.
A Action<T, T2, T3, T4> function Action<T, T2, T3, T4> Retorna a função enviada por parâmetro.

Como Usar

As diversas sobrecargas disponíveis podem ser utilizadas para transformar uma função nomeada em um delegate.

Infelizmente, por conta de uma limitação na linguagem não é possível tratar uma função nomeada diretamente como um delegate, conforme exemplo:

int SampleAdd(int value1, int value2)
    => value1 + value2;

SampleAdd.Curry();
SampleAdd.PartialApply(1);

A tentativa de executar os métodos Curry e PartialApply irão causar erro de compilação, notificando que SampleAdd é um método e não pode ser utilizado neste contexto.

Para fazer isso precisamos adicionar uma instrução de conversão para o delegate.

Func<int, int, int> sampleAddAsDelegate = SampleAdd;

sampleAddAsDelegate.Curry();
sampleAddAsDelegate.PartialApply(1);

Através desta classe é possível realizar a conversão inline, sem termos de criar instruções adicionais.

Para fazer isso você precisa seguir os seguintes passos:

  1. Adicionar uma instrução using static Tango.Functional.QuickDelegateCast, para realizar a importação estática do conversor;

  2. Utilizar a função correspondente descrita na subseção Métodos.

using static Tango.Functional.QuickDelegateCast;

int SampleAdd(int value1, int value2)
    => value1 + value2;

F<int, int, int>(SampleAdd).Curry();
F<int, int, int>(SampleAdd).PartialApply(1);

Através da sintaxe F() e A() é possível converter uma função para seu respectivo delegate e com isso, facilitar o processo de Currying e Aplicação Parcial.

O conceito para Currying e demais exemplos podem ser encontrados na seção Conceitos > Currying e Aplicação Parcial.

results matching ""

    No results matching ""