Ir para o conteúdo

Operadores Condicionais

Existem três tipos principais de operadores condicionais em C#:

1.  **Operador Condicional Ternário (`?:`)**
2.  **Operador de Coalescência Nula (`??`)**
3.  **Operadores Lógicos Condicionais (`&&` e `||`)**

1. Operador Condicional Ternário (?:)

Este é um atalho para uma instrução `if-else`. Ele avalia uma expressão booleana e retorna um de dois valores, dependendo se a expressão é verdadeira ou falsa. Sua sintaxe é:

```csharp
condicao ? valorSeVerdadeiro : valorSeFalso;
```

**Exemplo:**

```csharp
int idade = 20;
string status = (idade >= 18) ? "Maior de idade" : "Menor de idade";
// A variável 'status' será "Maior de idade"
```

2. Operador de Coalescência Nula (??)

Este operador fornece um valor padrão para tipos de valor e referência que podem ser nulos. Se o operando da esquerda não for nulo, ele retorna esse valor. Caso contrário, ele retorna o operando da direita. Sua sintaxe é:

```csharp
expressaoQuePodeSerNula ?? valorPadrao;
```

**Exemplo:**

```csharp
string nome = ObterNomeDeUsuario(); // Suponha que este método retorne null às vezes
string nomeExibicao = nome ?? "Usuário Anônimo";
// Se 'nome' for null, a variável 'nomeExibicao' será "Usuário Anônimo".
```

Também existe o **Operador de Atribuição de Coalescência Nula (`??=`)**, disponível a partir do C\# 8.0. Ele atribui o valor do operando da direita ao operando da esquerda somente se o operando da esquerda for nulo.

**Exemplo:**

```csharp
List<string> lista = null;
lista ??= new List<string>(); // Atribui uma nova lista, pois 'lista' é null
lista.Add("Item A");
```

3. Operadores Lógicos Condicionais (&& e ||)

Esses operadores são usados para combinar expressões booleanas e são frequentemente chamados de "short-circuiting" ou "de curto-circuito" porque não avaliam o segundo operando se o resultado já puder ser determinado a partir do primeiro.

* **`&&` (AND Condicional):** Retorna `true` apenas se ambos os operandos forem `true`. Se o primeiro operando for `false`, o segundo não é avaliado.
* **`||` (OR Condicional):** Retorna `true` se pelo menos um dos operandos for `true`. Se o primeiro operando for `true`, o segundo não é avaliado.

**Exemplo com `&&`:**

```csharp
// Se 'usuario' for null, a segunda condição (usuario.IsAdmin) não será avaliada,
// evitando uma exceção NullReferenceException.
if (usuario != null && usuario.IsAdmin)
{
    // ...
}
```

**Exemplo com `||`:**

```csharp
// Se a 'idade' for 18, a segunda condição (cargo == "Gerente") não será avaliada.
if (idade >= 18 || cargo == "Gerente")
{
    // ...
}
```