![]() |
Anfängerfrage IF - THEN - ELSE
Hallo zusammen,
ich möchte eine procedure bei bestimmten Bedingungen beenden. Wie geht das? procedure TForm1.Taste2Click(Sender: TObject); begin if Form1.ADOConnection1.Connected = false then messageDlg('Noch nicht mit der Datenbank verbunden.',mtError,[mbOK],0); ------------hier soll dann Schluss sein -------------- oder hier soll es bei ...=true weiter gehen........... end; Danke schon mal Heiko |
Re: Anfängerfrage IF - THEN - ELSE
hi,
Delphi-Quellcode:
procedure TForm1.Taste2Click(Sender: TObject);
begin if not Form1.ADOConnection1.Connected then begin messageDlg('Noch nicht mit der Datenbank verbunden.',mtError,[mbOK],0); exit; end else (*Deine Befehle*) ; |
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
|
Re: Anfängerfrage IF - THEN - ELSE
wie das mit dem IF THEN ELSE funktioniert ist mir schon so einigermaßen klar.
Ich möchte aber die Procedure aber beenden wenn bestimmte Bedingungen nicht erfüllt sind. Sprich, es soll gleich zu END 'gesprungen' werden. |
Re: Anfängerfrage IF - THEN - ELSE
Delphi-Quellcode:
Exit;
|
Re: Anfängerfrage IF - THEN - ELSE
Das Exit ist IMHO nicht unbedingt nötig.
Delphi-Quellcode:
procedure TForm1.Taste2Click(Sender: TObject);
begin if not Form1.ADOConnection1.Connected then begin MessageDlg('Noch nicht mit der Datenbank verbunden.',mtError,[mbOK],0); end else begin (* Mit der DB arbeiten *) end; end; |
Re: Anfängerfrage IF - THEN - ELSE
Am besten niemals aus True oder False fragen ;)
Delphi-Quellcode:
so ist es besser..
if not Form1.ADOConnection1.Connected then
Delphi-Quellcode:
if not WAHR then // ...
if WAHR then // ... |
Re: Anfängerfrage IF - THEN - ELSE
Was willst Du mir damit sagen? Ich benutze doch not :gruebel:
|
Re: Anfängerfrage IF - THEN - ELSE
Er bezieht sich auf den original Source, Detlef.
|
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
|
Re: Anfängerfrage IF - THEN - ELSE
Weil Deine Fassung die bessere ist. Steht doch drunter: "So ists besser".
Der Rest des Sources ist nur noch mal Verdeutlichung. |
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
Vote4DeddyH :-) |
Re: Anfängerfrage IF - THEN - ELSE
[OT]
Zitat:
|
Re: Anfängerfrage IF - THEN - ELSE
[OT]
mal Wischlappen und Eimer zum grenzgaenger stellt...*schleimspurentfernen* *fg* :bounce2:[/OT] |
Re: Anfängerfrage IF - THEN - ELSE
ja, das war es.
EXIT ist das Zauberwort, danach habe ich gesucht. vielen Dank noch mal |
Re: Anfängerfrage IF - THEN - ELSE
ihr wisst schon, dass man die goto anweisungen (goto, break, continue, exit, raise exception) nur in ganz wenigen ausnahmefällen verwenden darf, da man sich sonst sehr viel mehr ärger einhandelt. :warn:
|
Re: Anfängerfrage IF - THEN - ELSE
Nämlich?
|
Re: Anfängerfrage IF - THEN - ELSE
[OT]Klar man bekommt ärger mit dem grenzgaenger wenn er das liesst -.-
Sry konnte ich mir net verkneifen[/OT] |
Re: Anfängerfrage IF - THEN - ELSE
Gut, goto benutze ich auch nicht, aber break, continue, exit und raise Exception benutze ich schon des öfteren, und ich glaube, dass das nur Probleme bringt, wenn man nicht weiß, wie man das zu benutzen hat... von daher sollte man das vielleicht nicht so stehen lassen.
|
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
Ich persönlich favorisiere ...
Delphi-Quellcode:
... vor ...
procedure TForm1.ButtonDeleteClick(Sender: TObject);
begin if not MessageDlg ('Sicher?', mtConfirmation, [mbYes, mbNo], 0) = IDNO then Exit; DeleteFiles; RefreshView; end;
Delphi-Quellcode:
... Macht zwar das gleiche, aber meine Leertaste wirds mir danken. ;)
procedure TForm1.ButtonDeleteClick(Sender: TObject);
begin if MessageDlg ('Sicher?', mtConfirmation, [mbYes, mbNo], 0) = IDYES then begin DeleteFiles; RefreshView; end; end; |
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; |
Re: Anfängerfrage IF - THEN - ELSE
Hallo omata,
ich sehe in deiner Variante, die selbstverständlich funktioniert, keinen Vorteil; ich halte sie sogar für ineffizient: Sie benötigt mehr Tipparbeit, ist (für mich) unübersichtlicher und mit Sicherheit nicht schneller. Warum sollte ich dieses Konstrukt einsetzen? Nur um das Break zu vermeiden? |
Re: Anfängerfrage IF - THEN - ELSE
Das musst du natürlich für dich entscheiden.
Ich hatte noch nie Probleme mit dem Tippen. Wie auch immer ich versuche eben strukturiert zu programmieren. Das muss man ja nicht, wenn dir das egal oder nicht wichtig ist ist das nunmal so. Trotzdem finde ich es eben sinnvoll einem Anfänger nicht gleich die "bösen" Befehle beizubringen, nur weil man selber zu "faul" ist. Ok, wenn man es nicht besser weiss ist das nunmal so, deshalb ergibt so sein Thread immer gleich so eine riesige Grundsatzdiskussion. Wenn die Anwendungen großer werden, ist es nunmal sinnvoll struktiriert zu arbeiten. Ich persönlich weiss meist nicht gleich das die Anwendung, die ich beginne riesig wird. Deshalb designe ich das gleich ordentlich, weil ich mich eben kenne. Das wird nachträglich nicht mehr angepasst, nach dem Motto läuft doch. Wenn es dann aber irgendwann an irgendeiner Stelle Probleme gibt dann viel Spass bei der Fehlersuche. Deshalb finde ich solche Threads dann irgendwann nur noch bedauerlich, wenn es nur noch darum geht für die unstrukturierten Befehle eine Daseinsberechtigung zu finden. Deshalb die einfache Frage warum nicht gleich ordentlich und strukturiert arbeiten? Nur weil es angeblich Tipparbeit bedeutet? |
Re: Anfängerfrage IF - THEN - ELSE
Faulheit ist bekanntlich die Mutter aller Erfindungen :)
PS: Das heißt nich, dass ich Spaghetti-Code befürworte.. |
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
und mal ehrlich, wieviele threads hier gehen auf kosten von schlechten einrückungen und daraus resultierenden fehlern? 10%, 20%? |
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
Bevor du fragst: Ich kann dir nicht die Funktionsnamen nennen, aber ich glaube das sind API-Funktionen. MfG xZise |
Re: Anfängerfrage IF - THEN - ELSE
Omata, ich gebe dir prinzipiell Recht - keine Frage! Insbesondere, dass viele Sources fast immer länger und umfangreicher werden, als ursprünglich eingeschätzt.
Was an meinem Beispiel aber so unstrukturiert ist, das erschließt sich mir beim besten Willen nicht. // OT - Das können wir bei einem Milchkaffee im "Venezia" besprechen! |
Re: Anfängerfrage IF - THEN - ELSE
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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