Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Syntax-Frage (if, else begin und end) (https://www.delphipraxis.net/99712-syntax-frage-if-else-begin-und-end.html)

Tommy1988 16. Sep 2007 15:05


Syntax-Frage (if, else begin und end)
 
Hallo, ich habe mir in den letzten Zwei Jahren einige Bücher über Delphi und die Programmierung damit
durchgelesen.

Viele Autoren verwenden meist nie begin und end. z.B. bei einer
if else- Abfrage.

Bei mir ist es jetzt so, da wo man kein begin und end braucht, verwende ich es trotzdem:
Delphi-Quellcode:
if TestVariable = True then
 begin
  // Eine Codezeile
 end else
 begin
 // Eine weitere Codezeile
 end;
In dem Fall könnte man das begin-end weglassen.

Meine Frage: Ist das eigentlich FALSCH was ich da mache?

mkinzler 16. Sep 2007 15:07

Re: Syntax-Frage (if, else begin und end)
 
Nein, warum sollte es falsch sein? eine Sequenz besteht entweder aus einem einzelnen Befehl oder wird von begin..end umschlossen.

alleinherrscher 16. Sep 2007 15:07

Re: Syntax-Frage (if, else begin und end)
 
Ne falsch is das nicht, nur etwas umständlich, wenn du jeweils nur eine Anweisung hast, brauchst du keinen begin und end block und du kannst auch schreiben:

Delphi-Quellcode:

if bedingung then
   eineanweisung(mitparametern)
else
   eineandereanweisung(mitparametern);

Tommy1988 16. Sep 2007 15:08

Re: Syntax-Frage (if, else begin und end)
 
Das ist mir klar ;)

Aber angenommen unter dem else ohne begin und end kommen noch viele weitere Codezeilen.

Dann finde ich es überichtlicher das, auch wenn es nur eine Zeile ist, es einzuschließen

mkinzler 16. Sep 2007 15:09

Re: Syntax-Frage (if, else begin und end)
 
Deshalb nehem ich normalerweise auch immer begin..end

Ralf Kaiser 16. Sep 2007 15:14

Re: Syntax-Frage (if, else begin und end)
 
Zitat:

Zitat von Tommy1988
Meine Frage: Ist das eigentlich FALSCH was ich da mache?

Nein auf keinen Fall. Letztendlich ist es eine Frage des persönlichen Stils (oder eventuell eine Frage eine firmeninternen Style-Guides)

Auch ich verwende grundsätzlich beginn..end da man dann schneller eine paar Anweisungen ergänzen kann. Ausserdem finde ich, dass es, korrekt eingerückt, "schöner" aussieht. Ohne begin..end "hängen einige Zeilen dann immer so unmotiviert in der Gegend rum :)

Kevin 16. Sep 2007 15:19

Re: Syntax-Frage (if, else begin und end)
 
Ich nehme gerne den begin/end-Block auch für nur eine Anweisung, da es für den Fall einer Erweiterung um weitere Zeilen einfacher ist. Letztendlich ist es natürlich nicht falsch und Geschmacksache.

Christian Seehase 16. Sep 2007 15:45

Re: Syntax-Frage (if, else begin und end)
 
Moin Zusammen,

also ich habe es mir so angewöhnt:
Wenn nur der then-Zweig in Frage kommt, und dort nur eine Anweisung folgt, kommt sie direkt hinter das then, also in die gleiche Zeile.
Ausnahme:
Die Zeile wird dann zu lang, sprich, unübersichtlich.
Dann mache ich es auch bei einer Zeile so, wie bei mehreren.

Werden mehrere Zeilen, oder auch ein else-Zweig benötigt benutze ich bei beiden immer begin/end

Also:

Delphi-Quellcode:
// Nur then, eine Anweisung, kurze Zeile
if <Bedingung(en)> then <Anweisung>

// Nur then, eine Anweisung, lange zeile oder mehrere Anweisungen
if <Bedingung(en)> then begin
  <Anweisung(en)>
end;

// Auch else
if <Bedingung(en)> then begin
  <Anweisung(en)>
end else begin
  <Anweisung(en)>
end;

@Tommy:
Was Du aber in keinem Falle machen solltest (auch wenn es nicht direkt falsch ist):

Vergleiche einen boolschen-Ausdruck niemals auf true oder false.

Also:
Delphi-Quellcode:
// statt = true
if Ausdruck then ...
// statt = false
if not Ausdruck then ...
Zum einen ist diese Variante i.d.R. lesbarer (vorausgesetzt die Bezeichner wurden entsprechend benannt ;-)), zum anderen kann man sich gerade bei = true eine Problem einhandeln.
true und false sind einfach nur Konstanten mit den Werten 1 (true) und 0 (false).
Üblicher Weise ist der Rückgabewert einer boolschen Funktion als 0 bei false (ok, passt) aber als <> 0 für true anzusehen.
Wenn eine Funktion also -1 oder 2 (mal als willkürliche Beispiele gewählt) als Rückgabewert liefert (um true zu signalisieren), und Du mit true (also 1) vergleichst, erhältst Du nicht das gewünschte Ergebnis.

DP-Maintenance 16. Sep 2007 15:46

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.

RavenIV 17. Sep 2007 08:03

Re: Syntax-Frage (if, else begin und end)
 
Zitat:

Zitat von Christian Seehase
Moin Zusammen,

also ich habe es mir so angewöhnt:

Delphi-Quellcode:
// Nur then, eine Anweisung, kurze Zeile
if <Bedingung(en)> then <Anweisung>

// Nur then, eine Anweisung, lange zeile oder mehrere Anweisungen
if <Bedingung(en)> then begin
  <Anweisung(en)>
end;

// Auch else
if <Bedingung(en)> then begin
  <Anweisung(en)>
end else begin
  <Anweisung(en)>
end;

Hast Du Dir mal den StyleGuide von Borland / CodeGear angeschaut?
Danach wäre Deine Version falsch.

SirThornberry 17. Sep 2007 08:12

Re: Syntax-Frage (if, else begin und end)
 
Zitat:

Zitat von Tommy1988
Das ist mir klar ;)

Aber angenommen unter dem else ohne begin und end kommen noch viele weitere Codezeilen.

Dann finde ich es überichtlicher das, auch wenn es nur eine Zeile ist, es einzuschließen

dann negiere ich meist die Bedingung.

Christian Seehase 17. Sep 2007 09:21

Re: Syntax-Frage (if, else begin und end)
 
Moin Raven,

Zitat:

Zitat von RavenIV
Hast Du Dir mal den StyleGuide von Borland / CodeGear angeschaut?
Danach wäre Deine Version falsch.

Ja, den Style-Guide kenne ich, aber mir ist die dort gezeigte Variante zu unübersichtlich. ;-)

RavenIV 17. Sep 2007 09:51

Re: Syntax-Frage (if, else begin und end)
 
Zitat:

Zitat von Christian Seehase
Moin Raven,

Zitat:

Zitat von RavenIV
Hast Du Dir mal den StyleGuide von Borland / CodeGear angeschaut?
Danach wäre Deine Version falsch.

Ja, den Style-Guide kenne ich, aber mir ist die dort gezeigte Variante zu unübersichtlich. ;-)

Naja, das ist halt Geschmackssache.
Wenn Du in MEINEM Team arbeiten würdest, müsstest Du halt den StyleGuide der Firma nehmen. Zufälligerweise habe ich den verfasst. Und darin sind wir stark an Borland angelehnt.
"Jeder darf seinen eigenen Stil verwenden, sofern dieser sich mit meinem Stil vereinbaren lässt."

Matze 17. Sep 2007 09:55

Re: Syntax-Frage (if, else begin und end)
 
Es gibt Firmen, die nutzen wieder ganz andere Styleguides. Von dem her ist es eigentlich egal, welchen Styleguide Christian nutzt. Dass man sich in Firmen an den jeweiligen Styleguide anpassen muss, sollte selbstverständlich sein. ;)

Aber das gehört nicht zum Thema und Diskussionen darüber gab's hier schon einige. :)

turboPASCAL 17. Sep 2007 10:17

Re: Syntax-Frage (if, else begin und end)
 
Ist ist ja so, wenn man ein Progrämmchen baut das man hier und da was Ändert.
Aus diesem Grund schreib ich meinerseitz auch ab und zu einzelne Anweisungen
in einen Begin/End -Block. Es könnte ja noch etwas dazu kommen. Wen das Programm
Fehlerfrei läuft und sonst alle Unreinheiten raus sind, geht es dann an die
Codeoptimierung. Dabei fallen dann solche sachen wie eine Zeile in einem
Anweisungsblock weg.

hoika 17. Sep 2007 10:24

Re: Syntax-Frage (if, else begin und end)
 
Hallo,

ich bin der gleichen Meinung wie turboPASCAL.

Was noch eine Rolle spielt, wäre das Debuggen.

if () then Anweisung

lässt sich nicht so gut debuggen,
weil Breakpoints zeilenbezogen sind.

if () then
Anweisung

Hier kann ich den Breakpoint auf "Anweisung setzen".

Da ich die Formatierung nicht so schön finde,
nehme ich immer begin end, zumal ich beim end noch
als Kommentar reinschreibe, wofür das end ist.

if i>1 then
begin
end; { if i>1 then }

gerade bei längeren Code lässt sich dass besser lesen,
vor allem wenn man der Code gerade übersprungen wird,
dann muss man nicht "nach oben blättern",
um zu sehen, was denn im if stand.


Heiko

sakura 17. Sep 2007 10:27

Re: Syntax-Frage (if, else begin und end)
 
Zitat:

Zitat von turboPASCAL
geht es dann an die Codeoptimierung. Dabei fallen dann solche sachen wie eine Zeile in einem Anweisungsblock weg.

Was bringt das am Ende? Der Compiler optimiert solche Stellen selbständig so, dass es egal ist, ob begin/end da stehen oder nicht, und zwar seit über 10 Jahren schon ;)

...:cat:...

turboPASCAL 17. Sep 2007 10:30

Re: Syntax-Frage (if, else begin und end)
 
:stupid: Eine Lesbarkeit nach X-Ünftig Jahren.

An sich nix, ich mache en nur schon seit ich mit Basic zu tun habe/hatte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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