![]() |
Quelltexteinrückung
Hallo,
wollte euch zunächst Fragen ob der Quellentext "regelkonform" eingerückt ist, falls nicht, wieso?
Delphi-Quellcode:
Ich habe nun zwei Fragen -> Das "k := k * k", wann wird das ausgeführt?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; 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! |
Re: Quelltexteinrückung
Ich würde es so einrücken:
Delphi-Quellcode:
Ich finde das etwas übersichtlicher - die Fragen solltne jetzt einfach zu beantworten sein ;)
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; |
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!
|
Re: Quelltexteinrückung
Dein Style sieht ziemlich schlecht aus und ist schwer zu lesen.
Aber allgemein wuerde ich es so schreiben:
Delphi-Quellcode:
Oder
begin
... if ( Expression ) then begin Do Something; end else begin Do Something else; end; end;
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; |
Re: Quelltexteinrückung
Zitat:
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 ...(?!) |
Re: Quelltexteinrückung
Was willst denn mit den eckigen Klammern? Wenn dann nur um das if ( ... ) then
|
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:
Wird denn jetzt das b := a + 2 in Abhängigkeit vom If ausgeführt
[ if k <> 9 then
a := k - a; ] [ b := a + 2 ] end; 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. |
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! |
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:
Im Prinzip ist die Abfrage "if a < k then" die Schlüsselszene
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; 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? |
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: :???: |
Re: Quelltexteinrückung
|
Re: Quelltexteinrückung
Oder hier direkt
![]() |
Re: Quelltexteinrückung
Zitat:
|
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 ;)! |
Re: Quelltexteinrückung
Er soll sich wirklich an den Borland Style-Guide halten. Nur deshalb :
Zitat:
Das hier (laut Styleguide) :
Delphi-Quellcode:
scheibe ich so :
while i < 100 do
begin for j := 1 to 12 do begin ... end; ... end;
Delphi-Quellcode:
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.
while i < 100 do begin
for j := 1 to 12 do begin ... end; end; Zitat:
|
Re: Quelltexteinrückung
Zitat:
|
Re: Quelltexteinrückung
Zitat:
Gerd |
Re: Quelltexteinrückung
Zitat:
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: ) |
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:
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.
if ((EineZahlDieEventuellNullSeinKoennte = 0)
not TryStrToInt(EinString + Edit1.Text[I], Dummy)) and (StrToInt(Edit1.Text) <> '') then begin MachWas; UndNochWas; end; Wenn mehrere Bedingungen in eine Zeile passen, schreib ich sie auch in eine. |
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...^^ |
Re: Quelltexteinrückung
Zitat:
|
Re: Quelltexteinrückung
Ich bevorzuge ebenfalls
Delphi-Quellcode:
kann aber auch mit
if x = 0 then begin
y := 1; end;
Delphi-Quellcode:
ganz gut leben. Ich finde aber die else-Zweige ausgesprochen häßlich. Sowohl
if x = 0 then
begin y := 1; end;
Delphi-Quellcode:
als auch
if x = 0 then begin
y := 1; end else begin y := 2; end;
Delphi-Quellcode:
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: ).
if x = 0 then begin
y := 1; end else begin y := 2; end; Mir gefällt folgender VB-Code einfach besser
Delphi-Quellcode:
If x = 0 Then
y = 1 Else y = 2 End If |
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?
|
Re: Quelltexteinrückung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 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 by Thomas Breitkreuz