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.
- Operador ternario condicional:
condition ? expr1 : expr2 - 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
expr1no es nulo, devuelve directamenteexpr1; - Si
expr1esnull, retornaexpr2
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)