Step 10 - Case

 

Programmsteuerung 2: Bedingungsabfrage mit "case"

Die Case-Anweisung funktioniert im Prinzip gleich wie eine if-Anweisung, nur mit dem Unterschied, dass bestimmte "Fälle" abgearbeitet werden. Es können allerdings nur Integer-werte, Buchstaben (Char) sowie Sets (noch nicht bekannt, keine Angst kommt später) Abgefragt werden
Der grundsätzliche Aufbau soll kurz durch folgendes Beispiel gezeigt werden:
var
  i:Integer;
begin
  
  //...
  
  case i of
   1:     //wenn i=1, dann ...
    begin
          //mach was
    end;
   2,3,4: //wenn i=2 oder i=3 oder i=4, dann ...
    begin
          //mach was
    end;
   5..10: //wenn i zwischen 5 und 10
    begin //           oder gleich 5 oder gleich 10 ist, dann...
          //mach was
    end;
    else  // ansonsten
    begin
          // mach was anderes
    end;
  end;    // Sehr wichtig: Das End von Case!

end;
 
Die case-Anweisung kann nur auf "abzählbare Mengen" angewandt werden. Das heißt, wir können nicht nur Integer nehmen, aber z.B. keinen String, da dieser nicht abzählbar ist.
Das folgende Beispiel zeigt, wie wir schon jetzt - ohne weiteres Wissen, wie ein "Datum" verarbeitet wird, mit einem Datum als Integer arbeiten, in dem wir nur die einzelnen Elemente, Tag, Monat und Jahr, dafür verwenden.
var
  tag, monat, jahr, datum : Integer;
  datumAlsString, msg : String;
begin
  tag := StrToInt( edTag.Text);
  monat := StrToInt( edMonat.Text);
  jahr := StrToInt( edJahr.Text);

  datum := tag * 1000000 + monat * 10000 + jahr;
  datumAlsString := IntToStr( tag) + '.'
                    + IntToStr( monat) + '.'
                    + IntToStr( jahr);

  case datum of
    31122021, 31122022, 31122023 :
    begin
      msg := 'Heute ist Silvester!';
      msg := msg + ' Frohes Neues Jahr 2022!';
    end;
    1012022, 1012023, 1012024 :
    begin
      msg := 'Heute ist Neujahr!';
      msg := msg + ' Frohes Neues Jahr 2022!';
    end;
    else
    begin
      msg := 'Heute ist der ';
      msg := msg + datumAlsString;
      msg := '! Mach was draus ;)';
    end;
  end;

  ShowMessage( msg);
end;
Kleine Quizfrage:
Was können wir in oberem Beispiel ändern, um den Code für Silvester und Neujahr für alle zukünftigen Jahre funktionsfähig zu halten? Versuche es selbst zu ändern, sobald es die einfällt :)
 
Im folgenden Beispiel wird zudem noch die "Kurzform" gezeigt. Wie bei der if-Anweisung kann hier auch das begin und end weggelassen werden, wenn man nur eine einzige Methode hat.
type
  TImportantColors = (Red, Green, Blue);  
var
  cl : TImportantColors;
begin
  // ...
  cl := Blue;
  // ...  
  // Auch Kurzschreibform ist möglich:
  case cl of
    Red : showMessage('Red');
    Green : showMessage('Green');
    Blue : showMessage('Blue');
    else showMessage('???');
  end;
  // ...  
  // Oder mehrere Werte auflisten und auf eine Anweisung legen:
  case cl of
    Red, Green : showMessage('Not Blue');
    Blue : showMessage('Blue');
    else showMessage('???');
  end;
  // ...  
end;
 
Auch wenn es recht wenig Beispiele sind - du findest diese alle unter GitHub im Beispielprojekt ;)
Viel Spaß :)
 

 

Externe Links zu SocialMedia-Seiten zu diesem Kapitel:

Diese Links sollen dazu dienen, Kommentare und Meinungen rund um dieses Kapitel wiedergeben zu können.
 
 
* Hinweis zu externen Links:
Bitte Haftungsausschluss beachten!
Ich übernehme weder Garantie, noch Gewährleistung, noch Haftung für Inhalte, die nach diesem Link folgen. Mit deinem Klick auf den Link verlässt du meine Website. Es öffnet sich in der Regel ein neuer Tab oder ein neues Fenster.