Expresiones condicionales en Dart

Los operadores condicionales que tratamos aquí no son sentencias condicionales como if-else. Se trata del operador ternario y el operador de fusión de nulos.

Dos tipos de operadores condicionales

Dart cuenta con dos operadores condicionales compactos que sustituyen los bloques if-else extensos. En una sola línea se realiza la comprobación condicional, la asignación o la devolución de valores.

  1. Operador ternario condicional: condition ? expr1 : expr2
  2. Operador de fusión de nulos: expr1 ?? expr2

Operador ternario condition ? expr1 : expr2

Sintaxis

Condición booleana ? Expresión si se cumple : Expresión si no se cumple

Si el resultado de condition es true, devuelve expr1; si es false, retorna expr2.

Esta condición devuelve un valor booleano, y según ese valor booleano se selecciona uno de los dos valores para asignarlo o devolverlo.

Ejemplo:

void main() {
    bool isRain = true;
	// Asignación con expresión ternaria
	var result = isRain ? 'Está lloviendo' : 'No está lloviendo';
	print(result); // Está lloviendo

	isRain = false;
	result = isRain ? 'Está lloviendo' : 'No está lloviendo';
	print(result); // No está lloviendo
}Lenguaje del código: Dart (dart)

Resultado de ejecución

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Está lloviendo
No está lloviendoLenguaje del código: CSS (css)

Si ya aprendiste el uso de if-else, puedes escribirlo de esta otra forma:

void main() {
    bool isRain = true;

	String result;
	if (isRain) {
	  result = 'Está lloviendo';
	} else {
	  result = 'No está lloviendo';
	}
	print(result);//Está lloviendo
}Lenguaje del código: Dart (dart)

Operador de fusión de nulos

Comprueba si una variable es nula y permite establecer rápidamente un valor por defecto.

Sintaxis expr1 ?? expr2

Expresión anulable ?? Valor por defecto
  • Si expr1 no es nulo, devuelve directamente expr1;
  • Si expr1 es null, retorna expr2

Ejemplo oficial

void main() {
	// El parámetro es un string anulable String?
	String playerName(String? name) => name ?? 'Guest';

	print(playerName("Tom"));  // Tom
	print(playerName(null));   // Guest
}Lenguaje del código: JavaScript (javascript)

Definimos una función playerName para el nombre del jugador, con un parámetro de cadena anulable. Usamos el operador ?? para asignar un valor inicial: si el nombre recibido es null, el valor predeterminado será Guest.

Nota complementaria

La función playerName es una función flecha, una sintaxis abreviada para funciones. Lo veremos más adelante, y es equivalente al código que aparece a continuación:

String playerName(String? name) {
  return name ?? 'Guest';
}Lenguaje del código: Dart (dart)
Comparación de escrituras equivalentes
Implementación con operador ternario
String playerName(String? name) => name != null ? name : 'Guest';Lenguaje del código: JavaScript (javascript)
Bloque completo if-else
String playerName(String? name) {
  if (name != null) {
    return name;
  } else {
    return 'Guest';
  }
}Lenguaje del código: JavaScript (javascript)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *