Dart für Anfänger 1.8 Kontrollstrukturen switch

Dart
Dart

 Jedes größere Programm benötigt Kontrollstrukturen. In dieser Postreihe sind wir bereits auf die Variablen Typen integer und double eingegangen. Wieso jetzt nicht mit den verbleibenden Typen weiter machen ?

Wir werden in diesem Post beides machen. Es ermöglicht interessantere Beispiele und ist abwechslungsreicher !


Kontrollstrukturen

Programmieren heisst nicht nur Abläufe anstoßen, sondern auch auf Ergebnisse reagieren. Starten Sie deshalb mit Visual Studio Code und diesem einfachen Code:

import 'dart:io';

String eingabe;

void main(List<String> arguments) {
  eingabe = stdin.readLineSync();
}

Wenn Sie schon andere Posts aus dieser Reihe gelesen haben, sollte Ihnen das bekannt vorkommen. Zum Start binden wir die dart:io Bibliothek ein. Anschliessend definieren wir eine String Variable.  Mit stdin.readLineSync(..) lesen wir eine Eingabe aus dem Terminal und weisen diese der Variable zu. Wandeln wir nun dieses Beispiel ab zu:


import 'dart:io';

String eingabe;

void main(List<String> arguments) {
  print('''
  Bitte wählen Sie:
  A. Integer Wert erfassen
  B. Boolean Wert erfassen
  C. Double Wert erfassen
  ''');

  eingabe = stdin.readLineSync();
  eingabe = eingabe.toLowerCase();

  switch (eingabe) {
    case 'a':
      print('Sie haben sich entschieden einen Integer Wert zu erfassen');
      break;
    case 'b':
      print('Sie haben sich entschieden einen Boolen Wert zu erfassen');
      break;
    case 'c':
      print('Sie haben sich entschieden einen Double Wert zu erfassen');
      break;
    default:
      print('Ungültige Eingabe !');
  }
}

Nun schauen Sie sich den Code oben mal genauer an. Die erste Auffälligkeit ist ein String der über mehrere Linien geht:


  print('''
  Bitte wählen Sie:
  A. Integer Wert erfassen
  B. Boolean Wert erfassen
  C. Double Wert erfassen
  ''');

Sie könnten den Text ja auch mit mehreren print(..) Anweisungen drucken ! Bequemer bei längeren Zeichenketten ist hier aber der Multiline String von Dart. Mit ''' oder """ beginnt die Zeichenkette und wird am Schluss auch mit dem gleichen, dreifachen Zeichen abgeschlossen. 

Die nächste "Neuheit" ist eine Funktion der String Bibliothek. eingabe.toLowerCase(..) wandelt die Zeichenkette, die wir mit stdin.readLineSync(..) eingelesen haben in Kleinbuchstaben. Nun aber zum Hauptthema des Posts: switch

 switch (eingabe) {
    case 'a':
      print('Sie haben sich entschieden einen Integer Wert zu erfassen');
      break;
    case 'b':
      print('Sie haben sich entschieden einen Boolen Wert zu erfassen');
      break;
    case 'c':
      print('Sie haben sich entschieden einen Double Wert zu erfassen');
      break;
    default:
      print('Ungültige Eingabe !');
  }

Basierend auf dem Inhalt von eingabe wird Code ausgeführt. Falls der Wert von eingabe "a" ist, case 'a':, werden die Anweisungen bis zum break Befehl ausgeführt. Mit break selbst, wird die switch Konstruktion verlassen und der darauf folgende Code ausgeführt.
Sollte eingabe nicht "a" enthalten, wird auf "b" und "c" getestet. Sollten alle drei nicht zutreffen, wird der Standard ausgeführt, der Code nach default.  Bitte beachten Sie, im default Block wird keine break Anweisung mehr benötigt. Jetzt wandeln wir diesen Code ab, um noch eine weitere Möglichkeit von switch aufzuzeigen:

import 'dart:io';

var eingabe;

void main(List<String> arguments) {
  print('''
  Bitte wählen Sie:
  A. Integer Wert erfassen
  B. Boolean Wert erfassen
  C. Double Wert erfassen
  ''');

  eingabe = stdin.readLineSync();
  eingabe = eingabe.toLowerCase();

  switch (eingabe) {
    case 'a':
      print('Sie haben sich entschieden einen Integer Wert zu erfassen');
      continue istZahl;
    case 'b':
      print('Sie haben sich entschieden einen Boolen Wert zu erfassen');
      continue istZahl;
    case 'c':
      print('Sie haben sich entschieden einen Double Wert zu erfassen');
      continue istZahl;

    istZahl:
    case 'istZahl':
      print('Zahlen sind wundervoll');
      break;
    default:
      print('Ungültige Eingabe !');
  }
}

Wir haben im Code oben den Typ der Variablen geändert. Im übrigen ist der Code in Visual Studio Code lauffähig. Sie starten Ihn im Terminalfester mit dart ihrfilename.dart !

Der Typ var in Dart


Die Variable vom Typ var in Dart ist ein spezieller Fall. Im Code oben definieren wir die Variable, ohne ihr einen Wert zu zuweisen. Wir können dieser Variable im Verlauf des Programmes sowohl Zeichenketten, wie auch Zahlen zu weisen. Dart wird keine Beanstandungen generieren. Der große Nachteil dieses Typs ist die schlechte Lesbarkeit im Code und damit eine höhere Fehleranfälligkeit. Wenn Sie fremden Code analysieren und auf eine var Variable treffen, kann ihre Bedeutung / Verwendung unklar sein. Ganz anders als eine double Variable zum Beispiel. Sie dient eindeutig einer Gleitkommazahl.

Zurück zum switch Block im Code oben. In den einzelnen case Blöcken sind die break Anweisungen entfernt und durch continue ersetzt worden. Dabei besteht jetzt ein neuer istZahl Block. Dieser wird ausgeführt, wenn ein case zutrifft und erst anschliessend das switch Konstrukt mit break verlassen. Mit continue lässt sich also noch eine weitere Logik im switch Konstrukt einbinden. Das wars für diesen Post. Bis bald !

Kommentare

Beliebte Posts aus diesem Blog

Material Design in Flutter Teil 2

Dart Basic: Listen Part 1

Listen in Dart (2021): Part 1 List.filled List.empty und List.add