> 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/conceitos/either-values.md).

# Valores "Ou um ou outro" (Either)

Os valores *either*, assim como os valores [opcionais](https://github.com/gabrielschade/tango-br/tree/973dafe9d6a8dbad594ebb5c6d71c46ff5727a5a/Concepts/Optional%20Values.html) são uma maneira de representar dados incertos, mas desta vez o estado "Não contendo nada" é substituído por um outro estado que pode conter mais informações úteis.

Os valores *either* limitam o acesso aos dados que ele contém para que o desenvolvedor tenha acesso somente ao dado correto.

Podemos conter um valor *either* que possa armazenar tanto valores inteiros quanto valores booleans, mas somente um de cada vez.

Um valor *either* pode estar em um dos dois estados possíveis:

* Esquerda - Quando contém um valor do tipo à esquerda;
* Direita - Quand contém um valor do tipo à direita.

Por convenção, utiliza-se o estado à direita para representar dados corretos e o estado à esquerda para representar dados incorretos. Semelhante aos estados de valores opcionais, mas neste caso há um valor em ambos os casos.

Esta implementação foi inspirada no tipo [Either](https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Either.html) da linguagem Haskell.

As implementações deste conceito são realizadas em duas etapas: através do **tipo** [Either](https://github.com/gabrielschade/tango-br/tree/973dafe9d6a8dbad594ebb5c6d71c46ff5727a5a/Types/Either/Introduction.html) e do **módulo** [Either](https://github.com/gabrielschade/tango-br/tree/973dafe9d6a8dbad594ebb5c6d71c46ff5727a5a/Modules/Either/Introduction.html).
