Expressões condicionais Dart

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.

  1. Operador ternário condicional: condition ? expr1 : expr2
  2. 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 expr1 não for nulo, retorna diretamente expr1;
  • Se expr1 for null, retorna expr2

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';
  }
}

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *