> For the complete documentation index, see [llms.txt](https://gabriel-schade-cardoso.gitbook.io/tango-br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gabriel-schade-cardoso.gitbook.io/tango-br/funcional/partialapplication.md).

# Aplicação Parcial

> [`Tango.Functional.PartialApplication`](https://github.com/gabrielschade/Tango/blob/master/Tango/Tango/Functional/PartialApplication.cs)

Esta classe *estática* contém diversas sobrecargas para realizar a aplicação parcial em uma função. Cada uma das sobrecargas espera uma função com diferentes quantidades de parâmetros, contendo ou não um retorno.

## Métodos

| Nome         | Parâmetros                                                                                                                  | Retorno                    | Descrição                                                                               |
| ------------ | --------------------------------------------------------------------------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------- |
| PartialApply | <p>Func\<T, TResult> function</p><p>T parameter</p>                                                                         | Func\<TResult>             | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, TResult> function</p><p>T parameter</p><p>T2 parameter2</p>                                                 | Func\<TResult>             | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, TResult> function</p><p>T parameter</p>                                                                     | Func\<T2,TResult>          | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, TResult> function</p><p>T parameter</p><p>T2 parameter2</p><p>T3 parameter3</p>                         | Func\<TResult>             | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, TResult> function</p><p>T parameter</p><p>T2 parameter2</p>                                             | Func\<T3, TResult>         | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, TResult> function</p><p>T parameter</p>                                                                 | Func\<T2, T3, TResult>     | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, T4, TResult> function</p><p>T parameter</p><p>T2 parameter2</p><p>T3 parameter3</p><p>T4 parameter4</p> | Func\<TResult>             | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, T4, TResult> function</p><p>T parameter</p><p>T2 parameter2</p><p>T3 parameter3</p>                     | Func\<T4, TResult>         | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, T4, TResult> function</p><p>T parameter</p><p>T2 parameter2</p>                                         | Func\<T3, T4, TResult>     | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Func\<T, T2, T3, T4, TResult> function</p><p>T parameter</p>                                                             | Func\<T2, T3, T4, TResult> | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T> action</p><p>T parameter</p>                                                                                  | Action                     | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2> action</p><p>T parameter</p><p>T2 parameter2</p>                                                          | Action                     | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2> action</p><p>T parameter</p>                                                                              | Action\<T2>                | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3> action</p><p>T parameter</p><p>T2 parameter2</p><p>T3 parameter3</p>                                  | Action                     | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3> action</p><p>T parameter</p><p>T2 parameter2</p>                                                      | Action\<T3>                | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3> action</p><p>T parameter</p>                                                                          | Action\<T2, T3>            | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3, T4> function</p><p>T parameter</p><p>T2 parameter2</p><p>T3 parameter3</p><p>T4 parameter4</p>        | Action                     | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3, T4> function</p><p>T parameter</p><p>T2 parameter2</p><p>T3 parameter3</p>                            | Action\<T4>                | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3, T4> function</p><p>T parameter</p><p>T2 parameter2</p>                                                | Action\<T3, T4>            | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |
| PartialApply | <p>Action\<T, T2, T3, T4> function</p><p>T parameter</p>                                                                    | Action\<T2, T3, T4>        | Cria uma nova função a partir de uma aplicação parcial à função informada no parâmetro. |

## Como Usar

Assim como no processo de Currying, as diversas sobrecargas disponíveis podem ser utilizadas para criar novas funções a partir de funções existentes.

Neste exemplo vamos considerar a função `add` como uma função que realiza a soma de dois números:

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

Ao aplicarmos a função `PartialApply` receberemos como retorno uma nova função, esta função esperará o último parâmetro da soma e retornará o resultado da soma.

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

Func<int, int> addPartial = PartialApplication.PartialApply(add, 2);
int partialResult = addPartial(3);
```

Diferente do Currying, ao realizarmos a aplicação parcial precisamos informar um ou mais parâmetros da função e o retorno sempre será uma função que espera todos os parâmetros restantes e retorna o resultado da função principal.

O conceito para Aplicação Parcial e demais exemplos podem ser encontrados na seção [Conceitos > Currying e Aplicação Parcial](https://github.com/gabrielschade/tango-br/tree/973dafe9d6a8dbad594ebb5c6d71c46ff5727a5a/Concepts/Currying%20and%20Partial%20Application.html).
