![]() |
Re: Anfängerfrage IF - THEN - ELSE
if-Anweisungen sind return (das selbe wie Exit) vorzuziehen, zumindest meinte das unser Prof in Java. Grund: man kann den Breakpoint auf das Ende der Methode setzen (da wo das return steht) und sieht immer, was zurückgegeben wird. Wenn mittendrin irgendwo rausgesprungen wird, geht das nicht mehr.
Raise nicht zu benutzen is blödsinn, wie soll man denn sonst Exceptions werfen? |
Re: Anfängerfrage IF - THEN - ELSE
Moin, Moin,
sehe ich auch so wie meine Vorredner: GOTO ist fast immer vermeidbar, aber warum sollte ich die anderen Sprachelemente nicht nutzen? Wenn ich z.B. in einer unsortierten Liste nach einem Element suche, dann kann ich die Schleife - so das Element gefunden ist - doch sinnigerweise abbrechen: Mit BREAK funktioniert das ideal. BREAK verwende ich daher häufig - ohne dabei ein schlechtes Gewissen zu haben :lol: |
Re: Anfängerfrage IF - THEN - ELSE
stimmt, die gogo's goto, break, continue, halt, exit, return, raise exception sind in aller regel vermeidbar. was nicht heisst, dass sie nicht bequem sind... :-) . was aber nicht heisst, dass sie der strukturierten programmierung entsprechen. ganz im gegenteil, da sind diese verboten :warn: .
besonders anfänger sollten sich aber an zwei sachen gewöhnen
selbst halte ich das raise exception für ziemlich problematisch (problematischer als die grundform goto), sehe aber auch, dass diese anweisung für die objektübergreifende fehlerkommunikation sinnvoll eingesetzt werden kann. ansonsten würde ich hierauf möglichtst verzichten. Zitat:
PS: ich selbst hatte früher auch extensiv mit den oben genannten controllstrukturen gearbeitet, bis der compiler durcheinander kam und das progy nur noch wilde dinge tat. hier kam er wohl mit den rücksprungadressen 'n wenig durcheinander... von daher auch meine programmtechnische warnung, diese nur mit bedacht einzusetzen. |
Re: Anfängerfrage IF - THEN - ELSE
@grenzgaenger: Ich danke dir für deine Kommentare, ich sehe das genauso.
Wenigstens einer, der sinnvolle Regeln einhält und den Sinn verstanden hat. @Nuclear-Ping: Du favorisierst damit eine negative Logik. Ich persönlich denke gern positiv und ziehe deshalb genau die andere Lösung vor. |
Re: Anfängerfrage IF - THEN - ELSE
Hi,
könnten die Vorredner mal ein Beispiel zeigen, wie man ein Break bzw. ein raise ersetzt? |
Re: Anfängerfrage IF - THEN - ELSE
Ein break optimiert man mit einer boolschen Variable weg.
Und ein raise ist eine der erwähnten Ausnahmen. Die Fehlerbehandlung gehört nunmal nicht zur strukturierten Programmierung und ist deshalb die einzige Möglichkeit. Da es also keine Alternative gibt, ist raise ok. |
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
Delphi-Quellcode:
Nicht gerade so viel besser in der Perfomance:
for i := 0 to 1234 do
if i = 987 then break;
Delphi-Quellcode:
Das sollte am schnellsten von allen sein:
Breaked := false;
for i := 0 to 1234 do if not Breaked then begin if i = 987 then Breaked := true; end;
Delphi-Quellcode:
Wem i nur in der Schleife wichtig ist:
i := 0;
Breaked := false; while (i <= 1234) and (not Breaked) then begin if i = 987 then Breaked := true; end;
Delphi-Quellcode:
Und "raise" könnte man nur durch rückgabeparameter ablösen:
i := 0;
while (i <= 1234) then begin if i = 987 then i := 1235; end;
Delphi-Quellcode:
MfG
function Something : Integer;
begin Result := 0; <Mach das und das> if <Irgendwas falsch> then Result := 1; end; xZise |
Re: Anfängerfrage IF - THEN - ELSE
Nein, raise ersetzt man auf KEINEN fall mit rückgabeparametern.
Exceptions kann man nicht ignorieren, Rückgabewerte schon. // Edit: hähähä, Exceptions ignorieren kann man schon, aber dann kann man demjenigen Vorsatz vorwerfen:
Code:
try
{ foobar(); } catch(Exception) { } |
Re: Anfängerfrage IF - THEN - ELSE
Moin, Moin.
Ein Beispiel? Für BREAK, hier ist es...
Delphi-Quellcode:
MSDNList ist eine StringListe die Strings im Format MenuItem+'|'+WebAddress enthält, die Liste ist (und bleibt) klein (<100 Einträge), eine Element wird daraus gesucht. Natürlich kann man in einer sortierten Liste anders suchen, na klar!. Der Geschwindigkeitsunterschied bei einer so geringen Anzahl von Elementen ist m.E. akademisch! Aber gehen wir mal davon aus, dass wir mit einer unsortierten Liste arbeiten müssen! Insgesamt halte ich obige Funktion für effizient, übersichtlich und angemessen - oder ?????
function GetInternetAddr(MenuItem:String):String;
var i : Integer; begin Result:=''; for i:=0 to pred(MSDNList.Count) do if pos(MenuItem,MSDNList[i])>0 then begin Result:=MSDNList[i]; Break; end; end; |
Re: Anfängerfrage IF - THEN - ELSE
Hier mal die strukturierte Variante...
Delphi-Quellcode:
Edit: Eine For-Schleife benutzt man nie, wenn man die Schleife vorzeitig abbrechen möchte/muss.
function GetInternetAddr(MenuItem:String):String;
var i : Integer; abbruch:boolean; begin Result:=''; i:=0; abbruch:=false; while (i < MSDNList.Count) and not abbruch do begin if pos(MenuItem, MSDNList[i]) > 0 then begin Result:=MSDNList[i]; abbruch:=true; end; inc(i); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz