Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Sinnvoller Einsatz von goto (https://www.delphipraxis.net/149370-sinnvoller-einsatz-von-goto.html)

himitsu 22. Mär 2010 12:57

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von Progman
Und dass ein Arbeitgeber vorgibt, in welchem Stil programmiert werden muss, hab ich noch nie gehört.

Das bezog sich vorwiegend auf Softwarefiremen wo der Programmierer dann angestellt wäre und wo dann womöglich auch noch Mehrere an dem Projekt arbeiten.
Dort gibt es oftmals entsprechende Vorgaben, damit der Code innerhalb der Firma "gleich" aussieht und damit natürlich auch alle den Code dann besser verstehen können.
> also meist existiert da ein entsprechender Style-Guide

Neutral General 22. Mär 2010 13:01

Re: Sinnvoller Einsatz von goto
 
Vor allem ist "Auftraggeber" nicht unbedingt gleich "Arbeitgeber"!

Dem Auftraggeber kann der Code und die verwendete Programmiersprache egal sein. Dem Arbeitgeber aber noch lange nicht!

Luckie 22. Mär 2010 13:01

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von Progman
Und dass ein Arbeitgeber vorgibt, in welchem Stil programmiert werden muss, hab ich noch nie gehört.

Natürlich gibt es firmeninterne Styleguides, wie Code zu formatieren ist. Vielleicht nicht in jeder Firma aber in größeren bestimmt. Und wenn man im Team arbeitet ist es fast unumgänglich, dass man sich da einigt.

Zitat:

Dem Auftraggeber ist es meist sogar egal, in welcher Sprache gearbeitet wird. Hauptsache seine Vorgaben werden erfüllt.
Richtig.
Zitat:

Wir machen Software, die verkauft werden soll und nicht, welche um den besten Programmierstil wetteifert. Das intrweressiert den Käufer nicht die Bohne *g*
Dann viel Spass, wenn der Kund ein zwei Jahren wiederkommt und etwas geändert haben will. Und wenn dann noch der ursprüngliche Programmierer nicht mehr da ist, kann das ziemlich teuer werden für euch, wenn man sich da erst stundenlang einarbeiten muss, um den Quelltext zu verstehen. Klar, wenn ich den Code einfach nur hinrotze und nur zu sehe, dass er irgendwie läuft, egal wie, bin ich zwar schnell und kostengünstig fertig, aber später wird man da um so mehr drauflegen.

Hansa 22. Mär 2010 13:17

Re: Sinnvoller Einsatz von goto
 
Äh, merkt denn hier keiner, dass über den Schnee von vor 40 Jahren diskutiert wird ? :shock: Alle Jahre wieder oder was ? :zwinker: Ich vermute mal, dass das Goto lediglich im Ur-Pascal vorhanden war, damit Umsteiger von Basic nicht direkt an neueren Schleifen etc. scheitern. That's it. Exit gabs übrigens schon vor BP 7. Hatte das auch gern eingesetzt. Irgendwann hatte ich dann aber gemerkt, dass es mehr ärgerliche Quereffekte verursacht, als es wert ist. Was heisst nun sinnvoll ? IMHO, auf diesen uralten goto-Firlefanz grundsätzlich zu verzichten. 8-) Warum soll man etwas mit goto machen, nur weil es auch gehen würde ? Vorteile hat es jedenfalls keine. Ausser, sich darüber zu streiten, was nun lesbarer ist ? Wenn mir ein Beispiel-Quelltext auf den Tisch käme, der mehr als 0 gotos beinhaltet, dann womöglich direkt -> Tonne. :mrgreen:

Progman 22. Mär 2010 13:26

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Progman
Und dass ein Arbeitgeber vorgibt, in welchem Stil programmiert werden muss, hab ich noch nie gehört.

Natürlich gibt es firmeninterne Styleguides, wie Code zu formatieren ist. Vielleicht nicht in jeder Firma aber in größeren bestimmt. Und wenn man im Team arbeitet ist es fast unumgänglich, dass man sich da einigt.

Zitat:

Dem Auftraggeber ist es meist sogar egal, in welcher Sprache gearbeitet wird. Hauptsache seine Vorgaben werden erfüllt.
Richtig.
Zitat:

Wir machen Software, die verkauft werden soll und nicht, welche um den besten Programmierstil wetteifert. Das intrweressiert den Käufer nicht die Bohne *g*
Dann viel Spass, wenn der Kund ein zwei Jahren wiederkommt und etwas geändert haben will. Und wenn dann noch der ursprüngliche Programmierer nicht mehr da ist, kann das ziemlich teuer werden für euch, wenn man sich da erst stundenlang einarbeiten muss, um den Quelltext zu verstehen. Klar, wenn ich den Code einfach nur hinrotze und nur zu sehe, dass er irgendwie läuft, egal wie, bin ich zwar schnell und kostengünstig fertig, aber später wird man da um so mehr drauflegen.

Nunja, wir sind nur eine kleine Firma und wir haben nur 2 Programmierer. Ich arbeite in Delphi während der andere alles andere (Flash etc.) macht und das seit über 10 Jahren. Mein Chef ist damit beschäftigt, ständigen Kontakt mit unseren Auftraggebern zu halten, so dass wir immer zu tun haben. Die Programme, die ich mache bzw. betreue, erfahren jedes Jahr eine Neuauflage (Design, manchmal auch Inhalt). Und ich gestalte meinen Code, wie ich es für sinnvoll halte. Wir machen halt Software, die nicht gewartet werden muss, da sie eh jedes Jahr neu gemacht wird.
Daher ist eben für mich dieses "Programmieren nach Vorschrift" irrelevant ;)

Luckie 22. Mär 2010 13:50

Re: Sinnvoller Einsatz von goto
 
Auch wenn es langsam offtopic wird, aber nur damit ich das richtig verstehe. Du schreibst jedes Jahr das komplette Programm neu, wenn der Kunde etwas geändert oder erweitert haben will? Kannst du mir mal bitte sagen, was das soll und warum du das machst?

Progman 22. Mär 2010 14:24

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von Luckie
Auch wenn es langsam offtopic wird, aber nur damit ich das richtig verstehe. Du schreibst jedes Jahr das komplette Programm neu, wenn der Kunde etwas geändert oder erweitert haben will? Kannst du mir mal bitte sagen, was das soll und warum du das machst?

Ich schreibe es nicht neu sondern gestalte es neu (meist nur äußerlich). Der "Code-Kern" bleibt gleich. Es gibt einfach jedes Jahr eine Neuauflage.
Und dass ein Kunde (das wäre in diesem Fall z.B. ein MediaMarkt-Kunde, der das Teil für 9,99 gekauft hat) etwas geändert haben wollte, ist noch nie vorgekommen. Wäre ja auch irgendwie absurd *g*
Zumal die Programme unter dem Namen unseres Auftraggebers erscheinen und unsere Firma da eigentlich unerwähnt ist.

Tyrael Y. 22. Mär 2010 15:30

Re: Sinnvoller Einsatz von goto
 
Wenn es um die Lesbarkeit geht ist folgende Variante, angelehnt ans Cristian Seehase´s Version noch lesbarer.

Delphi-Quellcode:
function DemoThread(const AParentHandle : THandle): Integer;
var
  i: Integer;
begin
  for i := 0 to 9 do
  begin
    if Abort then
    begin
      SendAbort(AParentHandle );
      break;
    end else
    begin
      SendStatus(AParentHandle, i);
      Sleep(500);
    end;
  end;

  if not Abort then
  begin
    SendFinished(AParentHandle);
    Result := 0;
  end;
end;

procedure SendAbort(const AParentHandle : THandle);
begin
  SendMessage(AParentHandle, CM_ABORT, 0 , 0);
end;

procedure SendStatus(const AParentHandle : THandle; index: Integer);
begin
  SendMessage(AParentHandle, CM_STATUS, Integer(PChar('Durchlauf:')), index);
end;

procedure SendFinished(const AParentHandle : THandle);
begin
  SendMessage(AParentHandle, CM_FINISHED, 0, 0);
end;
Jeder soll programmieren wie er selber meint den Code am Besten lesen zu können, denn in 80% der Fälle wird der Verfasser auch den Code lesen.

himitsu 22. Mär 2010 16:09

Re: Sinnvoller Einsatz von goto
 
Zitat:

Zitat von Tyrael Y.
Wenn es um die Lesbarkeit geht ist folgende Variante,

Wenn ich mich nicht irre, sollte der Compiler hier etwas vonwegen "Result könnte undefiniert sein" von sich geben.

shmia 22. Mär 2010 17:26

Re: Sinnvoller Einsatz von goto
 
Noch etwas Öl oder Code für's Feuer. :stupid:
Also ich habe bei dieser Funktion noch keinen Weg gefunden, es ohne Goto elegant zu formulieren.
Delphi-Quellcode:
// Prüft, ob eine Datei für den Import vorhanden ist.
// Falls nicht, kann der Benutzer entscheiden, was passieren soll
function CheckImportFile(const fname: TFilename; const Caption:string): Boolean;
var
   msg: string;
label again;
begin
   again:
   if not FileExists(fname) then
      msg := Format('Datei <%s> ist nicht vorhanden', [fname])
   else if FileGetSize(fname) = 0 then
      msg := Format('Datei <%s> ist leer', [fname])
   else
      msg := '';

   if msg <> '' then
   begin
      case MessageBox(0, PChar(msg), PChar(Caption), MB_ICONWARNING or MB_ABORTRETRYIGNORE or MB_SETFOREGROUND) of
        idAbort: Abort; // stille Exception
        idRetry: goto again;
        idIgnore:
        begin
           Result := False; // Datei vorhanden oder leer; der Benutzer möchte die Datei ignorieren
           Exit;
        end;
      end;
   end;
   Result := True; // Datei vorhanden und nicht leer
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Seite 4 von 5   « Erste     234 5      

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