AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Goto in andere Procedure...oder gibts ne Alternative?

Goto in andere Procedure...oder gibts ne Alternative?

Ein Thema von glkgereon · begonnen am 29. Aug 2005 · letzter Beitrag vom 29. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Goto in andere Procedure...oder gibts ne Alternative?

  Alt 29. Aug 2005, 15:05
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

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

  Alt 29. Aug 2005, 15:11
Hallo Gereon,

kennst du schon die Prozedur Assert()?

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

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

  Alt 29. Aug 2005, 15:13
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?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

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

  Alt 29. Aug 2005, 15:16
Warum löst du nicht einfach eine Exception aus, die du im unteren Teil (bei Ende) abfängst?
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

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

  Alt 29. Aug 2005, 15:18
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?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

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

  Alt 29. Aug 2005, 15:22
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

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

  Alt 29. Aug 2005, 15:26
ok, die exceptions-variante von Flocke überzeugt (mich)

und wieder einmal kein goto^^

danke!!!
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

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

  Alt 29. Aug 2005, 15:40
Hoffentlich schaut wenigstens Flocke mal in die Online-Hilfe - Assert (Prozedur) ...

Nachdenkliche Grüße vom marabu
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

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

  Alt 29. Aug 2005, 15:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#10

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

  Alt 29. Aug 2005, 15:55
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...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.
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