Case/de: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | - | ||
| 2 | 1 | Zurück zu den [[Reserved words/de|reservierten Wörtern]].\ | |
| 3 | 2 | Zurück zu den [[Branch/de|Verzweigungen / bedingten Anweisungen]].\ | |
| 4 | - | ||
| 5 | - | ||
| 3 | + | ||
| 6 | 4 | =Case= Das Schlüsselwort **Case** kann auf zwei Arten eingesetzt werden:\ | |
| 7 | 5 | \# einmal in der Form einer Liste von Verzweigungen im Körper eines Unterprogramms\ | |
| 8 | 6 | \# einmal in der Typdefinition um für einen speziellen Fall unterschiedliche Schreibweisen zu ermöglichen\ | |
| 9 | - | ||
| 7 | + | ||
| 10 | 8 | Im ersten Fall ersetzt es verschachtelte [[If/de|IF-Anweisungen]] und ermöglicht so eine bessere Lesbarkeit des Codes.\ | |
| 11 | 9 | Im zweiten Fall ermöglicht es dem Programmierer auf unterschiedliche Weise auf einen bestimmten Speicherereich zu zugreifen.\ | |
| 12 | - | ||
| 10 | + | ||
| 13 | 11 | Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.\ | |
| 14 | 12 | Der Wert vor dem **:** muss **'zwingend** eine **Konstante** sein.\ | |
| 15 | - | ||
| 16 | 13 | ||
| 17 | 14 | # Fall 1 Verwendung in einem Unterprogramm | |
| 18 | 15 | ||
| 19 | - | ||
| 20 | 16 | Die Case Anweisung im Körper eines Unterprogramms ist eine Verzweigung im Unterprogramm. Hier wird die Entscheidung getroffen, welcher Zweig des Unterprogramms abgearbeitet wird.\ | |
| 21 | 17 | übersichtlichere Schreibweise für die Schreibweise 'else if' und erzeugt auch schnelleren Code als die Schreibweise 'else if'.\ | |
| 22 | 18 | ==Case als Ersatz von If==\ | |
| 23 | 19 | Anweisungen wie diese:\ | |
| 24 | 20 | ||
| 25 | 21 | ``` pascal | |
| 26 | 22 | if (b = 1) or (b = 7) then | |
| 27 | 23 | ... | |
| 28 | 24 | else if (b = 2037) or (b = 5) then | |
| 29 | 25 | ... | |
| 30 | 26 | else if (b = 390) then | |
| 31 | 27 | ... | |
| 32 | 28 | else | |
| 33 | 29 | ...; | |
| 34 | 30 | ``` | |
| 35 | 31 | ||
| 36 | - | ||
| 37 | 32 | können durch eine Case Anweisung ersetzt werden: | |
| 38 | 33 | ||
| 39 | 34 | ``` pascal | |
| 40 | 35 | case b of | |
| 41 | 36 | 1,7: | |
| 42 | 37 | ...; | |
| 43 | 38 | 2037,5: | |
| 44 | 39 | ...; | |
| 45 | 40 | 390: | |
| 46 | 41 | ...; | |
| 47 | 42 | else | |
| 48 | 43 | ...; | |
| 49 | 44 | end; | |
| 50 | 45 | ``` | |
| 51 | 46 | ||
| 52 | - | ||
| 53 | 47 | ==Die Abfrage von Wertebereichen==\ | |
| 54 | 48 | Es können auch Wertebereiche abgefragt werden:\ | |
| 55 | 49 | In diesem Beispiel wird der Wertebereich eines Chars abgefragt.\ | |
| 56 | 50 | ||
| 57 | 51 | ``` pascal | |
| 58 | 52 | case c of | |
| 59 | 53 | '0' .. '9': | |
| 60 | 54 | ...; | |
| 61 | 55 | 'a' .. 'z': | |
| 62 | 56 | ...; | |
| 63 | 57 | 'A' .. 'Z': | |
| 64 | 58 | ...; | |
| 65 | 59 | '+' , '-' : | |
| 66 | 60 | ...; | |
| 67 | 61 | else | |
| 68 | 62 | ...; | |
| 69 | 63 | end; | |
| 70 | 64 | ``` | |
| 71 | 65 | ||
| 72 | - | ||
| 73 | 66 | ==Die Schreibweisen else und otherwise==\ | |
| 74 | 67 | 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 | |
| 75 | 68 | ||
| 76 | 69 | - else | |
| 77 | 70 | - otherwise | |
| 78 | 71 | ||
| 79 | - | ||
| 80 | 72 | Beide Beispiele sind richtig und führen zum selben Ergebnis: | |
| 81 | 73 | ||
| 82 | 74 | ``` pascal | |
| 83 | 75 | // Beispiel 1 | |
| 84 | 76 | case i of | |
| 85 | 77 | 1: | |
| 86 | 78 | ...; | |
| 87 | 79 | 2: | |
| 88 | 80 | ...; | |
| 89 | 81 | otherwise | |
| 90 | 82 | ...; | |
| 91 | 83 | end; | |
| 92 | 84 | ||
| 93 | 85 | //Beispiel 2 | |
| 94 | 86 | case i of | |
| 95 | 87 | 1: | |
| 96 | 88 | ...; | |
| 97 | 89 | 2: | |
| 98 | 90 | ...; | |
| 99 | 91 | else | |
| 100 | 92 | ...; | |
| 101 | 93 | end; | |
| 102 | 94 | ``` | |
| 103 | 95 | ||
| 104 | - | ||
| 105 | 96 | =Fall 2 Bestandteil einer Typdeklaration= Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.\ | |
| 106 | - | ||
| 97 | + | ||
| 107 | 98 | Die drei Möglichkeiten sind:\ | |
| 108 | 99 | * (r,g,b) belegt drei Byte\ | |
| 109 | 100 | * (ColorArray) belegt drei Byte\ | |
| 110 | 101 | * (Color) belegt vier Byte\ | |
| 111 | - | ||
| 102 | + | ||
| 112 | 103 | Beispiel:\ | |
| 113 | 104 | ||
| 114 | 105 | ``` pascal | |
| 115 | 106 | ... | |
| 116 | 107 | // Tpydefinition | |
| 117 | 108 | type | |
| 118 | 109 | TColorRec = record | |
| 119 | 110 | case integer of | |
| 120 | 111 | 1: (r, g, b: byte); // belegt drei Byte | |
| 121 | 112 | 2: (ColorArray: array[0..2] of byte); // belegt drei Byte | |
| 122 | 113 | 3: (Color: TColor); // belegt vier Byte | |
| 123 | 114 | end; | |
| 124 | 115 | ... | |
| 125 | 116 | var | |
| 126 | 117 | // Typzuweisung | |
| 127 | 118 | // erstellt eine Variable vom Typ TColorRec | |
| 128 | 119 | Farbe: TColorRec; | |
| 129 | 120 | ||
| 130 | 121 | begin | |
| 131 | 122 | // Typverwendung | |
| 132 | 123 | // belegt jede der drei Variablen mit einem gültigen Wert | |
| 133 | 124 | Farbe.r := 255; | |
| 134 | 125 | Farbe.g := 0; | |
| 135 | 126 | Farbe.b := 255; | |
| 136 | 127 | ||
| 137 | 128 | // Auf diese drei Arten wird der Speicher ausgelesen und jeweils ein Panel gefärbt | |
| 138 | 129 | // Der Farbwert ist in allen drei Fällen gleich, | |
| 139 | 130 | // nur die Art wie auf den Speicherinhalt zugegriffen wird unterscheidet sich | |
| 140 | 131 | Panel1.Color := RGB(Farbe.r, Farbe.g, Farbe.b); | |
| 141 | 132 | Panel2.Color := RGB(Farbe.ColorArray[0], Farbe.ColorArray[1], Farbe.ColorArray[2]); | |
| 142 | 133 | Panel3.Color := Farbe.Color; | |
| 143 | 134 | ... | |
| 144 | 135 | end; | |
| 145 | 136 | ``` | |
| 146 | 137 | ||
| 147 | - | ||
| 148 | - | ||
| 149 | 138 | --Olaf 17:49, 19 October 2012 (UTC) | |
| 150 | 139 | ||
| 151 | 140 | --- | |
| 152 | 141 | *From the Free Pascal wiki, page "Case/de", as it stood on 2023-05-10 after a change by Joh, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 153 | 142 | Category: FreePascal/de | |
| 154 | 143 | Category: Reserved words/de |
