![]() |
Goto in andere Procedure...oder gibts ne Alternative?
hi
ja, ich versuche grade ein goto zu benutzen weil ich bisher keine praktikable andere Lösung gefunden hab :( erstmal was code:
Delphi-Quellcode:
ich denke das prinzip sollte klar sein...
label Ende; //SprungMarke
procedure Output(Error: Boolean; Value: String); begin if Error then begin WriteLn(Value+'Fehler'); GoTo Ende; end else WriteLn(Value+'OK'); end; begin OutPut(Init,'Init...'); OutPut(FileInit,'FileInit...'); OutPut(Analyse,'Analyse...'); OutPut(FileUnInit,'FileUnInit...'); OutPut(UnInit,'UnInit...'); Ende: ; end. alle anderen functions fangen eventuelle fehler ab, und geben diese in form eines booleans zurück...und falls es irgendwo einen fehler gibt hat es keinen sinn weiterzumachen... eine alternative wäre folgendes:
Delphi-Quellcode:
daher denke ich das oberes die besser lösung ist...
if Init then
if FileInit then if Analyse then ..... aber wie kann ich aus Output ans ende springen? es kommt so die Fehlermeldung Zitat:
|
Re: Goto in andere Procedure...oder gibts ne Alternative?
Hallo Gereon,
kennst du schon die Prozedur Assert()? Grüße vom marabu |
Re: Goto in andere Procedure...oder gibts ne Alternative?
Zitat:
aber man lernt nie aus :) Aber so wie ich das lese ist Assert doch dazu da um eine bedingung zu überprüfen, oder? |
Re: Goto in andere Procedure...oder gibts ne Alternative?
Warum löst du nicht einfach eine Exception aus, die du im unteren Teil (bei Ende) abfängst?
|
Re: Goto in andere Procedure...oder gibts ne Alternative?
Zitat:
aber es ist eine überlegung wert.... Exception.Create('bla'), oder? |
Re: Goto in andere Procedure...oder gibts ne Alternative?
Zitat:
Delphi-Quellcode:
procedure Output(Error: Boolean; Value: String);
begin if Error then raise Exception.Create(Value+'Fehler'); WriteLn(Value+'OK'); end; begin try OutPut(Init,'Init...'); OutPut(FileInit,'FileInit...'); OutPut(Analyse,'Analyse...'); OutPut(FileUnInit,'FileUnInit...'); OutPut(UnInit,'UnInit...'); except on E: Exception do WriteLn(E.Message); end; end. |
Re: Goto in andere Procedure...oder gibts ne Alternative?
ok, die exceptions-variante von Flocke überzeugt (mich) :)
und wieder einmal kein goto^^ danke!!! |
Re: Goto in andere Procedure...oder gibts ne Alternative?
Hoffentlich schaut wenigstens Flocke mal in die Online-Hilfe - Assert (Prozedur) ...
Nachdenkliche Grüße vom marabu |
Re: Goto in andere Procedure...oder gibts ne Alternative?
Hrmpf, oh Schreck...
Wann schlägt eine der Funktionen Fehl? Exceptions sind, wie Volker schon richtig bemerkte, Ausnahmen. Nichts für Dinge, die man erwartet, wie zum Beispiel eine Datei, die nicht vorhanden ist. Außerdem schlägt, wenn überhaupt, eine der Funktionen fehl, die etwas tun, nicht die Funktion Output. Man sollte also die Exception dort werfen, wo etwas fehlschlägt, ergo in den Funktionen, nicht dort, wo man Statusmeldungen ausgibt. Sind alle Fehlbedingungen zu erwarten (nicht vorhandene Datei, schusseliger User, der mal wieder Mist ins Edit-Feld geschrieben hat, sonstige Dinge), ist das Zurückgeben eines Fehlercodes die sauberste Möglichkeit, den restlichen Quellcode über den Fehler zu informieren. Und dann ist auch
Delphi-Quellcode:
die sauberste Möglichkeit, auf so einen Fehler zu reagieren.
if Init then
if FileInit then if Analyse then Oder aber, wenn die Anwendung gleich bei einem Fehler beendet werden soll (sieht mir nach Konsolenanwendung aus), ein Aufruf einer Funktion, der das sofortige Ende des Programmes zur Folge hat, z.B. Halt. |
Re: Goto in andere Procedure...oder gibts ne Alternative?
Zitat:
@tommie-lie: vom Prinzip sicher richtig...aber es funktioniert jetzt, und ich hab eigentlich keine lust alles nochmal umzubauen... zudem soll bei einem fehler ja nicht alles gekillt werden, sondern trotzdem noch die UnInit usw... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 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