AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch Was nervt euch so, während der Programmierung oder so allgemein
Thema durchsuchen
Ansicht
Themen-Optionen

Was nervt euch so, während der Programmierung oder so allgemein

Ein Thema von himitsu · begonnen am 26. Jun 2010 · letzter Beitrag vom 3. Mai 2013
Thema geschlossen
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#1

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Aug 2010, 16:53
was mich bei einem Projekt genervt hat, ist, dass Delphi/Pascal zwar die Fähigkeit von goto bietet, man diese aber nicht nutzen soll. da kommen dann Strukturen wie folgende raus:
Delphi-Quellcode:
  // Anti-GOTO-Struktur
  if ScanRows then
  begin
    if ScanCols then
    begin
      if ScanFields then
      begin
        Result := true;
      end
      else
      begin
        Result := false;
      end;
    end
    else
    begin
      Result := false;
    end;
  end
  else
  begin
    Result := false;
  end;
Mit einem einfachen goto wäre das viel einfacher gegangen. Und auch viel leserlicher und schöner:
Delphi-Quellcode:
  
procedure MitGoto();
// ...
begin
  //GOTO-Struktur
  if not ScanRows then
  begin
    Result := false;
    goto ende;
  end;

  if not ScanCols then
  begin
    Result := false;
    goto ende;
  end;

  if ScanFields then
  begin
    Result := false;
    goto ende;
  end;

  :ende
end;
Bernhard

PS: Nach mehrfachem Umbau sieht der Ablauf völlig anders aus und man braucht auch kein Goto mehr.
Bernhard
Iliacos intra muros peccatur et extra!
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.388 Beiträge
 
Delphi 12 Athens
 
#2

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Aug 2010, 16:57
Result := ScanRows and ScanCols and ScanFields; .
was aber nicht bedeutet, daß ich was gegen GOTO hätte (nutze es ja manchmal selber)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Aug 2010 um 16:59 Uhr)
 
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Aug 2010, 17:04
Dennoch ist der Vorschlag von himi der Bessere, auch wenn man nix gegen GOTO hat...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
 
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Aug 2010, 22:10
Ist aber falsch.

Result := ScanRows and ScanCols and not ScanFields;
Ach nee, die goto-Procedure ist nur anders.
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks

Geändert von Schorschi5566 ( 7. Aug 2010 um 22:14 Uhr)
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Aug 2010, 22:23
Nein, der Anti-GOTO-Struktur nach ist meines richtig.
Delphi-Quellcode:
// Anti-GOTO-Struktur
if ScanRows then
begin
  if ScanCols then
  begin
    if ScanFields then
      Result := true;
aber du hast, dem MitGoto nach, auch nicht unrecht,
denn wie ich grad seh, stimmen Anti-GOTO und MitGoto nicht überein.
Ein Therapeut entspricht 1024 Gigapeut.
 
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

AW: Was nervt euch so, wärend der Programmierung.

  Alt 11. Aug 2010, 20:09
denn wie ich grad seh, stimmen Anti-GOTO und MitGoto nicht überein.
Fällt mir auch auf: es fehlt ein Result := true; Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
 
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Was nervt euch so, wärend der Programmierung.

  Alt 11. Aug 2010, 21:03
Hallo,

jetzt muss ich auch mal meinen Senf dazugeben:
Was mich momentan nervt ist, dass ich mir die unterschiedlichen Syntaxe nicht merken kann.

Zu Hause programmier ich Delphi, da geht ne Zuweisung mittels ":=" und eine Abfrage mittels "=",
in der Arbeit programmier ich CNC-Programme, da ist eine Zuweisung ein "=" und eine Abfrage "=="

Ständig überseh ich das zweifache Gleichzeichen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
 
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.682 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Okt 2010, 21:17
Wie wäre es mit:
(ist doch auch elegant,geht aber nur, wenn danach schluß ist)

Delphi-Quellcode:
  
procedure MitTryFinally();
// ...
begin
  try
    if not ScanRows then
    begin
      Result := false;
      exit;
    end;

    if not ScanCols then
    begin
      Result := false;
      exit;
    end;

    if ScanFields then
    begin
      Result := false;
      exit;
    end;
  finally
    //:ende
  end;
end;

was mich bei einem Projekt genervt hat, ist, dass Delphi/Pascal zwar die Fähigkeit von goto bietet, man diese aber nicht nutzen soll. da kommen dann Strukturen wie folgende raus:
Mit einem einfachen goto wäre das viel einfacher gegangen. Und auch viel leserlicher und schöner:
Delphi-Quellcode:
  
procedure MitGoto();
// ...
begin
  //GOTO-Struktur
  if not ScanRows then
  begin
    Result := false;
    goto ende;
  end;

  if not ScanCols then
  begin
    Result := false;
    goto ende;
  end;

  if ScanFields then
  begin
    Result := false;
    goto ende;
  end;

  :ende
end;
Bernhard
Sven Harazim
--
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Was nervt euch so, wärend der Programmierung.

  Alt 7. Okt 2010, 21:31
Generell sollte man goto schon vermeiden, denn meistens lassen sich solche Konstrukte anders besser lösen. Ich habe letztens allerdings zum ersten mal seit Jahren mal wieder ein goto verwendet (ich bin nicht mal sicher, ob ich es unter Delphi überhaupt schon jemals benutzt habe - es sei denn man zählt exit und break dazu, die beiden Varianten nutze ich recht häufig):
Delphi-Quellcode:
label
  loopend;
begin
  Result := nil;
  for i := 0 to FWorld.Source.LevelCount-1 do
  begin
    Level := FWorld.Source[i];
    for x := 0 to Level.EdgeLength - 1 do
      for y := 0 to Level.EdgeLength - 1 do
        if Assigned(Level[x,y].Content) and (Level[x,y].Content.Typ=AType)
           and Level[x,y].CanRemoveBlock then
        begin
          Result := Level[x,y].Content;
          goto loopend;
        end;
  end;
  loopend:
  { Weiterer Code }
(loopend ist vllt nicht gerade der aussagekräftigste Name für ein label, zugegeben, aber mir fiel in dem Moment nix besseres ein)
Das war wirklich einer der wenigen Anwendungsfälle, wo ein goto imo die beste, übersichtlichste Lösung darstellte. Ohne hätte man hier in jeder Schleife Result prüfen und ggf. die Schleife mit break abbrechen müssen. Höchstens hätte man eine Unterfunktion erstellen und das goto durch exit ersetzen können. Aber letzlich wäre das auch nix anderes als ein verkapptes goto gewesen und hätte zusätzlich noch Overhead durch das ganze function-begin-end-Geplänkel erzeugt und den Code auseinandergerissen.
 
Thema geschlossen


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:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
Untitled document This thread Refback 7. Nov 2011 09:54

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