Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Fr 03.07.09 01:02 
user profile iconReinhard Kern hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
{schreibe ich lieber}
if not FileExists (..) then exit;
if not FileIsOpen (..) then exit;
if not Assigned (..) then exit;


In dem einen Fall ist es ja ok, aber schreib mal das:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
if not FileExists (..) then
  if not FileIsOpen (..) then exit
else
 (..);


Auch wenn man das Problem hier vielleicht nicht sofort erkennt und das Beispiel nicht besonders ist (auf die Schnelle fällt mir nicht besseres ein), aber wie leicht hat man bei verschachtelten ifs andere Ergebnisse als man dachte.

_________________
Popov
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 03.07.09 01:09 
Dafür gibt es ja CnWizards oder andere (meist kommerzielle) Tools, die diese Fehler sofort sichtbar machen.
Zumindest, wenn man es ordentlich (und in dem Fall falsch) einrückt.

Und zudem automatische Codeformatter, die das auch sofort aufdecken.

Beides unter der Voraussetzung, dass man mit den Ergebnissen auch etwas anfangen kann. :mrgreen:
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 03.07.09 02:23 
user profile iconPopov hat folgendes geschrieben Zum zitierten Posting springen:
In dem einen Fall ist es ja ok, aber schreib mal das:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
if not FileExists (..) then
  if not FileIsOpen (..) then exit
else
 (..);

...


Hallo,

wahrscheinlich ist es schon zu spät in der Nacht, aber vielleicht hilfst du mir auf die Sprünge (schreckliches Wort um die Uhrzeit) - ich komme nicht drauf, wann ein else nach einem exit sinnvoll ist. Nach einem "if Abbruchbedingung then exit" ist doch alles weitere sowieso der Else-Zweig?

Übrigens gerade wegen der Übersicht verschachtele ich die Ifs eben nicht, im Gegensatz zur Lehrmeinung. Meine bevorzugte Struktur ist
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if Abbruchbedingung1 then exit;
if Abbruchbedingung2 then exit;
if Abbruchbedingung3 then exit;
  { und vielleicht noch }
if Abbruchbedingung4 then 
  begin
  Closefile;
  File.Delete;
  exit;
  end;


Ist praktiziertes KISS-Prinzip.

Gruss Reinhard

exit;