> 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/modulos/either/iterate.md).

# Iterate

Aplica uma função ao valor `Either<TLeft, TRight>` de acordo com eu estado.

| Parâmetros                                                                                                      | Retorno |
| --------------------------------------------------------------------------------------------------------------- | ------- |
| <p>Action\<TRight> actionWhenRight</p><p>Action\<TRight> actionWhenLeft</p><p>Either\<TLeft, TRight> either</p> | void    |

## Como usar

Esta função é uma alternativa ao `Map` para funções que não produzem nenhum resultado. Por não retornar um valor, esta função bloqueia encadeamentos após sua execução.

&#x20;**Quando o valor Either está no estado IsRight**&#x20;

```csharp
Either<string, int> either = 10;
either.Iterate(
    right => Console.WriteLine(right.ToString()),
    left => Console.WriteLine($"Hello {left}"));

//"10"
```

&#x20;**Quando o valor Either está no estado IsLeft**&#x20;

```csharp
Either<string, int> either = " World";
either.Iterate(
    right => Console.WriteLine(right.ToString()),
    left => Console.WriteLine($"Hello {left}"));

//"Hello World"
```

&#x20;**Abordagens para apenas um dos lados**

Você pode utilizar os métodos `IterateLeft` e `IterateRight` para obter o mesmo resultado, mas desta vez aplicando a função em somente um dos valores.

Sempre que estas funções forem aplicados para valores `Either` que não estão do mesmo tipo que a função de avaliação será realizada uma instrução para gerar um novo `Unit` (não produzir resultados).

&#x20;**IterateLeft Quando o valor Either está no estado IsRight**&#x20;

```csharp
Either<string, int> either = 10;
either.IterateLeft(left => Console.WriteLine($"Hello {left}"));
//
```

&#x20;**IterateLeft Quando o valor Either está no estado IsLeft**&#x20;

```csharp
Either<string, int> either = " World";
either.IterateLeft(
left => Console.WriteLine($"Hello {left}"));
//"Hello World"
```
