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

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objekte zur Laufzeit erzeugen (https://www.delphipraxis.net/180410-objekte-zur-laufzeit-erzeugen.html)

Sir Rufo 20. Mai 2014 07:22

AW: Objekte zur Laufzeit erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So dann will ich auch noch mal einen zum Besten (bzgl. der Formatierung) geben.

3 Varianten
Delphi-Quellcode:
procedure Foo1;
begin
if Voraussetzung then begin
MeinCode1;
MeinCode2;
end else begin
MeinCode2;
MeinCode1;
end;
end;

procedure Foo2;
begin
  if Voraussetzung then
  begin
    MeinCode1;
    MeinCode2;
  end
  else
  begin
    MeinCode2;
    MeinCode1;
  end;
end;

procedure Foo3;
begin
  if Voraussetzung
  then
    begin
      MeinCode1;
      MeinCode2;
    end
  else
    begin
      MeinCode2;
      MeinCode1;
    end;
end;
und was CnPack daraus macht
Anhang 41210
Ja, aus dem Grund nehme ich Variante 3

Sherlock 20. Mai 2014 08:23

AW: Objekte zur Laufzeit erzeugen
 
Das versteh ich nicht, guter Sir. Warum Variante 3? Die ist... nicht schön. then in einer eigenen Zeile? Also wirklich.

Sherlock

Sir Rufo 20. Mai 2014 08:43

AW: Objekte zur Laufzeit erzeugen
 
Zitat:

Zitat von Sherlock (Beitrag 1259466)
Das versteh ich nicht, guter Sir. Warum Variante 3? Die ist... nicht schön. then in einer eigenen Zeile? Also wirklich.

Sherlock

Macht nichts, denn schön liegt im Auge des Betrachters ;)

Für mich zählt nur die Lesbarkeit und damit ist es für mich einfacher (damit schneller) die Struktur zu erfassen.
Sobald die Bedingungen etwas umfangreicher werden (ab einer gewissen Schmerzgrenze lager ich aber Teile in Funktionen aus), dann schreibe ich das sogar so:
Delphi-Quellcode:
if //
  Bedingung1 or //
  Bedingung2 or //
  Bedingung3 and Bedingung4 //
then
  Foo
else
  Bar;
Dein Vorschlag wäre ja dann so
Delphi-Quellcode:
if Bedingung1 or Bedingung2 or Bedingung3 and Bedingung4 then
  Foo
else
  Bar;
Und wenn der automatische Zeilenumbruch (Codeformatierung) zuschlägt, dann wird es ganz doof
Delphi-Quellcode:
if Bedingung1 or Bedingung2 or
  Bedingung3 and Bedingung4 then
  Foo
else
  Bar;
Jetzt ist nicht auf einen kurzen Blick erkennbar, was wohin gehört. Bei meiner Variante sehe ich die einzelnen Teile sofort.

Und selbst diese Variante (ohne Zeilenkommentare) ist besser lesbar
Delphi-Quellcode:
if Bedingung1 or Bedingung2 or
  Bedingung3 and Bedingung4 
then
  Foo
else
  Bar;

p80286 20. Mai 2014 13:37

AW: Objekte zur Laufzeit erzeugen
 
@Luki206
Nun da greift wer ins Klo. Mit anderen worten, ein Zeiger zeigt in die Botanik und nict mehr auf Speicher der für Deine Anwendung verfügbar ist.

@all
Heute hab ich da was über Haarspalterei gelesen...
Manchmal kommt's darauf an, da ist auch so etwas gut brauchbar:
Delphi-Quellcode:
If bedingung1 then... else
If Bedingung2 then... else
If Bedingung3 then... else
..
If Bedingung99 then
else showessage('Deine Daten sind Schrott');
und ebenso
Delphi-Quellcode:
if (Bedingung1 or
    Bedingung2 or
   (Bedingung3 and Bedingung4)or
    Bedingung5 then ......

Popov 20. Mai 2014 15:26

AW: Objekte zur Laufzeit erzeugen
 
Also richtig soll es angeblich so sein:
Delphi-Quellcode:
  if a = b then
    begin
    a := 1;
    b := 2;
    end
  else
    begin
    a := 2;
    b := 1;
    end;
Persönlich mache ich es heute so (also fast richtig ;) ):
Delphi-Quellcode:
  if a = b then
  begin
    a := 1;
    b := 2;
  end
  else
  begin
    a := 2;
    b := 1;
  end;
Das ist eigentlich Quatsch, denn else gehört in die gleiche Ebene wie if:
Delphi-Quellcode:
  if a = b then
  begin
    a := 1;
    b := 2;
  end
    else
  begin
    a := 2;
    b := 1;
  end;
Früher machte ich es immer so, aber zumindest begin nach then, korrigiere aber inzwischen jeden Code damit:
Delphi-Quellcode:
  if a = b then begin
    a := 1;
    b := 2;
  end else begin
    a := 2;
    b := 1;
  end;
Man spart sich zwar mindestens eine Zeile, muss aber immer erst zwei mal gucken um zu sehen, dass die nächsten zwei Zeilen einen Block bilden. Die Übersichtlichkeit ist nicht so flüssig.

Furchtbar sind natürlich die ganz coolen Formen der Formatierung:
Delphi-Quellcode:
  if a = b then
                begin
    a := 1;
    b := 2;
                end
    else
                begin
    a := 2;
    b := 1;
                end;
Das tue ich mir inzwischen fast gar nicht mehr an. Postet es einer so, ignoriere ich die Frage:
Delphi-Quellcode:
if a=b then
begin
a:=1;
b:=2;
end
else
begin
a:=2;
b:=1;
end;
Da muss ich zu sehr im Kopf den Code entwirren.

DeddyH 20. Mai 2014 15:34

AW: Objekte zur Laufzeit erzeugen
 
Zitat:

Zitat von Popov (Beitrag 1259535)
Also richtig soll es angeblich so sein:
Delphi-Quellcode:
  if a = b then
    begin
    a := 1;
    b := 2;
    end
  else
    begin
    a := 2;
    b := 1;
    end;

Quelle? Der (uralte) Style Guide sagt da etwas anderes.

Popov 20. Mai 2014 16:37

AW: Objekte zur Laufzeit erzeugen
 
Wenn ich für alles was ich im Leben sagte einen Quellennachweis liefen müsste...

Ich weiß nicht mehr wo ich es gesehen habe, ich habe es aber paar mal gesehen und es waren in der Regel Seiten von Unis. Auch sahen die Seiten in der Regel schön "klassisch" aus, also HTML pur, wie in den guten alten Zeiten Anfang 90. Womit ich also nicht behaupte, dass das neu ist, muss aber auch nicht alt sein. Ich gucke mal in meinen Lesezeichen ob ich da was finde.

Andererseits ergibt das zum Teil einen Sinn.
Delphi-Quellcode:
  if a = b then
    ...
  else
    ...
Else ist ein Teil der If-Anweisung, gehört also in die gleiche Ebene, nicht eingerückt.

Begin und End bilden einen Block. Somit stellt sich die Frage wohn damit?
Delphi-Quellcode:
  if a = b then
    a := 1
  else
    b := 2;
Das ist alles eine einzige Anweisung, auch wenn es über vier Zeilen verteilt ist. Woran erkennt man das? Spätestens daran, dass es nur ein abschließendes Semikolon am Ende gibt. Geht also auch so:
Delphi-Quellcode:
  if a = b then a := 1 else b := 2;
  ...
Wenn ich nun mehr als eine Zeile benötige, brauche ich einen Block.
Delphi-Quellcode:
  if a = b then
  begin
    a := 1;
    b := 2
  end
  else
    b := 2;
Und nun stellt sich die Frage zu was gehört Begin und End? Ist es ein Teil des Blocks selbst, dann muss man es so schreiben:
Delphi-Quellcode:
  if a = b then
    begin
    a := 1;
    b := 2
    end
  else
    b := 2;
Oder ist es ein Teil der If-Anweisung, dann die vorherige Variante.

DeddyH 20. Mai 2014 17:18

AW: Objekte zur Laufzeit erzeugen
 
Delphi-Quellcode:
if a = b then
  begin
    a := 1;
    b := 2;
  end
else
  b := 2;
So würde ich es schreiben. Und Behauptungen, die man nicht belegen kann, sind eben nur Behauptungen.

Sir Rufo 20. Mai 2014 17:21

AW: Objekte zur Laufzeit erzeugen
 
Wenn
Delphi-Quellcode:
else
ein Teil der
Delphi-Quellcode:
if
-Anweisung ist und deswegen in die gleiche Ebene sollte wie das
Delphi-Quellcode:
if
, dann gilt das auch für
Delphi-Quellcode:
then
.

Sag ich doch die ganze Zeit ;)

DeddyH 20. Mai 2014 17:24

AW: Objekte zur Laufzeit erzeugen
 
Jetzt sind wir aber mittlerweile weit ab vom Thema, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Seite 5 von 9   « Erste     345 67     Letzte »    

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