AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [Quiz] wann darf auf ein Semikolon ein ELSE folgen?
Thema durchsuchen
Ansicht
Themen-Optionen

[Quiz] wann darf auf ein Semikolon ein ELSE folgen?

Ein Thema von mjustin · begonnen am 1. Apr 2015 · letzter Beitrag vom 2. Apr 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#1

[Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 10:29
Delphi-Version: 2009
In Object Pascal / Delphi ist es in bestimmten Konstrukten erlaubt, unmittelbar nach einem Semikolon ein else zu verwenden.

Delphi-Quellcode:
<Statement>;
else (...)
Normalerweise ist else nach einem Semikolon nicht möglich und führt zu einer Fehlermeldung beim Kompilieren.
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?
Michael Justin

Geändert von mjustin ( 1. Apr 2015 um 10:41 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 10:32
Bei else vom CASE-Konstrukt ( hiess ursprünglich auch OTHERWISE)
Markus Kinzler
  Mit Zitat antworten Zitat
Nanaki

Registriert seit: 23. Mär 2015
5 Beiträge
 
Delphi XE7 Professional
 
#3

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 10:32
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 10:40
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?
Michael Justin
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 10:44
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#6

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 11:37
Ja, allerdings würde ich persönlich die Einrückung anders als in der Delphi Dokumentation setzen. In der Delphi Dokumentation wird das else auf die Ebene des except gesetzt:
Delphi-Quellcode:
try
  ...
except
  on EZeroDivide do HandleZeroDivide;
  on EOverflow do HandleOverflow;
  on EMathError do HandleMathError;
else
  HandleAllOthers;
end;
Dagegen würde ich diese Einrückung bevorzugen:
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.
http://docwiki.embarcadero.com/RADSt.../de/Exceptions
Zitat:
ExceptionBlock ist entweder
eine weitere Anweisungsfolge oder
eine Folge von Exception-Behandlungsroutinen, optional mit nachfolgendem else Anweisungsliste
Michael Justin

Geändert von mjustin ( 1. Apr 2015 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 12:42
Gab es nicht noch irgendeinen Fall mit Verschachtelung?

Delphi-Quellcode:
  if a then
    if b then
      foo;
  else
    bar;
Das scheint es aber nicht zu sein... zumindest nicht unter FreePascal.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#8

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 13:25
Gab es nicht noch irgendeinen Fall mit Verschachtelung?
Ich glaub fast ja njö. Das Semikolon gehört ja zum inneren IF und das äußere IF wäre noch nicht beendet,
aber eigentlich sollte ; alles beenden, denn sonst müsste man ja bei 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 13:40
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?
Ich würde trotz dem Kein sagen, denn vor Else kann im Grunde kein Semikolon stehen. Ich bin zwar kein Pascal-Crack, aber paar Regeln kenne ich dann doch: jede Anweisung muss/wird in einem Block ausgeführt und das Semikolon gibt das Ende der Anweisung oder Blocks an.

Somit gibt es vor diesen Else kein Semikolon:
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;
denn auch wenn hier kein begin..end Block zwischen case..of und else steht, case..of und else sind ein Block. case..of wird mit einem end; abgeschlossen, nicht mit einem Semikolon wie bei einer If-Abfrage. Also, entweder bilden case..of und else einen Block oder case..of und end; . Womit es egal ist ob hier vor else ein Semokolon steht, denn das hat keinen Einfluß auf else . Denn das Semikolon ist in einem Block eingeschlossen.

Wo gibt es Blocks?
Delphi-Quellcode:
begin..end;
repeat..until
while..end;
try..except..else..end;
case..of..else..end;
usw.
Bei case..of..else bilden case..of und else einen Block, genau wie begin und end . Das Gleiche gilt für try..except..else . Somit sind das keine Ausnahmen, denn except..else bilden einen Block wie begin..end .

Bei if..then..else ist das anders. if..then else bilden keinen Block. Pascal geht somit davon aus, dass wenn zwischen then und else kein begin..end Block steht, es sich um eine einzelne Anweisung handelt. Und da man if..then mit und ohne else ausführen kann, sagt das Semikolon, dass hier die Abfrage zu ende ist. Wenn dann in der nächsten Zeile ein else auftaucht, dann ist es eine undefinierte Anweisung.

Geändert von Popov ( 1. Apr 2015 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 15:40
Ja, allerdings würde ich persönlich die Einrückung anders als in der Delphi Dokumentation setzen
Ich verstehe deine Motivation dafür nicht. Das Delphi-Doku-Beispiel ist doch super-übersichtlich und zeigt glasklar ein "Bei speziell A: Tue dies. Bei speziell B: Tue das. ANSONSTEN tue das".

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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz