Os operadores condicionais que vamos explicar aqui não são as estruturas if-else. Estamos falando do operador ternário e do operador de coalescência nula.
Dois tipos de operadores condicionais
O Dart disponibiliza dois operadores condicionais compactos para substituir blocos longos de if-else. Em uma única linha você consegue fazer a verificação de condição, atribuição ou retorno de valor.
- Operador ternário condicional:
condition ? expr1 : expr2 - Operador de coalescência nula:
expr1 ?? expr2
Operador ternário condition ? expr1 : expr2
Sintaxe
Condição booleana ? Expressão quando verdadeiro : Expressão quando falso
Se o resultado de condition for true, ele retorna expr1; se for false, retorna expr2.
Essa condition retorna um valor booleano, e usamos esse valor booleano para escolher um dos dois valores para atribuir ou retornar.
Exemplo:
void main() {
bool isRain = true;
// Atribuição com expressão ternária
var result = isRain ? 'Está chovendo' : 'Não está chovendo';
print(result); // Está chovendo
isRain = false;
result = isRain ? 'Está chovendo' : 'Não está chovendo';
print(result); // Não está chovendo
}Code language: Dart (dart)
Resultado da execução
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Está chovendo
Não está chovendoCode language: CSS (css)
Se você já aprendeu a usar if-else, pode reescrever o código dessa forma:
void main() {
bool isRain = true;
String result;
if (isRain) {
result = 'Está chovendo';
} else {
result = 'Não está chovendo';
}
print(result);//Está chovendo
}Code language: Dart (dart)
Operador de coalescência nula
Verifica se uma variável é nula e permite definir um valor padrão de forma rápida.
Sintaxe expr1 ?? expr2
Expressão anulável ?? Valor padrão
- Se
expr1não for nulo, retorna diretamenteexpr1; - Se
expr1fornull, retornaexpr2
Exemplo oficial
void main() {
// O parâmetro é uma string anulável String?
String playerName(String? name) => name ?? 'Guest';
print(playerName("Tom")); // Tom
print(playerName(null)); // Guest
}Code language: JavaScript (javascript)
Criamos a função playerName para receber o nome do jogador, com parâmetro de texto que aceita null. O operador ?? define um valor inicial: caso o parâmetro name venha como null, o retorno padrão será Guest.
Complemento
O trecho playerName é uma função de seta, uma forma curta de declarar funções. Vamos estudar isso depois, ela tem o mesmo comportamento do código abaixo:
String playerName(String? name) {
return name ?? 'Guest';
}Code language: Dart (dart)
Comparação de formas equivalentes
Versão com operador ternário
String playerName(String? name) => name != null ? name : 'Guest';Code language: JavaScript (javascript)
Estrutura completa com if-else
String playerName(String? name) {
if (name != null) {
return name;
} else {
return 'Guest';
}
}