CodeGym /Cursos /C# SELF /Operador ternário em C#: condições enxutas e pegadinhas

Operador ternário em C#: condições enxutas e pegadinhas

C# SELF
Nível 3, Lição 5
Disponível

1. Expressões vs Comandos

Em C# todo comando se divide em duas categorias: comandos (Statement) e expressões (Expression). Normalmente a galera fala que comando é o que executa, e expressão é o que calcula. Mas o mais importante não é isso.

O que importa mesmo: expressão sempre retorna um resultado. Esse resultado tem um tipo, e tu pode jogar ele numa variável ou usar em outra expressão.

Exemplos:

Código Observações
int x;
Comando
(a < 10)
Expressão, tipo bool
i++;
Expressão, tipo igual ao tipo da variável i
x = 5;
Expressão, tipo igual ao tipo da variável x

E o que isso muda pra gente?

Muitos comandos na real são expressões (eles têm resultado). Por exemplo, esse código funciona:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
Tu pode ignorar o resultado da expressão se não precisar dele:
Console.ReadLine();	// ignorando o resultado da entrada

Isso é massa quando a expressão faz algo útil além de retornar valor (tipo mostrar na tela ou ler input).

2. Operador ternário

Em C# tem um operador ternário (de três partes) especial. Ele é tipo uma versão resumida do if–else:


Condição ? Expressão1 : Expressão2;
Sintaxe do operador ternário

Se Condição for true, ele calcula Expressão1, senão — Expressão2. Depois da condição vem ?, e as duas expressões são separadas por :.

A diferença principal do if-else: operador ternário é uma expressão, tu pode jogar o resultado numa variável ou usar em outras expressões.

Por exemplo, bora calcular o mínimo de dois números:

int a = 2;
int b = 3;
int min = a < b ?  a :  b;

Ou atribuir valores diferentes pra variável dependendo da condição:


int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;
if-else clássico

Mesma coisa com operador ternário:


int age = 25;
int money = age > 30 ? 100 : 50;
Operador ternário — versão compacta

O que é melhor usar: if-else ou operador ternário? Em performance é igual, mas operador ternário é top pra condições curtinhas. Se o código não cabe numa linha — melhor usar if-else pra ficar mais legível.

3. Pegadinhas do uso

Tipos dos valores
Os dois lados do operador ternário (<valor_se_true> e <valor_se_false>) têm que ser do mesmo tipo ou compatíveis (tipo, os dois string ou os dois int).

Funciona:

int a = 10, b = 20;
int max = (a > b) ? a : b; // os dois lados são int

Erro de compilação:

int a = 10, b = 20;
// string e int não batem
string result = (a > b) ? "maior" : 0; // Erro de compilação

Jeito certo:

int a = 10, b = 20;
string result = (a > b) ? "maior" : "menor ou igual";

Exemplo: trabalhando com números

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. Encaixando o operador ternário no app

Bora fazer um appzinho de diálogo: além do oi, o programa vai falar quantos anos tu vai ter no ano que vem e dizer se tu vai ser maior de idade.

Console.Write("Digite seu nome: ");
string name = Console.ReadLine();

Console.Write("Digite sua idade: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "maior de idade" : "menor de idade";

Console.WriteLine($"Oi, {name}! Ano que vem você vai ter {nextYear}. Você vai ser {status}.");

Explicando os detalhes:

  • A variável status é calculada com operador ternário: se a idade no ano que vem for pelo menos 18, então o usuário vai ser maior de idade (ou continuar sendo).
  • O operador ternário encaixa fácil até em strings (tipo usando interpolação $"").

5. Ternários aninhados — cuidado aí!

Dá pra colocar um operador ternário dentro do outro (em cada lado pode ter outro ternário). Mas... isso costuma dar nó na cabeça, principalmente pra quem for ler teu código depois (até tu mesmo daqui uns dias).

Exemplo: definindo categoria pela idade

string category = (age < 7) ? "pré-escolar" :
                  (age < 18) ? "escolar" :
                  (age < 65) ? "adulto" : "aposentado";

Tabela de decisão:

Idade Condição Resultado
< 7 age < 7 pré-escolar
7–17 age < 18 escolar
18–64 age < 65 adulto
65 ou mais senão aposentado

Esse código ainda dá pra ler, mas se a lógica ficar mais treta — melhor usar if-else if-else.

6. Dica: operador ternário e tipo bool

Às vezes aparece esse tipo de código:

bool adult = (age >= 18) ? true : false;

Mas isso é desnecessário. A expressão (age >= 18) já retorna bool. Então pode ser só:

bool adult = (age >= 18);
2
Tarefa
C# SELF, nível 3, lição 5
Bloqueado
Uso simples do operador ternário
Uso simples do operador ternário
2
Tarefa
C# SELF, nível 3, lição 5
Bloqueado
Categoria de idade
Categoria de idade
1
Pesquisa/teste
Operador condicional, nível 3, lição 5
Indisponível
Operador condicional
Operador condicional
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION