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 Goto in andere Procedure...oder gibts ne Alternative? (https://www.delphipraxis.net/52394-goto-andere-procedure-oder-gibts-ne-alternative.html)

glkgereon 29. Aug 2005 14:05


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:
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.
ich denke das prinzip sollte klar sein...

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:
if Init then
  if FileInit then
    if Analyse then
.....
daher denke ich das oberes die besser lösung ist...

aber wie kann ich aus Output ans ende springen?
es kommt so die Fehlermeldung
Zitat:

[Fehler] Project1.dpr(16): E2093 Label 'Ende' ist in der aktuellen Prozedur nicht deklariert

marabu 29. Aug 2005 14:11

Re: Goto in andere Procedure...oder gibts ne Alternative?
 
Hallo Gereon,

kennst du schon die Prozedur Assert()?

Grüße vom marabu

glkgereon 29. Aug 2005 14:13

Re: Goto in andere Procedure...oder gibts ne Alternative?
 
Zitat:

Zitat von marabu
Hallo Gereon,

kennst du schon die Prozedur Assert()?

Grüße vom marabu

Ehrlich gesagt: Nein

aber man lernt nie aus :)


Aber so wie ich das lese ist Assert doch dazu da um eine bedingung zu überprüfen, oder?

Flocke 29. Aug 2005 14:16

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?

glkgereon 29. Aug 2005 14:18

Re: Goto in andere Procedure...oder gibts ne Alternative?
 
Zitat:

Zitat von Flocke
Warum löst du nicht einfach eine Exception aus, die du im unteren Teil (bei Ende) abfängst?

ist es logischer eine exceptions zu werfen, die zu 100% abgefangen wird?
aber es ist eine überlegung wert....

Exception.Create('bla'), oder?

Flocke 29. Aug 2005 14:22

Re: Goto in andere Procedure...oder gibts ne Alternative?
 
Zitat:

Zitat von glkgereon
ist es logischer eine exceptions zu werfen, die zu 100% abgefangen wird?
aber es ist eine überlegung wert....

Exception.Create('bla'), oder?

Wieso zu 100%? Ich denke nur dann, wenn ein Fehler auftritt, oder? ... und das sollte ja eher die "Ausnahme" sein (dann im wahrsten Sinne des Wortes).

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.

glkgereon 29. Aug 2005 14:26

Re: Goto in andere Procedure...oder gibts ne Alternative?
 
ok, die exceptions-variante von Flocke überzeugt (mich) :)

und wieder einmal kein goto^^

danke!!!

marabu 29. Aug 2005 14:40

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

tommie-lie 29. Aug 2005 14:40

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:
if Init then
  if FileInit then
    if Analyse then
die sauberste Möglichkeit, auf so einen Fehler zu reagieren.

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.

glkgereon 29. Aug 2005 14:55

Re: Goto in andere Procedure...oder gibts ne Alternative?
 
Zitat:

Zitat von marabu
Hoffentlich schaut wenigstens Flocke mal in die Online-Hilfe - Assert (Prozedur) ...

Nachdenkliche Grüße vom marabu

Meine Onlinehilfe (D2k5) kennt Assert nicht.

@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 21:42 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