Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Case of mehrere Befehle aber wie?


Nano-Ware - Mo 11.10.10 20:51
Titel: Case of mehrere Befehle aber wie?
Hey,

das hab ich im Internet gefunden..


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
case eingabe of
  1: ausgabe := 'Sie haben 1 eingegeben';
  2: ausgabe := 'Sie haben 2 eingegeben';
  3: ausgabe := 'Sie haben 3 eingegeben';
  else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;


ich möchte aber wenn die Zahl 1 ist dass zB nicht nur "ausgabe := 'XX'" ausgeführt sondern auch noch eine andere Zuweißung gemacht wird. Wie geht das dann?

Danke schonmal (:


Gerd Kayser - Mo 11.10.10 20:55

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
ich möchte aber wenn die Zahl 1 ist dass zB nicht nur "ausgabe := 'XX'" ausgeführt sondern auch noch eine andere Zuweißung gemacht wird. Wie geht das dann?
begin und end verwenden.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
case eingabe of
  1begin
       ausgabe := 'Sie haben 1 eingegeben';
       ...
     end;
  2: ausgabe := 'Sie haben 2 eingegeben';
  3: ausgabe := 'Sie haben 3 eingegeben';
  else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;


Bergmann89 - Mo 11.10.10 20:56

Hey,


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
case eingabe of
  1begin
    ausgabe := 'Sie haben 1 eingegeben';
    ausgabe := 'andere Zuweißung...';
  end;
  2: ausgabe := 'Sie haben 2 eingegeben';
  3: ausgabe := 'Sie haben 3 eingegeben';
  else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;


€: mist zu langsam ^^

MfG Bergmann.


Gerd Kayser - Mo 11.10.10 20:59

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
€: mist zu langsam ^^
Der Kaffee macht den Unterschied. ;-)


FinnO - Mo 11.10.10 21:05

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
begin und end verwenden.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
case eingabe of
  1begin
       ausgabe := 'Sie haben 1 eingegeben';
       ...
     end;
  2: ausgabe := 'Sie haben 2 eingegeben';
  3: ausgabe := 'Sie haben 3 eingegeben';
  else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;


besser formatiert wäre IMHO


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
case eingabe of
  1
  begin
     ausgabe := 'Sie haben 1 eingegeben';
     ...
  end;
  2: ausgabe := 'Sie haben 2 eingegeben';
  3: ausgabe := 'Sie haben 3 eingegeben';
  else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;


Gerd Kayser - Mo 11.10.10 21:12

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
besser formatiert wäre IMHO


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
case eingabe of
  1
  begin
     ausgabe := 'Sie haben 1 eingegeben';
     ...
  end;
  2: ausgabe := 'Sie haben 2 eingegeben';

Wäre mir zu unübersichtlich. Erinnert mich immer an Spaghetticode. Leerzeichen am Anfang einer Zeile kosten nix, und dem Compiler ist es egal. ;-)


FinnO - Mo 11.10.10 21:39

Moin,

Wäre wahrscheinlich ein Glaubenskrieg, aber ich möchte in meinem Code immer die "Ebenen" in gleichen Abständen von der linken Seite halten.

LG


jaenicke - Mo 11.10.10 22:01

Naja, man sollte schon die Sprungmarken sehen können, begin und end gehören aber in einzelne Zeilen. Deshalb mache ich das immer so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
case eingabe of
  1
    begin
      ausgabe := 'Sie haben 1 eingegeben';
      ...
    end;
  2
    ausgabe := 'Sie haben 2 eingegeben';
  3:
    ausgabe := 'Sie haben 3 eingegeben';
  else
    ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;
So kann man das finde ich am schnellsten überblicken. Letztlich muss es jeder selbst wissen. Solange man selbst versucht übersichtlich zu bleiben und ein paar Grundsätze beachtet (wie eben einrücken und nur einen Befehl pro Zeile), dann passt das meistens schon. ;-)


Reinhard Kern - Di 12.10.10 01:30

Hallo,
Um den Glaubenskrieg noch ein bisschen anzuheizen, bevor ich mich endgültig von Delphi verabschiede, ich mache das immer so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  procedure TuWasImFall2;
  begin
  ...
  end;

case eingabe of
  1:  begin
      ausgabe := 'Sie haben 1 eingegeben';
      ...
      end;
  2:  TuWasImFall2;
  3:  ausgabe := 'Sie haben 3 eingegeben';
  else
      ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;


Wichtig ist nur, dass begin und end untereinander stehen, so dass man das eindeutig zuordnen kann. Da begin und end einen Block bilden, finde ich es nicht nötig, den Blockrumpf nochmal einzurücken, ist ja gleiche logische Ebene. Ob man dem case-Fall eine eigene Zeile spendiert, ist eher Geschmackssache, das braucht halt mehr Platz. Längere Befehlsfolgen lagere ich in eine (meistens lokale) Prozedur wie TuWasImFall2 aus, damit die case-Struktur übersichtlich bleibt.

5 - 4 - 3 - 2 - 1 schlagt euch!
Reinhard


elundril - Di 12.10.10 01:34

Mach ich auch immer so. Nur das ich die Zeile "Ausgabe : = 'Sie haben 1 eingegeben';" auch noch eingerückt hätte.

lg elundril