Sobes.tech
Junior

Wie implementiert man Verzweigungen mit dem switch-Operator in Dart?

sobes.tech KI

Antwort von AI

Die Verzweigung mit dem switch-Operator in Dart erfolgt wie folgt:

void main() {
  var color = 'red';

  switch (color) {
    case 'red':
      print('Ausgewählte Farbe ist rot.');
      break; // Beendet die Ausführung des switch-Blocks
    case 'blue':
      print('Ausgewählte Farbe ist blau.');
      break;
    case 'green':
      print('Ausgewählte Farbe ist grün.');
      break;
    default: // Wird ausgeführt, wenn kein case übereinstimmt
      print('Unbekannte Farbe.');
  }
}

switch vergleicht den Wert der Variablen (hier color) mit den nach case angegebenen Konstanten. Bei Übereinstimmung wird der zugehörige Code ausgeführt. Das Schlüsselwort break ist notwendig, um den switch-Block nach Ausführung des entsprechenden case zu verlassen. Wird es weggelassen, läuft die Ausführung in den nächsten case (sog. "Fallthrough"), was in der Regel unerwünscht ist. default wird verwendet, um Fälle zu behandeln, in denen kein case übereinstimmt.

Wichtig ist, sich zu merken, dass in Dart in einem switch nur folgende Ausdruckstypen in case verwendet werden dürfen:

  • int
  • Strings (String)
  • Konstanten zur Kompilierungszeit (const) oder finale (final) Variablen primitiver Typen
  • Aufzählungen (enum)

Außerdem kann man mit case (Type value) eine Typüberprüfung durchführen:

void process(dynamic value) {
  switch (value) {
    case String s:
      print('Wert ist ein String: $s');
      break;
    case int i when i > 0: // Verwendung von Guard mit when
      print('Wert ist eine positive Ganzzahl: $i');
      break;
    case List _: // Übereinstimmung mit List-Typ ohne Variablenbindung
      print('Wert ist eine Liste');
      break;
    default:
      print('Wert ist ein anderer Typ');
  }
}

void main() {
  process('hallo');
  process(10);
  process([1, 2, 3]);
  process(3.14);
}

In Dart 3.0 wurden neue Pattern-Matching-Fähigkeiten eingeführt, die switch-Ausdrücke erweitern:

var number = 1;
var text = switch (number) {
  1 => 'eins',
  2 => 'zwei',
  _ => 'anderer' // Entspricht default
};
print(text); // Gibt aus: eins

Hier wird switch als Ausdruck verwendet, der einen Wert zurückgibt. Das _-Symbol dient als Platzhalter, der jedem Wert entspricht.