Tango-br
  • Introduction
  • Começando
    • Índice
    • Recado do desenvolvedor
    • O que é a Tango?
    • Por onde começar?
  • Instalação
    • Instalação via NuGet
    • Instalação manual
  • Conceitos
    • Introdução
    • Utilizando comparação de padrões (Pattern Matching)
    • Valores Opcionais
    • Valores "Ou um ou outro" (Either)
    • Saindo do void para o Unit
    • Delegates Func e Action
    • Utilizando operações encadeadas com processos contínuos
    • Currying e Aplicação Parcial
  • Funcional
    • Introdução
    • Currying
    • Aplicação Parcial
    • Extensões
    • Cast Rápido para Delegates
  • Operações
    • Introdução
    • Operações com Booleans
    • Operações com Inteiros
    • Operações com Decimais
    • Operações com Doubles
    • Operações com Strings
  • Tipos
    • Introdução
    • Unit
    • Option<T>
    • Either<TLeft, TRight>
    • Continuation<TFail, TSuccess>
  • Módulos
    • Introdução
    • Option
      • Apply
      • AsEnumerable
      • Bind
      • Count
      • Exists
      • Filter
      • Fold
      • FoldBack
      • Iterate
      • Map
      • OfNullable
      • ToArray
      • ToList
      • ToNullable
    • Either
      • Exists
      • Iterate
      • Fold
      • FoldBack
      • Map
      • Swap
      • ToTuple
    • Continuation
      • AsContinuation
      • Resolve
      • Reject
      • All
    • Collection
      • Append
      • Choose
      • ChunkBySize
      • Collect
      • CompareWith
      • CountBy
      • Concat
      • Distinct
      • Empty
      • Exists
      • Exists2
      • Filter
      • FindIndex
      • Fold
      • Fold2
      • FoldBack
      • FoldBack2
      • ForAll
      • ForAll2
      • ForAll3
      • Head
      • HeadAndTailEnd
      • Range
      • Generate
      • Initialize
      • Iterate
      • Iterate2
      • IterateIndexed
      • IterateIndexed2
      • Map
      • Map2
      • Map3
      • MapIndexed
      • MapIndexed2
      • MapIndexed3
      • Partition
      • Permute
      • Pick
      • Reduce
      • ReduceBack
      • Replicate
      • Scan
      • Scan2
      • ScanBack
      • ScanBack2
      • Tail
      • TryFind
      • TryPick
      • Unzip
      • Unzip3
      • Zip
      • Zip3
  • Extensões
    • Introdução
    • Extensões para Enum
    • Construtor de EqualityComparer
    • Módulos como extensão
Powered by GitBook
On this page
  • Métodos
  • Como Usar

Was this helpful?

  1. Funcional

Extensões

PreviousAplicação ParcialNextCast Rápido para Delegates

Last updated 5 years ago

Was this helpful?

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 e como extensão para os delegates.

Além disso, esta classe adiciona a possibilidade de converter uma Action para um Func que retorne um 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 e .

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!

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);

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

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

Tango.Functional.FunctionExtensions
Currying
PartialApplication
Unit
Currying
PartialApplication
Currying
PartialApplication
Conceitos > Currying e Aplicação Parcial