Lección 7 · 7 de 20
switch y expresiones switch · Dart
Elija entre muchos casos con switch en Dart 3: la sentencia clásica, la nueva expresión switch con =>, patrones como || y >=, y guardas when.

La sentencia `switch` compara un valor con cada case y ejecuta el que coincide. En Dart 3 no hace falta break: al terminar un caso, el switch acaba. case 'Sat' || 'Sun': reúne dos valores en un solo caso, y `default` recoge todo lo demás.
La expresión `switch` es la novedad de Dart 3: en lugar de ejecutar instrucciones, devuelve un valor, que aquí se guarda en season. Cada caso es patrón => valor, separados por comas, y `_` es el comodín que coincide con cualquier cosa. Con ella, elegir la estación de un mes cabe en unas pocas líneas.
Los casos son patrones, y un patrón puede comparar: >= 90 => 'A' se cumple con cualquier número mayor o igual que 90. Como Dart los prueba en orden, la nota 84 no llega a >= 90 pero sí a >= 70, y la expresión cabe en una sola línea.
Los patrones se combinan con `&&`: >= 0 && <= 50 es un intervalo. Y `when` añade una condición más, que puede mirar otras variables: _ when school solo se cumple si school es true. Por eso 65 km/h da too fast near a school.
Una expresión switch tiene que cubrir todos los casos posibles; si falta el _, Dart avisa antes de ejecutar. Es la forma más clara de convertir un valor en otro.
Código · main.dart
void main() { String day = 'Sat'; // switch runs the case that matches switch (day) { case 'Sat' || 'Sun': print('$day: weekend, the shop opens at 10.'); default: print('$day: open from 9 to 8.'); } // switch expression: gives back a value. _ catches the rest. int month = 4; String season = switch (month) { 12 || 1 || 2 => 'winter', 3 || 4 || 5 => 'spring', 6 || 7 || 8 => 'summer', _ => 'autumn', }; print('Month $month is in $season.'); // Patterns can also compare: >= 90, >= 70... int score = 84; String grade = switch (score) { >= 90 => 'A', >= 70 => 'B', >= 50 => 'C', _ => 'F' }; print('Score $score: grade $grade'); // && joins two patterns; "when" adds an extra condition. int speed = 65; bool school = true; String note = switch (speed) { >= 0 && <= 50 => 'within the limit', _ when school => 'too fast near a school', _ => 'slow down', }; print('$speed km/h: $note');}Salida · dart run main.dart
Sat: weekend, the shop opens at 10. Month 4 is in spring. Score 84: grade B 65 km/h: too fast near a school
Para recordar
- En Dart 3 los
caseno necesitanbreak. switch (x) { patrón => valor, ... }devuelve un valor._coincide con cualquier cosa.||,>=y&&forman patrones.whenañade una condición a un caso.
Ejercicio
Con una expresión switch, convierta una variable day de 1 a 7 en el nombre del día en inglés, y use _ para escribir invalid day con cualquier otro número.