Delphi-PRAXiS
Seite 5 von 10   « Erste     345 67     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi goto-befehl in delphi? (https://www.delphipraxis.net/73851-goto-befehl-delphi.html)

Oxmyx 25. Jul 2006 00:34

Re: goto-befehl in delphi?
 
Zitat:

Zitat von omata
Da überlegt man sich den positiven Fall (nicht den Negativen), hab ich ja oben schon geschrieben.

Wie würdest du das konkret machen? Mit Bedingungen, wie in Luckies Beispiel? Mit einem Code, der zur Hälfte aus Exceptions besteht?

Luckie 25. Jul 2006 00:51

Re: goto-befehl in delphi?
 
Zitat:

Zitat von omata
Zitat:

Zitat von Luckie
Ging nicht, weil immer eine andere Fehlermeldung kommen musste.

Für solche Fälle gibt es Exceptions.

Und eine Exception ist im Endeffekt kein Sprungbefehl?

omata 25. Jul 2006 01:00

Re: goto-befehl in delphi?
 
Wie man sowas konkret löst? Naja, es ist eigentlich blödsinn sich hier auf solch eine Diskussion einzulassen. Weil ihr euch einfach ein paar Zeilen Code zusammen stellt, der völlig aus der Luft gegriffen und speziell mit Schwierigkeiten bepackt ist. Normalerweise löst man ein Problem und da muss man sich vielleicht mal fragen, ob man nicht vielleicht schon einen grundsätzlichen Desginfehler gemacht hat. Und man schon an ganz anderer Stelle etwas ändern muss, damit sich der Knoten der Problemstelle löst.

Aber nun gut, versuchen wir es mal mit der eingeschrängten Sichtweise...
Zitat:

Zitat von Luckie
Code:
if Belegnummer = 0 then
  exit
if Belegdatum = 0 then
  exit
if x = 0 then
  exit
if y = 0 then
  exit

wenn man da einen Rückgabewert realisieren muss, sieht das sowieso schonmal ganz anders aus...
Code:
if Belegnummer = 0 then begin
  Result:='Fehler: Belegnummer';
  exit;
end;
if Belegdatum = 0 then begin
  Result:='Fehler: Belegdatum';
  exit;
end;
if x = 0 then begin
  Result:='Fehler: x';
  exit;
end;
if y = 0 then begin
  Result:='Fehler y';
  exit;
end;
und nunmal ohne exit...
Code:
fehler:='';
if Belegnummer = 0 then
  fehler:='Fehler: Belegnummer'
else if Belegdatum = 0 then
  fehler:='Fehler: Belegdatum'
else if x = 0 then
  fehler:='Fehler: x'
else if y = 0 then
  fehler:='Fehler: y';

if fehler = '' then
  // mache was, es ist alles ok
Result:=fehler;
Zitat:

Zitat von Luckie
Und eine Exception ist im Endeffekt kein Sprungbefehl?

Ich habe nie behauptet, das Exceptions keine Sprungbefehle sind. Aber meine Aussage, um die es in Wirklichkeit ging nämlich das man kein exit, goto, break braucht, wird dadurch nicht entkräftet.

Gruss
Thorsten

JasonDX 25. Jul 2006 01:23

Re: goto-befehl in delphi?
 
Zitat:

Zitat von omata
Aber meine Aussage, um die es in Wirklichkeit ging nämlich das man kein exit, goto, break braucht, wird dadurch nicht entkräftet.

Natürlich nicht.
Aber ums mal so zu sagen: Ich komme in einem Programm auch ohne goto, break und exit aus. Ich komme auch ohne for- und while-schleifen aus, und kann auch auf if-abfragen verzichten. Ich kann jegliches Programmkonstrukt hinter mir lassen, weil es mir nicht gefällt oder ich es verabscheue.
Aber lediglich, weil sie nicht in meinen Verwendungszweck fallen, sind sie noch lange nicht überflüssig oder unbrauchbar. Ich verwende exits und breaks, genauso wie for- und whileschleifen, sowie if-abfragen. Natürlich kann ich jedes Problem ohne sie lösen, aber mir fällt die Problemlösung leichter, wenn ich sie verwende. Und genau damit wäre diese Aussage
Zitat:

Zitat von omata
folgende Befehle sind überflüssig: exit, goto, break

widerlegt. Mir helfen sie bei meiner Problemlösung und haben somit ihre Daseinsberechtigung.

greetz & gute nacht
Mike

Neotracer64 25. Jul 2006 04:19

Re: goto-befehl in delphi?
 
Argument Nr.1 Wartbarkeit/Übersichtlichkeit:

Benutze "goto, break, exit" dann, wenn es die Wartbarkeit/Übersichtlichkeit begünstigt und sonst einfach nicht. Je nachdem wie es besser passt.

Argument Nr.2 ordentliche strukturierte Programmierung

Sollte man lernen - Ohne Frage - Aber ein erfahrener Entwickler, der ein goto in einem bestimmten Fall als einfacher/ besser/schneller/wartbarer hält kann das doch wohl einbauen. Es tangiert ja sonst keinen.

Real_Thunder 25. Jul 2006 04:56

Re: goto-befehl in delphi?
 
Meine Rede....

und zwischen einem Goto oder einem Break / Exit, ist ja auch noch ein Unterschied,

in alten programmiersprachen gab es wenig bis keie Alternativen zum GOTO

Je mehr jemand ahnung vom Programmieren hat, desto Struckturierter werden die Probramme..
Nach und nach werden die Goto's dann auch weniger...
Spätestens wenn man sich nach der 20. Sprungmarke nicht mehr zurechtfindet...

Schaut mal auf die Überschrift.

Es war nur ne Frage ob es geht.. und in wie fern es Sinnvoll ist...
Eshat schon einen grung, weshalb die Befehle noch existieren...
jemand der seinen Source kennt.. und weiß das er mit einem goto 30 Zeilen Code Einsparen kann..

man, dann soll er es reinsetzten....

und von der logik her ist goto leicht zu verstehen..... und sprungmarken sind zu 100 % NÖTIG

ob es nun SUB Routinen im Sinne von Proceduren oder Funktionen sind.....

und man kann nicht erwarten das gleich jeder der nicht lange prgrammiert, sich die Programme von vorne weg zurechtschreibt, dass er keine abfrangen in einer schleife hat...

wenn ich ne bestimmte varible in einem array suche, dann kann ich dieses mit einer schleife durchgehen, und beim richtigen break setzten...

Wenn man das ganze Weiterführt.. dann kann man komplette If Struckturen überflüssig nennen..

Dazu gibt es auch viele alternativen....


Naja ich denke mal der Ganze kram ist genug Durchgekaut worden.....

Hansa 25. Jul 2006 09:38

Re: goto-befehl in delphi?
 
Mann mann, sogar mit Moderatorenhilfe werden Argumente gegen eine strukturierte Programmierung gesammelt. Ich glaub ich bin im falschen Film. :shock:

Zitat:

Zitat von Luckie
Und was ist ein Exit oder Break, wenn nicht ein goto?

Luckie, das könnte man tatsächlich als eine Art von goto ansehen ! Aber das kann man doch nicht als Argument nutzen, solche Sachen zu forcieren. Exit oder Break sind lokal beschränkt und man kann sich höchstens in einer function/Procedure oder Schleife selber überholen. Mit einem Goto springe ich notfalls mitten in einen uninitialisierten Prozess. Omata geht ja noch weiter als ich. Der war/ist bestimmt auf Uni. Da lernt man, solche Sachen am Besten nicht zu benutzen. Jetzt kommen nooch einige und sagen : goto gehört zum Sprachumfang, warum soll ich es denn dann nicht benutzen ? Ganz einfach, sofern man weiß, warum das überhaupt in Pascal drin ist : es ist lediglich ein Zugeständnis an Umsteiger, hauptsächlich von Basic her. 1972 hat Wirth die ersten Studenten an Pascal drangelassen. Die mußten dann lernen, wie sie die Gotos aus ihren Basic Programmen eliminieren, um so was in Zukunft eben nicht mehr zu gebrauchen ! Was ist eigentlich mit objektorientierter Programmierung ? Goto hat in dieser Welt einfach nichts zu suchen und fertig. Und wenn einer in "hunderttausenden" Programmzeilen nur einmal goto benötigt, dann frage ich mich, warum er alleine aus ästhetischen Gründen dieses nicht auch noch elimininiert.

Vorsichtshalber habe ich jetzt mal mit grep die VCL auf gotos untersucht, ob sich da eventuell ein Hinweis findet, wo sie Sinn machen : ja, das Wort taucht tatsächlich zweimal auf ! In 2 Kommentaren. :mrgreen:

sakura 25. Jul 2006 10:04

Re: goto-befehl in delphi?
 
Zitat:

Zitat von omata
folgende Befehle sind überflüssig: exit, goto, break das sind Befehle, die nicht zu einer strukturierten Programmierung gehören.

Hm komisch, break und continue sind recht junge Sprachkonstrukte in Delphi. Glaubst Du wirklich, man hätte die eingeführt, wenn die nicht dazu gehören. Ich weiß nicht mehr wann die kamen, aber es war "gegen" Delphi 3, so circa ;)

...:cat:...

Hansa 25. Jul 2006 10:27

Re: goto-befehl in delphi?
 
Zitat:

Zitat von sakura
..Hm komisch, break und continue sind recht junge Sprachkonstrukte in Delphi.

Auch das stimmt und ist der Grund dafür, daß so was in meinen Programmen mal nicht zu finden ist. Daraus könnte man ja auch den Umkehrschluß ziehen, daß man es eben nicht braucht. Ich sage mal, es ist ein neueres Zugeständnis an die Delphi-Verwandschaft, insbesondere für Schreibfaule, siehe Luckie. :mrgreen: Der mögliche Schaden ist durchaus begrenzt und ein erfahrener Programmierer kommt locker damit klar. Schließlich geht es da nur um eine einzelne Spaghetti, die vielleicht nicht genau in der Mitte geteilt wurde, was allerdings geplant war. Gotos sind dafür verantwortlich eine größere Menge Spaghetti-Code zu produzieren, wo man wirklich nicht mehr sagen kann wo Anfang und Ende einer Nudel genau ist. :cat: Wo ist Alzaimer ? Der kennt sich damit aus.

Luckie 25. Jul 2006 10:31

Re: goto-befehl in delphi?
 
Zitat:

Zitat von Hansa
Mit einem Goto springe ich notfalls mitten in einen uninitialisierten Prozess.

Nein, mit einem Goto kan man auch nicht prozedurübergreifend springen.

Zitat:

Der war/ist bestimmt auf Uni. Da lernt man, solche Sachen am Besten nicht zu benutzen.
Auf der Uni lernt man auch vieles, was mit der Realität nicht viel genmein hat.

Zitat:

Jetzt kommen nooch einige und sagen : goto gehört zum Sprachumfang, warum soll ich es denn dann nicht benutzen ? Ganz einfach, sofern man weiß, warum das überhaupt in Pascal drin ist : es ist lediglich ein Zugeständnis an Umsteiger, hauptsächlich von Basic her. 1972 hat Wirth die ersten Studenten an Pascal drangelassen. Die mußten dann lernen, wie sie die Gotos aus ihren Basic Programmen eliminieren, um so was in Zukunft eben nicht mehr zu gebrauchen ! Was ist eigentlich mit objektorientierter Programmierung ? Goto hat in dieser Welt einfach nichts zu suchen und fertig. Und wenn einer in "hunderttausenden" Programmzeilen nur einmal goto benötigt, dann frage ich mich, warum er alleine aus ästhetischen Gründen dieses nicht auch noch elimininiert.
Schöne Begründung. Aber wie Neotracer64 schon gesagt hat, es gibt Gründe es zu benutzen:
Zitat:

Benutze "goto, break, exit" dann, wenn es die Wartbarkeit/Übersichtlichkeit begünstigt und sonst einfach nicht. Je nachdem wie es besser passt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.
Seite 5 von 10   « Erste     345 67     Letzte »    

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