![]() |
Delphi-Version: 2009
[Quiz] wann darf auf ein Semikolon ein ELSE folgen?
In Object Pascal / Delphi ist es in bestimmten Konstrukten erlaubt, unmittelbar nach einem Semikolon ein else zu verwenden.
Delphi-Quellcode:
Normalerweise ist else nach einem Semikolon nicht möglich und führt zu einer Fehlermeldung beim Kompilieren.
<Statement>;
else (...) Um welche Konstrukte handelt es sich, bei dem auf ein Semikolon ein else folgen kann? Update: es gibt mindestens zwei Konstrukte. Das case Konstrukt wurde bereits unten genannt, welches gibt es noch? |
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Bei else vom CASE-Konstrukt ( hiess ursprünglich auch OTHERWISE)
|
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Delphi-Quellcode:
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; Hier Edit: Ohhh zu spät |
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Danke für die Antworten soweit! Es gibt allerdings noch ein weiteres Konstrukt bei dem nach einem Semikolon ein else folgen kann. Wer kennt es?
|
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
try..except..else?
Delphi-Quellcode:
begin
try WriteLn( 'Hallo Welt'.ToInteger() ); except on EConvertError do WriteLn('Ein zahlenloser Tag'); else WriteLn('Das Programm ist fehlerhaft. Tauschen sie es um.'); end; end. |
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Zitat:
Delphi-Quellcode:
Dagegen würde ich diese Einrückung bevorzugen:
try
... except on EZeroDivide do HandleZeroDivide; on EOverflow do HandleOverflow; on EMathError do HandleMathError; else HandleAllOthers; end;
Delphi-Quellcode:
begin
try WriteLn( 'Hallo Welt'.ToInteger() ); except // eine Folge von Exception-Behandlungsroutinen, optional mit nachfolgendem else on EConvertError do WriteLn('Ein zahlenloser Tag'); else WriteLn('Das Programm ist fehlerhaft. Tauschen sie es um.'); end; end. ![]() Zitat:
|
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Gab es nicht noch irgendeinen Fall mit Verschachtelung? :gruebel:
Delphi-Quellcode:
Das scheint es aber nicht zu sein... zumindest nicht unter FreePascal.
if a then
if b then foo; else bar; |
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Zitat:
aber eigentlich sollte ; alles beenden, denn sonst müsste man ja bei
Delphi-Quellcode:
if ... then ... else if ... then ... else if ... then ... else ...;;;
Aber grundsätzlich sollte ELSE nur beim CASE auf ; folgen, denn dort beendet das ; den jeweiligen Case-Block und ELSE folgt auf das ganze CASE-OF. Und Try-Except ist quasi ein CASE. |
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Zitat:
Somit gibt es vor diesen Else kein Semikolon:
Delphi-Quellcode:
denn auch wenn hier kein
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;
Delphi-Quellcode:
Block zwischen
begin..end
Delphi-Quellcode:
und
case..of
Delphi-Quellcode:
steht,
else
Delphi-Quellcode:
und
case..of
Delphi-Quellcode:
sind ein Block.
else
Delphi-Quellcode:
wird mit einem
case..of
Delphi-Quellcode:
abgeschlossen, nicht mit einem Semikolon wie bei einer If-Abfrage. Also, entweder bilden
end;
Delphi-Quellcode:
und
case..of
Delphi-Quellcode:
einen Block oder
else
Delphi-Quellcode:
und
case..of
Delphi-Quellcode:
. Womit es egal ist ob hier vor
end;
Delphi-Quellcode:
ein Semokolon steht, denn das hat keinen Einfluß auf
else
Delphi-Quellcode:
. Denn das Semikolon ist in einem Block eingeschlossen.
else
Wo gibt es Blocks?
Delphi-Quellcode:
Bei
begin..end;
repeat..until while..end; try..except..else..end; case..of..else..end; usw.
Delphi-Quellcode:
bilden
case..of..else
Delphi-Quellcode:
und
case..of
Delphi-Quellcode:
einen Block, genau wie
else
Delphi-Quellcode:
und
begin
Delphi-Quellcode:
. Das Gleiche gilt für
end
Delphi-Quellcode:
. Somit sind das keine Ausnahmen, denn
try..except..else
Delphi-Quellcode:
bilden einen Block wie
except..else
Delphi-Quellcode:
.
begin..end
Bei
Delphi-Quellcode:
ist das anders.
if..then..else
Delphi-Quellcode:
bilden keinen Block. Pascal geht somit davon aus, dass wenn zwischen
if..then else
Delphi-Quellcode:
und
then
Delphi-Quellcode:
kein
else
Delphi-Quellcode:
Block steht, es sich um eine einzelne Anweisung handelt. Und da man
begin..end
Delphi-Quellcode:
mit und ohne
if..then
Delphi-Quellcode:
ausführen kann, sagt das Semikolon, dass hier die Abfrage zu ende ist. Wenn dann in der nächsten Zeile ein
else
Delphi-Quellcode:
auftaucht, dann ist es eine undefinierte Anweisung.
else
|
AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Zitat:
Auch das Syntax-Highlighting beim cnPack (Castalia wahrscheinlich auch) färbt es nach dieser Logik ein. Außerdem: Du drückst dich. Wo ist mein Preis? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz