Difference between revisions of "Case/de"

From Free Pascal wiki
Jump to navigationJump to search
m
m
Line 141: Line 141:
 
<br>
 
<br>
 
--[[User:Olaf|Olaf]] 17:49, 19 October 2012 (UTC)
 
--[[User:Olaf|Olaf]] 17:49, 19 October 2012 (UTC)
[[Category:Pascal]]
+
[[Category:Pascal]]{{AutoCategory}}

Revision as of 19:17, 20 October 2012

Deutsch (de) English (en) español (es) suomi (fi) français (fr) русский (ru)

Zurück zu den reservierten Wörtern.


Case

Das Schlüsselwort Case kann auf zwei Arten eingesetzt werden:

  1. einmal in der Form einer Liste von Verzweigungen im Körper eines Unterprogramms
  2. einmal in der Typdefinition um für einen speziellen Fall unterschiedliche Schreibweisen zu ermöglichen


Im ersten Fall ersetzt es verschachtelte IF-Anweisungen und ermöglicht so eine bessere Lesbarkeit des Codes.
Im zweiten Fall ermöglicht es dem Programmierer auf unterschiedliche Weise auf einen bestimmten Speicherereich zu zugreifen.

Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.

Fall 1 Verwendung in einem Unterprogramm


Die Case Anweisung im Körper eines Unterprogramms ist eine Verzweigung im Unterprogramm. Hier wird die Entscheidung getroffen, welcher Zweig des Unterprogramms abgearbeitet wird.
übersichtlichere Schreibweise für die Schreibweise 'else if' und erzeugt auch schnelleren Code als die Schreibweise 'else if'.

Case als Ersatz von If


Anweisungen wie diese:

if (b = 1) or (b = 7) then
  ...
else if (b = 2037) or (b = 5) then
  ...
else if (b = 390) then
  ...
else
  ...;


können durch eine Case Anweisung ersetzt werden:

case b of
  1,7:
    ...;
  2037,5:
    ...;
  390:
    ...;
  else
    ...;
end;


Die Abfrage von Wertebereichen


Es können auch Wertebereiche abgefragt werden:
In diesem Beispiel wird der Wertebereich eines Chars abgefragt.

case c of
  '0' .. '9':
    ...;
  'a' .. 'z':
    ...;
  'A' .. 'Z':
    ...;
  '+' , '-' :
    ...;
  else
    ...;
end;


Die Schreibweisen else und otherwise


Für den Sonstfall, also für alle die Fälle, die in der Case Anweisung nicht abgefragt wurden gibt es zwei gültige Schreibweisen

  • else
  • otherwise


Beide Beispiele sind richtig und führen zum selben Ergebnis:

// Beispiel 1
case i of
  1:
    ...;
  2:
    ...;
  otherwise
    ...;
end;

//Beispiel 2
case i of
   1:
     ...;
   2:
     ...;
   else
     ...;
end;


Fall 2 Bestandteil einer Typdeklaration

Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.
Wichtig ist, das alle drei Zugriffsarten denselben Datentyp und die selbe Grösse haben.

Die drei Möglichkeiten sind:
Fall 1: (r,g,b) belegt drei Byte
Fall 2: (ColorArray) belegt drei Byte
Fall 3: (Color) belegt drei Byte

Beispiel:

  ...
  // Tpydefinition
type
  TColorRec = record
    case integer of
      1: (r, g, b: byte);                   // belegt drei Byte
      2: (ColorArray: array[0..2] of byte); // belegt drei Byte
      3: (Color: TColor);                   // belegt drei Byte
  end;
  ...
var
  // Typzuweisung
  // erstellt eine Variable vom Typ TColorRec
  Farbe: TColorRec;

begin
  // Typverwendung
  // belegt jede der drei Variablen mit einem gültigen Wert
  Farbe.r := 255;
  Farbe.g := 0;
  Farbe.b := 255;

  // Auf diese drei Arten wird der Speicher ausgelesen und jeweils ein Panel gefärbt
  // Der Farbwert ist in allen drei Fällen gleich,
  // nur die Art wie auf den Speicherinhalt zugegriffen wird unterscheidet sich
  Panel1.Color := RGB(Farbe.r, Farbe.g, Farbe.b);
  Panel2.Color := RGB(Farbe.ColorArray[0], Farbe.ColorArray[1], Farbe.ColorArray[2]);
  Panel3.Color := Farbe.Color;
  ...
end;



--Olaf 17:49, 19 October 2012 (UTC)