![]() |
Aufrufende Prozedur verlassen
Hi!
Ich hätte da mal eine Frage (wer hätt's gedacht)... Ich habe mir eine Prozedur "Error" geschrieben:
Delphi-Quellcode:
Die wird immer dann aufgerufen, wenn ein schwerwiegender Fehler aufgetreten ist, sodass die Prozedur verlassen werden soll, in der der Fehler auftrat.
procedure Error(msg: String);
begin MessageDlg(msg,mterror,[mbOk],0); end; Momentan sieht das dann bspw. so aus:
Delphi-Quellcode:
Bedeutend schöner fände ich es jetzt allerdings, wenn die Error-Prozedur auch dieses Exit gleich mit veranlassen könnte. Geht das irgendwie?
if not IsSthSelected(Listbox1) then
begin Error('Sie müssen das Bild mindestens einem Gebäude zuordnen'); exit; end; Ciao Frederic |
Re: Aufrufende Prozedur verlassen
Nun ja.... Nein. Dazu müsste Error() die Stackgröße des Aufrufers kennen, den Stack bis zur Rücksprungadresse abräumen und dann erst zum Ende kommen. Geht bestimmt irgendwie, aber bestimmt nicht einfach^^
|
Re: Aufrufende Prozedur verlassen
Hi!
Hmm, das klingt wie eine "zu-Fuß-Lösung" ;) Wenn es nur eine solche gibt, bleibt es wie es ist. Ich dachte mir schon, dass es da nichts "schönes" gibt, aber ich wollt dann doch mal fragen. Ciao Frederic |
Re: Aufrufende Prozedur verlassen
Sowas erreichst du nur mit Exceptions, wenn du sie zu einem "höheren" Exception-Handler durchschlagen läßt. Ansonsten wüßte ich nicht, wie sich das in Delphi realisieren ...
|
Re: Aufrufende Prozedur verlassen
Wäre IMHO auch nicht sinnvoll, da ja die Ablauflogik/Programmfluß unterbrochen wäre.
|
Re: Aufrufende Prozedur verlassen
Hi!
Gut, dann habt ihr mich überzeugt :wink: Wie gesagt, ich dachte es mir, aber sicher ist sicher... Ciao Frederic |
Re: Aufrufende Prozedur verlassen
Zitat:
|
Re: Aufrufende Prozedur verlassen
Nein, die Tatsache, eine Prozedur/Funktion von einer aufgerufenden Prozedur/Funktion mitbeenden zu lassen.
|
Re: Aufrufende Prozedur verlassen
Wieso? Oft lass ich Exceptions auch bis ganz oben durchkommen, damait dann einfach eine Fehlermeldung kommt.
Wenn eine Vorrausetzung nicht gegeben ist - warum solltest du mit der Prozedur weitermachen ? |
Re: Aufrufende Prozedur verlassen
Zitat:
Aber mancher findet halt die C-Variante ganz gut, wo die Funktion Error() ja zumindest einen Rückgabewert haben könnte. Wodurch man dann in der selben Zeile mit einem "return Error(...)" die aufrufende Funktion verlassen kann :mrgreen: Ich persönlich stricke meinen Code in C immernoch lieber mit verschachtelten IFs statt mit kurzen IF-NOTs und return. Zitat:
Delphi-Quellcode:
täte es aber auch :-D ... oder noch "eleganter" (?):
function bla():TDingens;
begin if IsSthSelected(Listbox1) then begin // ... mach was end else begin Error('Sie müssen das Bild mindestens einem Gebäude zuordnen'); end; end;
Delphi-Quellcode:
function bla():TDingens;
begin if IsSthSelected(Listbox1) then begin // ... mach was end else Error('Sie müssen das Bild mindestens einem Gebäude zuordnen'); end; |
Re: Aufrufende Prozedur verlassen
Zitat:
Delphi-Quellcode:
Das ShowMessage aus DoSomething wird nicht mehr angezeigt, die Prozedur wurde also verlassen.
procedure DoSomething;
begin raise Exception.Create('Fehler'); ShowMessage('dumdidum'); end; procedure TForm1.Button1Click(Sender: TObject); begin try DoSomething; except on E: Exception do ShowMessage(E.Message); end; end; |
Re: Aufrufende Prozedur verlassen
Zitat:
|
Re: Aufrufende Prozedur verlassen
Ich habe es nur noch mal an einem Codebeispiel demonstriert, was soll daran arrogant sein? :?
|
Re: Aufrufende Prozedur verlassen
Zitat:
|
Re: Aufrufende Prozedur verlassen
Sorry, habe mich vertan, sollte nicht arrogant, sondern ignorant heißen. Ich wollte ihm eben nur mal ein kurzes Codebeispiel an die Hand geben.
|
Re: Aufrufende Prozedur verlassen
Hi!
Danke, ich werds mir anschauen! zu den if-Schachtelungen: Da es nicht nur eine Bedingung, sondern viele sind, gefällt mir diese Verschachtelei nicht. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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