Jak zaimplementować rozgałęzienie za pomocą operatora switch w języku Dart?
sobes.tech AI
Odpowiedź od AI
Rozgałęzienie za pomocą operatora switch w Dartzie wygląda następująco:
void main() {
var color = 'red';
switch (color) {
case 'red':
print('Wybrany kolor to czerwony.');
break; // Kończy wykonywanie bloku switch
case 'blue':
print('Wybrany kolor to niebieski.');
break;
case 'green':
print('Wybrany kolor to zielony.');
break;
default: // Wykonywane, jeśli żaden case nie pasuje
print('Nieznany kolor.');
}
}
switch porównuje wartość zmiennej (w tym przypadku color) z konstansami podanymi po case. Przy dopasowaniu wykonywany jest kod powiązany z tym case. Słowo kluczowe break jest konieczne, aby opuścić blok switch po wykonaniu odpowiedniego case. Pominięcie go spowoduje przejście do następnego case (tzw. "fallthrough"), co zwykle jest niepożądane. default służy do obsługi przypadków, gdy żaden case nie pasuje.
Ważne jest, aby pamiętać, że w Dart w switch można używać tylko następujących typów wyrażeń w case:
int- String (
String) - Stałe w czasie kompilacji (
const) lub finalne (final) zmienne prymitywne - Wyliczenia (
enum)
Można także używać dopasowania typu za pomocą case (Type value):
void process(dynamic value) {
switch (value) {
case String s:
print('Wartość jest stringiem: $s');
break;
case int i when i > 0: // Użycie warunku guard z when
print('Pozytywny integer: $i');
break;
case List _: // Dopasowanie do typu List bez przypisania do zmiennej
print('Wartość jest listą');
break;
default:
print('Wartość jest innego typu');
}
}
void main() {
process('cześć');
process(10);
process([1, 2, 3]);
process(3.14);
}
W Dart 3.0 wprowadzono nowe możliwości pattern matching, które rozszerzają wyrażenia switch:
var number = 1;
var text = switch (number) {
1 => 'jeden',
2 => 'dwa',
_ => 'inny' // odpowiednik default
};
print(text); // Wyświetli: jeden
Tutaj switch jest używany jako wyrażenie zwracające wartość. Operator _ działa jako symbol zastępczy, odpowiadający dowolnej wartości.