Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Aufrufende Prozedur verlassen (https://www.delphipraxis.net/70301-aufrufende-prozedur-verlassen.html)

fkerber 28. Mai 2006 12:35


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:
procedure Error(msg: String);
begin
  MessageDlg(msg,mterror,[mbOk],0);
end;
Die wird immer dann aufgerufen, wenn ein schwerwiegender Fehler aufgetreten ist, sodass die Prozedur verlassen werden soll, in der der Fehler auftrat.

Momentan sieht das dann bspw. so aus:

Delphi-Quellcode:
 if not IsSthSelected(Listbox1) then
  begin
    Error('Sie müssen das Bild mindestens einem Gebäude zuordnen');
    exit;
  end;
Bedeutend schöner fände ich es jetzt allerdings, wenn die Error-Prozedur auch dieses Exit gleich mit veranlassen könnte. Geht das irgendwie?


Ciao Frederic

Dax 28. Mai 2006 12:37

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^^

fkerber 28. Mai 2006 12:38

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

Olli 28. Mai 2006 12:39

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 ...

mkinzler 28. Mai 2006 12:42

Re: Aufrufende Prozedur verlassen
 
Wäre IMHO auch nicht sinnvoll, da ja die Ablauflogik/Programmfluß unterbrochen wäre.

fkerber 28. Mai 2006 12:43

Re: Aufrufende Prozedur verlassen
 
Hi!

Gut, dann habt ihr mich überzeugt :wink:
Wie gesagt, ich dachte es mir, aber sicher ist sicher...


Ciao Frederic

Olli 28. Mai 2006 12:44

Re: Aufrufende Prozedur verlassen
 
Zitat:

Zitat von mkinzler
Wäre IMHO auch nicht sinnvoll, da ja die Ablauflogik/Programmfluß unterbrochen wäre.

Meinst du Exceptions? Im Gegenteil, es gibt viele Leute die es für den saubereren Programmierstil halten den Exceptionhandler irgendwo weit "oben" anzusiedeln und Exceptions durchschlagen zu lassen. So behandelt man die Exceptions nämlich nur an wenigen ausgewählten Stellen statt überall im Code verstreut.

mkinzler 28. Mai 2006 12:48

Re: Aufrufende Prozedur verlassen
 
Nein, die Tatsache, eine Prozedur/Funktion von einer aufgerufenden Prozedur/Funktion mitbeenden zu lassen.

jfheins 28. Mai 2006 12:50

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 ?

Olli 28. Mai 2006 12:52

Re: Aufrufende Prozedur verlassen
 
Zitat:

Zitat von mkinzler
Nein, die Tatsache, eine Prozedur/Funktion von einer aufgerufenden Prozedur/Funktion mitbeenden zu lassen.

Das stimmt.

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:

Zitat von jfheins
Wenn eine Vorrausetzung nicht gegeben ist - warum solltest du mit der Prozedur weitermachen ?

Ein ...
Delphi-Quellcode:
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;
täte es aber auch :-D ... oder noch "eleganter" (?):
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz