Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Quelltexteinrückung (https://www.delphipraxis.net/81951-quelltexteinrueckung.html)

Problemmacher 5. Dez 2006 21:50


Quelltexteinrückung
 
Hallo,

wollte euch zunächst Fragen ob der Quellentext
"regelkonform" eingerückt ist, falls nicht, wieso?

Delphi-Quellcode:

k := 4 ;
  if a < k then begin a := b + 2 ;
                   
                 if a < k then b := 3
               
                 else a := b ;
                 
                 k := k * k
                 end

  else k := k + a ;
               
                 if k <> 9 then a := k - a ;
                                 b := a + 2
end;
Ich habe nun zwei Fragen -> Das "k := k * k", wann wird das ausgeführt?
Es gehört nicht mehr zum else-Teil, da dort ja nicht mit "else ... then begin"
ein Anweisungsblock eingeleitet wird, sondern nur eine Anweisung, korrekt?
Heißt also dass es unabhängig von dem If-Else Teil zuvor ausgeführt wird,
also immer (insofern if a > k) oder steht das doch unter einer Abhängigkeit?)

Gleiches bei der Frage zum Schluss von "b := a + 2", da zuvor nur "then" steht,
ist es ja nur eine einzelne Anweisung, oder? Daraus würde ich dann schließen
das eben das letzte unabhängig von allem stattfindet, auch wenn k = 9 sein würde, oder nicht?

Wäre nett wenn ihr mir das Prinzip erläutern würdet falls
ich es falsch interpretiert/eingerückt habe.

Danke!

jfheins 5. Dez 2006 21:54

Re: Quelltexteinrückung
 
Ich würde es so einrücken:
Delphi-Quellcode:
begin //hinzugefügt, damit es passt ....
  k := 4;
  if a < k then
  begin
    a := b + 2;

    if a < k then
      b := 3
    else
      a := b;

    k := k * k
  end
  else
    k := k + a;

  if k <> 9 then
    a := k - a;
  b := a + 2
end;
Ich finde das etwas übersichtlicher - die Fragen solltne jetzt einfach zu beantworten sein ;)

TheMiller 5. Dez 2006 21:57

Re: Quelltexteinrückung
 
Würde es auch so machen. Vor allem bilden die "ends" dann eine schöne Reihe am Schluss und so kann man immer sehen, ob man richtig programmiert hat und in welchem Codeabschnitt (Schleife etc) man sich befindet!

Mackhack 5. Dez 2006 21:59

Re: Quelltexteinrückung
 
Dein Style sieht ziemlich schlecht aus und ist schwer zu lesen.

Aber allgemein wuerde ich es so schreiben:
Delphi-Quellcode:
begin
  ...
  if ( Expression ) then
  begin
    Do Something;
  end
  else
  begin
    Do Something else;
  end;
end;
Oder

Delphi-Quellcode:
begin
...
  if ( Expression ) then
  begin
    if ( Expression ) then
    begin
      Do Something;
    end
    else
    begin
      Do Something else;
    end
  else
  begin
    Do Something totally different;
  end;
end;

Problemmacher 5. Dez 2006 22:01

Re: Quelltexteinrückung
 
Zitat:

Zitat von jfheins
Ich würde es so einrücken:
Delphi-Quellcode:
begin //hinzugefügt, damit es passt ....
  k := 4;
  [ if a < k then
  begin
    a := b + 2; ]

   [ if a < k then
      b := 3
    else
      a := b; ]

  [  k := k * k ]
  end
 [ else
    k := k + a; ]

 [ if k <> 9 then
    a := k - a; ]
 [ b := a + 2 ]
end;
Ich finde das etwas übersichtlicher - die Fragen solltne jetzt einfach zu beantworten sein ;)

Ich habe nun mal Klammern drumgelegt, was sozusagen was "beinhaltet".
Habe ich sie richtig gelegt? Falls ja war ja meine "Interpretation"
des Verlaufes aus meinem Thread-Eröffnungsbeitrag korrekt wenn ich euch
richtig verstanden hab ...(?!)

Mackhack 5. Dez 2006 22:02

Re: Quelltexteinrückung
 
Was willst denn mit den eckigen Klammern? Wenn dann nur um das if ( ... ) then

Problemmacher 5. Dez 2006 22:06

Re: Quelltexteinrückung
 
Habe sie gelegt um damit meine Frage zu verdeutlichen
bzw zu verdeutlichen wie ich den Verlauf dieser Abfrage
verstehe. Sprich ist z.B. das Stück am Ende ...

Delphi-Quellcode:
[ if k <> 9 then
    a := k - a; ]
[ b := a + 2 ]
end;
Wird denn jetzt das b := a + 2 in Abhängigkeit vom If ausgeführt
oder steht es allein so wie ich es markiert habe und findet
prinzipiell immer statt, falls auf der ganz übergeordneten
if-else struktur der If-Teil False ist und man eben in den Else-Teil
kommt.

Mackhack 5. Dez 2006 22:12

Re: Quelltexteinrückung
 
B wird immer ausgefuehrt da kein begin...end drum rum ist von der vorhergehenden if Bedingung!

Daher sauber einruecken und vlt. das eine oder andere begin end schreiben denn dann wirds auch deutlicher wo was hingehoert. Viele lassen begin...end weg wenn nur eine Zeile drin stehen wuerde. Ich machs nicht aus uUebersichtsgruenden!

Problemmacher 5. Dez 2006 22:17

Re: Quelltexteinrückung
 
Nein, also begin und end hinzufügen soll man da nicht,
das war eine Aufgabe aus meinem Info-Unterricht, wo
wir einfach drei Zeilen Code bekommen haben und den
eben per Einrückmethode übersichtlich gestalten sollte
(das ganz am Anfang begin und ganz am Ende ein end hin muss,
weiß ich) ---> War jedoch nur als reine Einrückübung gedacht.

Heißt also, trifft das If ganz am Anfang nicht zu,
so gehen wir in den Teil den ich hier dann mit (-----)
markiert habe nie bzw. gar nicht rein ...

Delphi-Quellcode:
begin //hinzugefügt, damit es passt ....
  k := 4;
  [ if a < k then
  begin
    a := b + 2; ]

   [ if a < k then
      b := 3
    else
      a := b; ]

  [  k := k * k ]
  end
--------------------------
[ else
    k := k + a; ]

[ if k <> 9 then
    a := k - a; ]
[ b := a + 2 ]
end;
Im Prinzip ist die Abfrage "if a < k then" die Schlüsselszene
in dem Ganzen, trifft das zu laufen wir bis zum (----) und dann
ist Ende, ansonsten überspringen wird den Teil bis zum Strich
und führen den Rest danach aus, korrekt?

Mackhack 5. Dez 2006 22:21

Re: Quelltexteinrückung
 
Dumme Frage. Warum schreibst du den Code nicht in deine Delphi IDE, drueckst F5 bei deinem ersten if um n BP zu setzen, drueckst F9 und siehst dir an was los ist?

Dann siehst du Schritt fuer Schritt wo der Debugger dich hinfuehrt! Und schwupps, Aufgabe geloest! Oder nimmst n Blatt Papier, schreibst deinen Code hin und gehst mit dem Stift durch. Wenn du was rechnen musst schreibst das neben an aufs Blatt und fuegst deine Ergebnisse ein in die Variablen oder behaeltst sie im Kopf und gehst durch und siehst ebenfalls was dabei raus kommt! :shock: :???:

bttb930 5. Dez 2006 22:22

Re: Quelltexteinrückung
 
Hier ist ein guter Styleguide:

http://www.dsdt.info/grundlagen/styleguide/

Matze 5. Dez 2006 22:29

Re: Quelltexteinrückung
 
Oder hier direkt von Borland, wobei sich die Styleguides sehr ähneln.

Muetze1 5. Dez 2006 22:30

Re: Quelltexteinrückung
 
Zitat:

Zitat von Mackhack
Viele lassen begin...end weg wenn nur eine Zeile drin stehen wuerde. Ich machs nicht aus uUebersichtsgruenden!

Ich mache es gerade aus Übersichtsgründen, dass ich das Begin/End bei einer einzelnen Anweisung bei einem Else Zweig weglasse.

Problemmacher 5. Dez 2006 22:34

Re: Quelltexteinrückung
 
Oki Danke für die zahlreiche Hilfe!

Habs nun verstanden, hab ganze Zeit nur eine Anweisung
falsch interpretiert und daher hatte ich auch immer andere
Ergebnisse als die, die mir Delphi ausspuckte ...

Gute Nacht ;)!

Hansa 5. Dez 2006 23:39

Re: Quelltexteinrückung
 
Er soll sich wirklich an den Borland Style-Guide halten. Nur deshalb :

Zitat:

Zitat von DJ-SPM
Vor allem bilden die "ends" dann eine schöne Reihe am Schluss und so kann man immer sehen, ob man richtig programmiert hat und in welchem Codeabschnitt (Schleife etc) man sich befindet!

setze ich den nicht zu 100 % um. Ich will nämlich sehen zu was jedes end; gehört. Laut Styleguide sehe ich lediglich auf den ersten Blick, dass es zu einem begin gehört. Toll zu wissen. :stupid:

Das hier (laut Styleguide) :

Delphi-Quellcode:
while i < 100 do
begin
  for j := 1 to 12 do
  begin
...
  end;
...
end;
scheibe ich so :

Delphi-Quellcode:
while i < 100 do begin
  for j := 1 to 12 do begin
...
  end;
end;
Sogar bei dem Mini-Beispiel sieht man wie sich, wie gesagt wirklich nur in diesem Fall !! der Quelltext aufblähen würde, wegen des Styleguides.

Zitat:

Zitat von Mackhack
Viele lassen begin...end weg wenn nur eine Zeile drin stehen wuerde. Ich machs nicht aus Uebersichtsgruenden!

Warum sollen sie das denn nicht weglassen ? :shock: Ein Anfänger, der sich dauernd mit begin end; vertut, dem würde ich auch sagen : immer machen. Und wenn er dann endlich weiß, wann es wirklich nötig ist, dann würde ich sagen : korrigiere jetzt den Quelltext. Aber RuckZuck. Wird unübersichtlich. :mrgreen:

Mackhack 5. Dez 2006 23:51

Re: Quelltexteinrückung
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von Mackhack
Viele lassen begin...end weg wenn nur eine Zeile drin stehen wuerde. Ich machs nicht aus Uebersichtsgruenden!

Warum sollen sie das denn nicht weglassen ? :shock: Ein Anfänger, der sich dauernd mit begin end; vertut, dem würde ich auch sagen : immer machen. Und wenn er dann endlich weiß, wann es wirklich nötig ist, dann würde ich sagen : korrigiere jetzt den Quelltext. Aber RuckZuck. Wird unübersichtlich. :mrgreen:

Und so meinte ich es. Denn er kam ja offensichtlich nicht zum gewuenschten Ergenis weil er sich vertan hat.

bernau 6. Dez 2006 08:28

Re: Quelltexteinrückung
 
Zitat:

Zitat von Hansa
Das hier (laut Styleguide) :

Delphi-Quellcode:
while i < 100 do
begin
  for j := 1 to 12 do
  begin
...
  end;
...
end;
scheibe ich so :

Delphi-Quellcode:
while i < 100 do begin
  for j := 1 to 12 do begin
...
  end;
end;
Sogar bei dem Mini-Beispiel sieht man wie sich, wie gesagt wirklich nur in diesem Fall !! der Quelltext aufblähen würde, wegen des Styleguides.

Ich bevorzuge das obere Beispiel. Es sieht zwar etwas aufgeblähter aus. Lässt sich aber wesentlich besser lesen. Und bei den heutigen Monitoren sollte mann mit 2-3Zeilen mehr Quellcode kein Problem haben.


Gerd

Elvis 6. Dez 2006 09:02

Re: Quelltexteinrückung
 
Zitat:

Zitat von Muetze1
Ich mache es gerade aus Übersichtsgründen, dass ich das Begin/End bei einer einzelnen Anweisung bei einem Else Zweig weglasse.

Dito, if ist in Pascal nunmal ein Statement (in anderen Sprachen ist es eher ein Block).
Warum unnötig einen Block reinquetschen wenn es nur ein Statement enthält? Code wird ja nicht lesbarer nur weil man alles mögliche an unnötiger Info reinwurschtelt, auch wenn mir da viele widersprechen werden. (Vor allem Mister "x + 0" :mrgreen: )

Cöster 8. Dez 2006 18:00

Re: Quelltexteinrückung
 
Was macht ihr, wenn die If-Bedingung über mehrere Zeilen geht und anschließend ein begin folgt?

Ich mach's bisher so:

Delphi-Quellcode:
if ((EineZahlDieEventuellNullSeinKoennte = 0)
   not TryStrToInt(EinString + Edit1.Text[I], Dummy)) and
   (StrToInt(Edit1.Text) <> '') then
begin
   MachWas;
   UndNochWas;
end;
Ich rück also die Zeile nach dem if ein, eventuell nachfolgende Zeilen, die Teil der Bedingung sind, bleiben auf einer Höhe mit dieser Zeile. Das Begin ist wieder auf einer Höhe mit dem if und es geht normal weiter.

Wenn mehrere Bedingungen in eine Zeile passen, schreib ich sie auch in eine.

Namenloser 8. Dez 2006 18:22

Re: Quelltexteinrückung
 
Ich rücke auch so ein, wie sollte man es denn sonst machen?

Aber was mich mal interessiert ist, was macht ihr, wenn eine Anweisung so lang ist, dass sie auch bei einem umbruch noch über den Rand geht? Kommt zwar selten vor, kann aber bei einer hohen verschachtelungstiefe durchaus mal passieren. Das war für mich bis jetzt immer ein unlösbares Problem...^^

Cöster 8. Dez 2006 18:47

Re: Quelltexteinrückung
 
Zitat:

Zitat von NamenLozer
Aber was mich mal interessiert ist, was macht ihr, wenn eine Anweisung so lang ist, dass sie auch bei einem umbruch noch über den Rand geht? Kommt zwar selten vor, kann aber bei einer hohen verschachtelungstiefe durchaus mal passieren. Das war für mich bis jetzt immer ein unlösbares Problem...^^

Dann knick ich entweder nach einer öffnenden Klammer oder nach einem Komma ein. Hast aber recht, das ist scheiße

Meniskusschaden 8. Dez 2006 21:40

Re: Quelltexteinrückung
 
Ich bevorzuge ebenfalls
Delphi-Quellcode:
if x = 0 then begin
  y := 1;
end;
kann aber auch mit
Delphi-Quellcode:
if x = 0 then
begin
  y := 1;
end;
ganz gut leben. Ich finde aber die else-Zweige ausgesprochen häßlich. Sowohl
Delphi-Quellcode:
if x = 0 then begin
  y := 1;
end else begin
  y := 2;
end;
als auch
Delphi-Quellcode:
if x = 0 then begin
  y := 1;
end
else
begin
  y := 2;
end;
sind in meinen Augen unbefriedigend. Ich muß zugeben, daß ich immer sehr unglücklich bin, wenn ich eine else-Konstruktion benötige. In solchen Momenten beneide ich die VisualBasic-Programmierer (ich schäme mich dafür, aber ich kann die Wahrheit einfach nicht verschweigen :wink: ).
Mir gefällt folgender VB-Code einfach besser
Delphi-Quellcode:
If x = 0 Then
  y = 1
Else
  y = 2
End If

Cöster 8. Dez 2006 21:52

Re: Quelltexteinrückung
 
Und was macht ihr, wenn die If-Bedingung in mehrere Zeilen muss, nachher aber kein begin-end-Block kommt, sondern eine einfache Anweisung? Diese noch tiefer einrücken als den eingerückten Teil der Bedingungen?

Meniskusschaden 8. Dez 2006 22:19

Re: Quelltexteinrückung
 
Zitat:

Zitat von Cöster
Und was macht ihr, wenn die If-Bedingung in mehrere Zeilen muss, nachher aber kein begin-end-Block kommt, sondern eine einfache Anweisung? Diese noch tiefer einrücken als den eingerückten Teil der Bedingungen?

Ich setze einzelne Anweisungen in der Regel ohnehin in einen begin-end-Block und würde das bei mehrzeiligen Bedingungen immer tun. Ich habe aber zum Glück nur selten sehr komplexe Bedingungen und komme meistens mit einer Zeile aus, wobei ich durchaus lange Zeilen in Kauf nehme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr.

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