> 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/operacoes/bool.md).

# Operações com Booleans

> [`Tango.CommonOperations.BoolOperations`](https://github.com/gabrielschade/Tango/blob/master/Tango/Tango/Operations/BoolOperations.cs)

Esta classe *estática* contém métodos e propriedades com as operações comuns para trabalhar com valores do tipo `bool`. Todos os membros retornam os `delegates` que realizam a operação descrita.

## Propriedades

| Nome | Tipo                    | Descrição                                            |
| ---- | ----------------------- | ---------------------------------------------------- |
| Not  | Func\<bool, bool>       | Retorna uma função para representar o operador !.    |
| And  | Func\<bool, bool, bool> | Retorna uma função para representar o operador &&.   |
| Or   | Func\<bool, bool, bool> | Retorna uma função para representar o operador \|\|. |

## Métodos

| Nome    | Parâmetros | Retorno           | Descrição                                                                                      |
| ------- | ---------- | ----------------- | ---------------------------------------------------------------------------------------------- |
| AndWith | bool value | Func\<bool, bool> | Retorna uma função parcialmente aplicada à função retornada por And com o parâmetro informado. |
| OrWith  | bool value | Func\<bool, bool> | Retorna uma função parcialmente aplicada à função retornada por Or com o parâmetro informado.  |

## Como Usar

Como as propriedades retornam delegates para representar as operações, é possível utilizá-las como métodos.

&#x20;**Operação Not**

```csharp
bool value = true;
bool result = BooleanOperations.Not(value);

//result= false
```

&#x20;**Operação Or**

```csharp
bool value = true;
bool value2 = false;
bool result= BooleanOperations.Or(value, value2);

//result = true
```

&#x20;**Operação And**

```csharp
bool value = true;
bool value2 = false;
bool result= BooleanOperations.And(value, value2);

//result = false
```

Para os métodos temos uma sintaxe um pouco diferente, isso porque é realizada uma aplicação parcial ao método retornado pela própriedade.

Por conta disso, precisamos executar o método com o primeiro parâmetro, para obtermos um novo método que espera o segundo parâmetro:

&#x20;**Operação OrWith**

```csharp
bool value = true;
bool value2 = false;
Func<bool,bool> orWithPartial = BooleanOperations.OrWith(value);
bool result = orWithPartial(value2);
//result = true
```

Também podemos realizar a chamada de forma concatenada:

```csharp
bool value = true;
bool value2 = false;
bool result = BooleanOperations.OrWith(value)(value2);

//result = true
```

&#x20;**Operação AndWith**

```csharp
bool value = true;
bool value2 = false;
Func<bool,bool> andWithPartial = BooleanOperations.AndWith(value);
bool result = andWithPartial(value2);

//result = false
```

Também podemos realizar a chamada de forma concatenada:

```csharp
bool value = true;
bool value2 = false;
bool result = BooleanOperations.AndWith(value)(value2);

//result = false
```
