Forum: PC-Programmierung Wie positioniert man in Programmiersprachen wie C und C++ üblicherweise die geschweiften Klammern?


von Steffen (Gast)


Lesenswert?

Hallo,
kurze Frage, wie positioniert man in Programmiersprachen wie C und C++ 
üblicherweise die geschweiften Klammern?

Ist es üblich, diese Klammern unter den ersten Buchstaben des Befehls zu 
setzen, zu dem sie gehören und wie weit rückt man "Unterbefehle" 
üblicherweise ein?
1
if (a == 1)
2
{
3
4
   while(b > 1000)
5
   {
6
   b = b - 3            
7
   }
8
9
}

von Georg A. (georga)


Lesenswert?

Steffen schrieb:
> kurze Frage, wie positioniert man in Programmiersprachen wie C und C++
> üblicherweise die geschweiften Klammern?

Die Frage ist ungefähr genauso unbelastet wie die, ob man ein gekochtes 
Ei jetzt an der spitzen oder stumpfen Seite aufschlägt...

Ich hol jedenfalls schon mal Popcorn ;)

von Achim H. (anymouse)


Lesenswert?

Suchbegriff "Code Convention" -- da gibt es etliche Varianten.

Es gibt beides:
Sowohl am Ende der vorhergehenden Zeile als auch (eingerückt) in einer 
eigenen.

Einrückungstiefe ist ebenfalls variantenreich, häufig 4 oder 8 Zeichen 
ODER ein Tab.

Bietet viel Flamewar-Potential.

von Dussel (Gast)


Lesenswert?

Achim H. schrieb:
> Einrückungstiefe ist ebenfalls variantenreich, häufig 4 oder 8 Zeichen
> ODER ein Tab.
UND wäre doch auch mal interessant. :-D

Früher habe ich die offnende Klammer hinter den Ausdruck gesetzt, im 
professionellen Bereich habe ich aber sehr viel öfter (oder sogar 
ausschließlich?) die Klammer unter dem Ausdruck gesehen.
Eine IDE, ich weiß gerade nicht ob Visual Studio oder Eclipse, setzt 
wiederum die Klammer in die gleiche Zeile.

Also wenn ich jemandem eine Empfehlung geben sollte, würde ich für die 
öffnende Klammer eine eigene Zeile empfehlen, weil das meiner Meinung 
nach weiter verbreitet ist. Allerdings gewöhnt man sich auch schnell um.

von Achim H. (anymouse)


Lesenswert?

Ich würde es so schreiben:
1
if (a == 1) {
2
    while(b > 1000) {
3
        b = b - 3;
4
    }
5
}

Spart Platz in der Höhe, ohne zu viele Kompromisse in der Deutlichkeit.

Aber meine (zugegeben Java-baiserte) IDE zeigt mir bei 
Mehr-Zeilen-Anweisungen auch einen waagerechten Strich in der ersten 
Spalte an, dass es sich a) um eine solche handelt, und b) in welcher 
Einrückungstiefe diese beginnt.

Das wird vor allem dann interessant, wenn sowohl der Test-Ausdruck als 
auch der Anweisungsblock einer IF-Verzweigung mehrzeilig werden.

Die IDE-Unterstützung in der Darstellung sollte die Entscheidung 
beeinflussen.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Steffen schrieb:
> Ist es üblich,

Üblich leider nicht, manch 'automatisches formatieren' macht es anders, 
aber ich finde es so am übersichtlichsten und mache das so.

von A. S. (Gast)


Lesenswert?

Achim H. schrieb:
> Einrückungstiefe ist ebenfalls variantenreich, häufig 4 oder 8 Zeichen
> ODER ein Tab.

zumal das oft nur zusammen bzw. mit weiteren Konventionen Sinn macht. 
Viele Köche verderben den Brei. Wenn einer die Klammersetzung, der 
andere Tab/Leerzeichen, der Dritte die Einrücktiefe entscheidet, dann 
passt es selten. Gleiches gilt für

 * mehrfache return / goto zum Funktionsende
 * Kommentare
 * Zeilenlänge
 * Funktionsgröße

Wer Zeilen sparen will/muss, hat mehr Sympathie für manche Arten wie 
andere. Wer 4-5 Einrückungen gewohnt ist, empfindet tab/8 als idiotisch.


(@TO: Dein Stil ist selten: Mal eingerückt (while) Mal nicht (b) )

von Dieter H. (kyblord)


Lesenswert?

ich mach immer so:

if a>100 {
}

Das spart einmal Enter drücken. :-)
und mit tab einrückungen. Wer drückt da 4x Leerzeichen? Da muss man 
schon ordentlich gestört sein

von Achim H. (anymouse)


Lesenswert?

Dieter H. schrieb:
> Das spart einmal Enter drücken. :-)
> und mit tab einrückungen. Wer drückt da 4x Leerzeichen? Da muss man
> schon ordentlich gestört sein

Einmal Enter drücken ist nicht soo viel Arbeit. Und die 4 Leerzeichen 
macht die Autoformatierung -- und auch dann wenn man zunächst alles in 
eine Zeile tippt.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

Selbst beim allerersten UNIX gab es einen C-Beautifier (cb). Der hat den 
K&R-Stil geprägt: https://www.unix.com/man-page/v7/1/cb/

Wenn man Code in den Linux-Kernel bringen will, nimmt man checkpatch.pl 
das einem einen anderen Stil aufprägt... 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/checkpatch.pl?h=v5.16-rc7

Wenn man für andere programmiert muss man sich an deren Konventionen 
halten. Für sich selbst nimmt man die, die einem am besten liegt.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Nikolaus S. schrieb:
> Wenn man für andere programmiert muss man sich an deren Konventionen
> halten.

Ein SW-Entwickler verlässt eher die Firma als eine geschweifte Klammer 
anders zu setzen (Alte Weisheit aus Indien)

von W.S. (Gast)


Lesenswert?

Achim H. schrieb:
> Ich würde es so schreiben:
> if (a == 1) {
>     while(b > 1000) {
>         b = b - 3;
>     }
> }
>
> Spart Platz in der Höhe, ohne zu viele Kompromisse in der Deutlichkeit.

Ist weit verbreitet, aber ziemlich unleserlich. Der Grund dafür ist, daß 
die Blockanfänge und -enden in verschiedenen Spalten stehen, was die 
Leserlichkeit beeinträchtigt.

Ansonsten halte ich das für ne Geschmackssache. Mein Ding ist obiges 
aber nicht, ich bevorzuge, die Blockanfänge und -enden in der gleichen 
Spalte zu sehen und lediglich 2 LZ einzurücken. Eine Quelldatei soll ja 
weder ein undurchdringlicher Dschungel noch ein zerrissener Fetzen sein.

Aber derartige Diskussionen hatten wir hier schon öfter. Da sind einige 
Leute geradezu militant geworden.

W.S.

von Norbert (Gast)


Lesenswert?

Formatierung, tja da gibt es ganz klare Standards.
So ca. 20 bis 30. Können auch fünfzig sein.
Ich schreibe im Allgemeinen meinen Code so wie ich es mag und lasse mir 
für die spätere Übergabe schon mal vorab die erwünschte ›astyle‹ 
Konfiguration geben.
Da wird das Zeug einmal durch gejagt und zwei Sekunden später passt es 
auch für die - gefühlt - hirnrissigsten Konventionen. Und davon habe ich 
leider schon einige sehen und ertragen müssen.

Ach ja, weil's gerade so schön passt ein kleiner Seitenhieb in Richtung 
Anti-Python-Taliban. Bei Python gibt's solche Probleme kaum. Vermutlich 
weil eh alle mit PyCharm arbeiten.

von Achim H. (anymouse)


Lesenswert?

Das andere Extrem wäre:
1
if 
2
(
3
    a == 1
4
) 
5
{
6
    while 
7
    (
8
        b > 1000
9
    ) 
10
    {
11
        b = b - 3;
12
    }
13
}

Neben den Einzügen für die Ebenen ist auch der Einzug bei Anweisungen 
interessant, die auf mehrer Zeilen aufgeteilt werden:
1
if ( variableMitLangemNamen == 1
2
        &&  variableMitLangemNamen == 2 
3
        &&  andereVariableMitLangemNamen == 9 ) {
4
    cmd1();
5
    cmdMitSehrLangemNamen( vieleParameter,
6
            auchMitLangemNamen);
7
    cmd3();
8
}

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wenn du nur für dich selber programmierst, kannst du den Stil verwenden,
der die persönlich am besten gefällt. Wichtiger als das konkrete
Formatierungsstil ist, dass du (zumindest innerhalb einer Quelldatei)
konsequent immer beim selben Stil  bleibst.

Wenn du in einer Gruppe mit anderen zusammenarbeitest, ist es ratsam,
sich auf einen gemeinsamen Stil zu einigen, an den sich jeder hält.

Wenn du in mehreren Gruppen arbeitest, solltest du dich an den in der
jeweiligen Gruppe vorherrschenden Stil halten.

Falls es dir schwer fällt, zwischen verschiedenen Stilen zu wechseln,
dann schreibe den Code in deinem persönlichen Stil und formatiere ihn
mit einem entsprechenden Tool in den Stil der anderen um. Man kann das
automatisieren, indem man den Editor immer beim Laden und Speichern
einer Datei das Formatierungstool mit der jeweils gewünschten
Konfiguration aufrufen lässt.

Ein sehr mächtiges Formatierungstool ist bspw. clang-format. Damit
lassen sich nicht nur die Einrückungen, sondern auch viele andere Dinge
wie bspw. Umbrüche langer Zeilen und Leerzeichen innerhalb einer Zeile
sehr flexibel konfigurieren.

Clang-format bringt ein paar vordefinierte Stile mit, nämlich die von
LLVM, GNU, Google, Chromium, Microsoft, Mozilla und WebKit. Wenn du
einen davon als deinen persönlich Stil (oder zumindest als Basis dafür)
auswählst, machst du sicher nicht viel falsch.

von Einer (Gast)


Lesenswert?

Also, mich um die Formatierung zu kümmern, das habe ich schon vor ein 
paar Jahren aufgehört.

Für die Formatierung gibt es Programme, bzw. Editoren, die das 
übernehmen. Ich schreibe den Code einfach nur noch hin, z.B. in einer 
Zeile, drücke Strg-S, und der Editor formatiert den Kram bevor er ihn 
speichert.

Und ja, ich habe auch Tabnine installiert. Aber das ist ja für die 
meisten hier der pure Teufel...

von sehr zu empfehlen (Gast)


Lesenswert?

Yalu X. schrieb:
> clang-format

ist eine tolle Sache.

wird in meinem Editor jedes mal beim Speichern aufgerufen.

von Gerald K. (geku)


Lesenswert?

Der JFE Programmeditor erlaubt ein nachträgliches Formatieren von C/C++ 
Code.

Damit kann man für eine durchgehend homogene Formatierung sorgen.

http://plit.de/asem-51/jens/jfe_eng.htm#CAlign

Download:

http://plit.de/asem-51/jens/jfe_eng.htm

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Auf Wikipedia gibt es einen Artikel zum Einrückungsstil.
Such dir einen aus.

von Oliver S. (oliverso)


Lesenswert?

Gerald K. schrieb:
> Der JFE Programmeditor erlaubt ein nachträgliches Formatieren von
> C/C++
> Code.

Jeder anständige Editor, der den Namen verdient, kann das.

Dann gibt es dazu noch externe Tools, die sich auch in Editoren 
einbinden lassen. AStyle, clangformat, usw. Nennen sich Code Beautifier, 
Google weiß Bescheid.

Oliver

von c-hater (Gast)


Lesenswert?

Ich würde das Programm in Assembler schreiben.

von FrediFred (Gast)


Lesenswert?

Schreib in Python, da sind deine Freiheit schon begrenzt

von Wühlhase (Gast)


Lesenswert?

In einer Firma habe ich auch mal solchen Quark gesehen:
1
//Nur für einzeilige Blöcke:
2
3
if(somethingIsTrue)
4
        {
5
    onlySingleLineExpression();
6
        }

Ansonsten lobe ich mir automatische Stilanpassung...ein gemeinsamer 
einheitlicher Codestil muß und sollte heute nicht mehr sein, finde ich.

von Gerald K. (geku)


Lesenswert?

Wühlhase schrieb:
> Ansonsten lobe ich mir automatische Stilanpassung...ein gemeinsamer
> einheitlicher Codestil muß und sollte heute nicht mehr sein, finde ich.

So kann man leicht feststellen wer der Author des Programmes war.

von Rolf M. (rmagnus)


Lesenswert?

Dussel schrieb:
> Achim H. schrieb:
>> Einrückungstiefe ist ebenfalls variantenreich, häufig 4 oder 8 Zeichen
>> ODER ein Tab.
> UND wäre doch auch mal interessant. :-D

Gibt es. Eine der dämlichsten Einrückungsvarianten, die ich bisher 
gesehen habe, benutzt für eine Einrückungsebene vier Spaces, für zwei 
Ebenen ein Tab, für drei ein Tab und vier Spaces, u.s.w.
Und die ist gar nicht mal so selten. Das sieht dann ganz besonders toll 
aus, wenn man seine Tab-Weite auf 4 oder gar auf 2 gestellt hat.

Dieter H. schrieb:
> und mit tab einrückungen. Wer drückt da 4x Leerzeichen? Da muss man
> schon ordentlich gestört sein

Mit tab ist hier nicht die Taste, sondern das Steuerzeichen im Code 
gemeint. Man drückt die Tab-Taste, und der Editor fügt z.B. 4 Spaces 
ein.

W.S. schrieb:
> Ansonsten halte ich das für ne Geschmackssache. Mein Ding ist obiges
> aber nicht, ich bevorzuge, die Blockanfänge und -enden in der gleichen
> Spalte zu sehen

Das empfinde ich genauso. Vielleicht liegt es auch an einem gewissen 
Bedürfnis für Symmetrie. Die öffnende und schließende Klammer müssen für 
mich einfach beide in der selben Spalte stehen und eine eigene Zeile 
haben, sonst wirkt das irgendwie unaufgeräumt.

> und lediglich 2 LZ einzurücken.

Ich hab in den vielen Jahren, seit ich programmiere, verschiedene 
Einrückungstiefen ausprobiert. Mir persönlich waren 8 zu viel und 2 zu 
wenig, und so bin ich bei 4 gelandet und geblieben. Ich hab auch schon 
Code gesehen, der eine Tiefe von 3 verwendet, aber irgendwie wirkt das 
auf mich unnatürlich. Ich weiß aber nicht, wieso, denn warum muss die 
Einrückungstiefe zwingend eine Zweierpotenz sein?

> Eine Quelldatei soll ja weder ein undurchdringlicher Dschungel noch ein
> zerrissener Fetzen sein.

Wenn du bei einer Tiefe von 4 nur noch einen "zerrissenen Fetzen" hast, 
dann ist dein Code zu verschachtelt.
Das andere Extrem findet man übrigens im Linux-Kernel. Einrückungstiefe 
8 gilt als Naturgesetz (*), und Zeilenlänge ist auf 80 zu beschränken. 
Da geht einem ziemlich schnell der Platz aus.

* und das meine ich wörtlich. Aus dem offiziellen Coding-Style-Dokument:
"Tabs are 8 characters, and thus indentations are also 8 characters. 
There are heretic movements that try to make indentations 4 (or even 2!) 
characters deep, and that is akin to trying to define the value of PI to 
be 3."

von Justin S. (Gast)


Lesenswert?

Steffen schrieb:
1
if (a == 1)
2
{
3
   while(b > 1000)
4
   {
5
      b = b - 3;
6
   }
7
}

Achim H. schrieb:
> Ich würde es so schreiben:
1
if (a == 1) {
2
    while(b > 1000) {
3
        b = b - 3;
4
    }
5
}


Ich würde es so schreiben (weil geschweifte Klammern bei nur einer 
Instruktion in C überflüssig sind):
1
if ( a == 1 )
2
    while ( b > 1000 )
3
        b -= 3;

von Norbert (Gast)


Lesenswert?

Justin S. schrieb:
> Ich würde es so schreiben (weil geschweifte Klammern bei nur einer
> Instruktion in C überflüssig sind):
>
1
if ( a == 1 )
2
>     while ( b > 1000 )
3
>         b -= 3;
Vielleicht solltest du noch eine Information zur Relevanz hinzufügen.
Besonders im Hinblick auf den Thread-Titel und die ursprüngliche Frage.
Hab' dir schon mal ein Epsilon rausgesucht: ε

von wenn schon (Gast)


Lesenswert?

die überflüssigen Whitespaces auch weglassen (und das Wort "whitespaces" 
sowieso, denn das ist Autobahn und geht somit gar nicht)
1
if(a==1)while(b>1000)b-=3;

von Klaus W. (mfgkw)


Lesenswert?

Justin S. schrieb:
> Ich würde es so schreiben (weil geschweifte Klammern bei nur einer
> Instruktion in C überflüssig sind):

Linefeed ist auch nicht nötig und wird völlig überbewertet.

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Justin S. schrieb:
> Ich würde es so schreiben (weil geschweifte Klammern bei nur einer
> Instruktion in C überflüssig sind):
1
if (a == 1)
2
    while (b > 1000)
3
        b -= 3;
Genau das würde ich nicht machen. Bzw. höchstens dann, wenn nur ein 
einziger, einfacher Befehl im if-Block steht.
Es ist einfach zu fehleranfällig wenn nachträglich ein Befehl 
hinzugefügt werden muss.

Ob die öffnende Klammer eine neue Zeile bekommt finde ich egal. Wichtig 
ist mir, dass die Schließende in der selben Spalte steht wie der Befehl, 
zu dem der Block gehört. Dann kann man leicht erkennen wo ein Block 
anfängt & wie weit er geht.

Explizit abraten würde ich von Folgendem (Wikipedia nennt das den 
Whitesmith-Stil):
1
if (a == 1)
2
    {
3
    while(b > 1000)
4
        {
5
        b = b - 3            
6
        }
7
    }
Da ist nicht auf einen Blick erkennbar wo der dazugehörige Blockanfang 
zu einer schließenden Klammer ist.

: Bearbeitet durch User
von python ist sch.... (Gast)


Lesenswert?

Tilo R. schrieb:
> Explizit abraten würde ich von Folgendem (Wikipedia nennt das den
> Whitesmith-Stil)

Das ist doch python ;-) Nur ohne geschweiften Klammern.
1
b = 14
2
a = 1
3
4
if a == 1:
5
    print('block begin')
6
    while b > 10:
7
        b = b -3
8
    print('block end')

einfach nur schrecklich ;-)

von Rolf M. (rmagnus)


Lesenswert?

Tilo R. schrieb:
> Justin S. schrieb:
>> Ich würde es so schreiben (weil geschweifte Klammern bei nur einer
>> Instruktion in C überflüssig sind):
>> if (a == 1)
>>     while (b > 1000)
>>         b -= 3;
> Genau das würde ich nicht machen. Bzw. höchstens dann, wenn nur ein
> einziger, einfacher Befehl im if-Block steht.
> Es ist einfach zu fehleranfällig wenn nachträglich ein Befehl
> hinzugefügt werden muss.

Aber eben nur dann, wenn die öffnende Klammer keine eigene Zeile 
bekommt.
1
    if (a == 1 && (x + y)*3 == z) {
2
        irgendwas();
ist halt schwerer von
1
    if (a == 1 && (x + y)*3 == z)
2
        irgendwas();
zu unterscheiden als
1
    if (a == 1 && (x + y)*3 == z)
2
    {
3
        irgendwas();

Abgesehen davon wird mein Editor zickig, wenn ich ohne Klammern dem if 
eine Zeile anfüge, weil er anders einrücken will und ich mich explizit 
darüber hinwegsetzen müsste. Und zusätzlich warnt mich dann auch noch 
gcc, wenn das "seltsam" eingerückt ist. Von daher sehe ich da eher 
weniger die Gefahr, da einen Fehler zu machen.

von Dussel (Gast)


Lesenswert?

Rolf M. schrieb:
> Dussel schrieb:
>> Achim H. schrieb:
>>> Einrückungstiefe ist ebenfalls variantenreich, häufig 4 oder 8 Zeichen
>>> ODER ein Tab.
>> UND wäre doch auch mal interessant. :-D
>
> Gibt es. Eine der dämlichsten Einrückungsvarianten, die ich bisher
> gesehen habe, benutzt für eine Einrückungsebene vier Spaces, für zwei
> Ebenen ein Tab, für drei ein Tab und vier Spaces, u.s.w.
Ich sage immer, wenn man es sich vorstellen kann und es nicht unmöglich 
ist, gibt es jemanden, der es macht oder gemacht hat.

Wenn man eine Einrückung von fünf Zeichen will, macht man halt einen Tab 
und ein Leerzeichen pro Einrückungsebene. Aber bloß nicht ein 
Leerzeichen und dann einen Tab. :-O

von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

Tilo R. schrieb:
> Genau das würde ich nicht machen. Bzw. höchstens dann, wenn nur ein
> einziger, einfacher Befehl im if-Block steht.
> Es ist einfach zu fehleranfällig wenn nachträglich ein Befehl
> hinzugefügt werden muss.

richtig, es gibt auch style guides die das explizit verbieten und das 
würde dann nicht durch einen CI Test gehen.
Noch fieser ist es nämlich wenn dem if ein Makro folgt das z.B. als 
debug print eine Funktion ausführt oder durch nichts ersetzt wird. Dann 
ändert sich der Programfluss komplett durch ein anderes define.

Früher habe ich auch die Version mit Klammer in eigener Zeile benutzt, 
das wurde gemeinsam abgestimmt und das Argument war das man die 
Zugehörigkeit besser sieht. Heute sehe ich in den meisten Projekten mehr 
die sparsame Version, die Editoren stellen den Code viel übersichtlicher 
dar als früher. Im Anhang ein Beispiel mit VSC, die Option mit den 
Linien kam erst kürzlich dazu.

von Sauer (Gast)


Lesenswert?

Am besten ist es, verschiedene Programmierstile zu mischen, so daß es 
keinen Streit gibt.

von Mombert H. (mh_mh)


Lesenswert?

Rolf M. schrieb:
> if (a == 1 && (x + y)*3 == z)

Sind die fehlenden Leerzeichen um das *-Zeichen Absicht? Wenn ja, wie 
sieht die Regel dahinter aus?

von Rolf M. (rmagnus)


Lesenswert?

Dussel schrieb:
> Wenn man eine Einrückung von fünf Zeichen will, macht man halt einen Tab
> und ein Leerzeichen pro Einrückungsebene. Aber bloß nicht ein
> Leerzeichen und dann einen Tab. :-O

Naja, letzteres würde ja auch nicht funktionieren, da ein Tab ja nicht 
einfach ein n Zeichen langes Leerzeichen ist, sondern vielmehr auf das 
nächste Vielfache von n schiebt.

Johannes S. schrieb:
> Noch fieser ist es nämlich wenn dem if ein Makro folgt das z.B. als
> debug print eine Funktion ausführt oder durch nichts ersetzt wird. Dann
> ändert sich der Programfluss komplett durch ein anderes define.

Solche Makros gehören aber auch verboten.

Mombert H. schrieb:
> Rolf M. schrieb:
>> if (a == 1 && (x + y)*3 == z)
>
> Sind die fehlenden Leerzeichen um das *-Zeichen Absicht?

Nein, hab nur schnell irgendwas dazu geschrieben, damit die Zeile länger 
wird.

> Wenn ja, wie sieht die Regel dahinter aus?

Ohne die Klammern (also wenn nur y mit 3 multipliziert würde), würde ich 
es tatsächlich so schreiben:
1
if (a == 1 && x + y*3 == z)
um damit zu betonen, dass sich die Multiplikation nur auf y bezieht.

von ++C (Gast)


Lesenswert?

Also ich mache es so wie von Kernighan und Ritchie in ihrem Buch 
vorgemacht - mit dem "one true brace style". Stroustrop hält sich auch 
daran - aus Respekt. Wäre ziemlich überheblich, zu denken, man könne das 
besser.

von c-hater (Gast)


Lesenswert?

Rolf M. schrieb:
> um damit zu betonen, dass sich die Multiplikation nur auf y bezieht.

Ist das für Mathematiklegastheniker?

von Rolf M. (rmagnus)


Lesenswert?

c-hater schrieb:
> Rolf M. schrieb:
>> um damit zu betonen, dass sich die Multiplikation nur auf y bezieht.
>
> Ist das für Mathematiklegastheniker?

Nein, nur damit man es schneller erfasst, genau wie bei der Einrückung. 
Und damit man sieht, dass das Absicht war und nicht einfach ein Paar 
Klammern vergessen wurde.

von chris_ (Gast)


Lesenswert?

Hier die Zusammenfasssung:

https://de.wikipedia.org/wiki/Einr%C3%BCckungsstil

Ich bevorzuge den BSD-Style.

von Nur_ein_Typ (Gast)


Lesenswert?

python ist sch.... schrieb:
>
1
> b = 14
2
> a = 1
3
> 
4
> if a == 1:
5
>     print('block begin')
6
>     while b > 10:
7
>         b = b -3
8
>     print('block end')
9
>
>
> einfach nur schrecklich ;-)

Schrecklich schön! Kein Wunder, daß die Freunde anderer Sprachen alle 
neidisch sind. ;-)

von kleiner Admin (Gast)


Lesenswert?

Ich würde es so machen:
1
if (a == 1) {
2
   while(b > 1000) { i++; b = b - 3;}
3
   next;
4
   }
5
next;
Wenn der auszuführende Block ganz einfach ist, dann schreibe ich ihn 
direkt hinter der Bedingung.
Einrückung immer nur 3 Zeichen, sonst läßt sich bei höherer 
Schachtelungstiefe kaum noch etwas erkennen.
Die Klammer für das Blockende steht in der gleichen Einrückungstiefes 
des Blockes, so wird der Lesefluß weniger gestört.

Als die Rechner noch wenig Speicher hatten, haben wir die 
BASIC-Programme immer durch den "REM-Space-Killer" gejagt, der alle 
Kommentare und alle unnötigen Whitespaces entfernt hat. Dann 'mal viel 
Spaß bei der Wartung...

von Wühlhase (Gast)


Lesenswert?

Rolf M. schrieb:
> * und das meine ich wörtlich. Aus dem offiziellen Coding-Style-Dokument:
> "Tabs are 8 characters, and thus indentations are also 8 characters.
> There are heretic movements that try to make indentations 4 (or even 2!)
> characters deep, and that is akin to trying to define the value of PI to
> be 3."

Eigentlich ganz vernünftig...finde ich. So wird man zu sehr sauberem und 
gut lesbarem Code geradezu gezwungen.
Das erfordert kurze, knackige Bezeichner, macht querformatfüllende 
Einrückorgien unmöglich, und erfordert eine Vereinfachung von 
komplexeren Codefragmenten geradezu.
Sehr clever.


++C schrieb:
> Wäre ziemlich überheblich, zu denken, man könne das besser.

Meinst du, jemand denkt tatsächlich daß er es besser macht? Oder nicht 
doch einfach nur anders?
Auch wenn ich diesen Stil in leichter Abwandlung (ich beginne nach } 
normalerweise eine neue Zeile) ebenfalls benutze.

Aber wie gesagt - ich finde sowieso, daß Fragen wie Einrückstile 
zumindest heute keineswegs einheitlich sein sollten.


Gerald K. schrieb:
> Wühlhase schrieb:
>> Ansonsten lobe ich mir automatische Stilanpassung...ein gemeinsamer
>> einheitlicher Codestil muß und sollte heute nicht mehr sein, finde ich.
>
> So kann man leicht feststellen wer der Author des Programmes war.

Sowas hat gefälligst im Log des VCS zu stehen. Und vielleicht noch einem 
Codekommentar.

Den Autor über den Einrückstil zu identifizieren, ach du Scheiße...und 
für verschiedene Versionsstände dann durchnummerierte Ordner?

von Nur_ein_Typ (Gast)


Lesenswert?

Rolf M. schrieb:
> c-hater schrieb:
>> Rolf M. schrieb:
>>> um damit zu betonen, dass sich die Multiplikation nur auf y bezieht.
>>
>> Ist das für Mathematiklegastheniker?
>
> Nein, nur damit man es schneller erfasst,

Schnelles Erfassen spielt bei C-Hassern und Assemblerfänbois keine 
Rolle. ;-)

von Jemand (Gast)


Lesenswert?

Wühlhase schrieb:
> Das erfordert kurze, knackige Bezeichner,

In der Praxis bekomme ich somit oft aussagelose Schrottbezeichner

von c-hater (Gast)


Lesenswert?

Jemand schrieb:
> In der Praxis bekomme ich somit oft aussagelose Schrottbezeichner

Wer wegen der Länge von Bezeichnern die Zeilenlänge begrenzt oder die 
Tabweite verringert, hat die Kontrolle über sein Leben verloren.

Lange Zeilen entstehen nicht durch lange Bezeichner, sondern durch 
endlose Schachtelungen.

von A. S. (Gast)


Lesenswert?

c-hater schrieb:
> Wer wegen der Länge von Bezeichnern die Zeilenlänge begrenzt oder die
> Tabweite verringert, hat die Kontrolle über sein Leben verloren.

genau. Help1234 und Temp5678 erlauben schon allein 20.000 sprechende 
Bezeichner mit nur 8 Zeichen. Und mit h, hlp, Hlp und help und 
entsprechenden temp-Variationen sind es schon 100.000. Das sollte 
ausreichen.

von Mombert H. (mh_mh)


Lesenswert?

Nur_ein_Typ schrieb:
> Rolf M. schrieb:
>> c-hater schrieb:
>>> Rolf M. schrieb:
>>>> um damit zu betonen, dass sich die Multiplikation nur auf y bezieht.
>>>
>>> Ist das für Mathematiklegastheniker?
>>
>> Nein, nur damit man es schneller erfasst,
>
> Schnelles Erfassen spielt bei C-Hassern und Assemblerfänbois keine
> Rolle. ;-)
Bei mir würde diese Leerzeichen-Praxis eher das Gegenteil bewirken und 
von den wichtigen Dingen ablenken. Ohne einen Kommentar, weiß man eh 
nicht was diese Ausnahme-Leerzeichen bedeuten sollen. Mal davon 
abgesehen, dass die Leerzeichen (fehlend oder überflüssig) die 
automatische Formatierung beim commit eh nicht überleben würden.

c-hater schrieb:
> Jemand schrieb:
>> In der Praxis bekomme ich somit oft aussagelose Schrottbezeichner
>
> Wer wegen der Länge von Bezeichnern die Zeilenlänge begrenzt oder die
> Tabweite verringert, hat die Kontrolle über sein Leben verloren.
>
> Lange Zeilen entstehen nicht durch lange Bezeichner, sondern durch
> endlose Schachtelungen.
Was bezeichnest du als "lange Bezeichner" und was als "endlose 
Schachtelungen"?


A. S. schrieb:
> Help1234 und Temp5678 erlauben schon allein 20.000 sprechende
> Bezeichner mit nur 8 Zeichen. Und mit h, hlp, Hlp und help und
> entsprechenden temp-Variationen sind es schon 100.000. Das sollte
> ausreichen.
8 Zeichen? Bist du wahnsinnig? 6 ist das absolute Maximum! Wie soll man 
sonst mit Fortran77 kompatibel sein?

von c-hater (Gast)


Lesenswert?

A. S. schrieb:
> c-hater schrieb:
>> Wer wegen der Länge von Bezeichnern die Zeilenlänge begrenzt oder die
>> Tabweite verringert, hat die Kontrolle über sein Leben verloren.
>
> genau. Help1234 und Temp5678 erlauben schon allein 20.000 sprechende
> Bezeichner mit nur 8 Zeichen. Und mit h, hlp, Hlp und help und
> entsprechenden temp-Variationen sind es schon 100.000. Das sollte
> ausreichen.

Hast du den zitierten Text überhaupt gelesen?
Ich habe genau das Gegenteil gesagt. Ich bin für lange Bezeichner.

von Wühlhase (Gast)


Lesenswert?

Also ich bin ja lieber für eindeutige, aussagekräftige Bezeichner. Lang 
müssen die dazu nicht unbedingt sein (auch wenn es sich manchmal nur 
schwer vermeiden läßt).

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich empfehle dazu das Buch "Clean Code" von Robert C. Martin.

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Frank E. schrieb:
> Ich empfehle dazu das Buch "Clean Code" von Robert C. Martin.
Es gibt auch recht unterhaltsame Vorträge von ihm auf youtube.

von Meister E. (edson)


Lesenswert?

Justin S. schrieb:
> Steffen schrieb:
>
1
> if (a == 1)
2
> {
3
>    while(b > 1000)
4
>    {
5
>       b = b - 3;
6
>    }
7
> }
8
>
>
> Achim H. schrieb:
>> Ich würde es so schreiben:
>
1
> if (a == 1) {
2
>     while(b > 1000) {
3
>         b = b - 3;
4
>     }
5
> }
6
>
>
>
> Ich würde es so schreiben (weil geschweifte Klammern bei nur einer
> Instruktion in C überflüssig sind):
>
1
> if ( a == 1 )
2
>     while ( b > 1000 )
3
>         b -= 3;
4
>

@Steffen

Ich schreibe so wie Du in Deinem Beispiel. Das war mir in den 
Anfangsjahren noch zu "uncool" irgendwie, da hätte ich das eher noch wie 
Justin gemacht oder auch wie das (nicht zitierte Beispiel) in nur einer 
Zeile, mit der Zeit habe ich aber gelernt, dass es Vorteile hat, 
geschweiften Klammern eigene Zeilen und korrespondierende Spalten zu 
gönnen.
Ist natürlich Geschmackssache, kann jeder halten wie er will - aber 
jeder kann den Stil im ersten Beispiel gut lesen, man gewöhnt sich sehr 
schnell daran.
Bei fremden Programmen ist mir der Format-Stil eher egal, aber mir ist 
es dann lieber wenn er konsequent durchgezogen wurde.

von W.S. (Gast)


Lesenswert?

Rolf M. schrieb:
> Aus dem offiziellen Coding-Style-Dokument:

Naja, Linuxer waren und sind ganz offentlich inherent militant.

Heutzutage dient der Tabulator nur noch dem Zweck, den der Name 
suggeriert: der Tabulation. Und ob das nun bei äquidistantem Font genau 
8 Zeichen sind oder bei anderen Fonts eben eine nicht auf ganzzahlige 
Zeichenbreiten abbildbaren Abstand, ist eigentlich egal. Tabulation 
schafft "mechanisch" richtige Abstände ohne Bezug auf Zeichenanzahl, die 
dort hineinpaßt. Die Zeichenanzahl von 8 stammt letztlich vom Teletype 
und war von Anfang an nur ein Kompromiß. Linuxer sind daher eben auch 
rückständig.

W.S.

von W.S. (Gast)


Lesenswert?

A. S. schrieb:
> Help1234 und Temp5678 erlauben schon allein 20.000 sprechende
> Bezeichner mit nur 8 Zeichen.

Naja, und so lesen sich dann Quelldateien mit derartigen Bezeichnern 
auch. Von wegen 'sprechend'. Ich kann mich noch an meine 
Programmieranfänge erinnern, wo die Länge von Bezeichnern auf 4 Zeichen 
begrenzt war. Wehe, wenn man dort keine ordentlichen Kommentare beigefüg 
hatte. Ja, das waren eben die Begrenzungen bei Systemen, die mit 
Lochband und 32K Hauptspeicher gesegnet waren. Aber solche labernden 
(anstatt sprechenden) Bezeichner wie Help1234 sind keinen Deut 
nützlicher.

W.S.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Frank E. schrieb:
> Ich empfehle dazu das Buch "Clean Code" von Robert C. Martin.

Ich würde es – im Kontext dieses Threads (es geht um C und C++), aber
auch generell – nur eingeschränkt empfehlen. Ich habe es gelesen und war
schon nach den ersten 10 Prozent etwas enttäuscht, was sich auch danach
eher noch verschlimmerte.

Zum einen gefällt mir der Schreibstil des Autors nicht, weswegen das
Lesen – unabhängig vom Inhalt – einfach nicht viel Spaß gemacht hat.
Diese Rezension, die ich leider erst gelesen habe, nachdem ich das Buch
schon gekauft hatte, trifft es IMHO genau auf den Punkt:

  https://www.amazon.de/gp/customer-reviews/R2L28ZEJ72KL0Q/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&ASIN=3826655486

Zum anderen ist das Buch ziemlich Java-lastig, ohne dass dies aus dem
Titel oder der Zusammenfassung auf der Rückseite hervorgeht. Zwar war
mir das bereits vorher bekannt, und natürlich lässt sich bzgl. des
Programmierstils vieles von Java nach C++ übertragen, aber am Ende
stellte sich heraus, dass etwa ein Drittel des Inhalts Java-spezifisch
und deswegen für C++-Programmierer kaum von Interesse ist. Auf der
anderen Seite gibt es sehr viele C++-spezifische Dinge, die in dem Buch
nicht behandelt werden, über die ich aber ebenfalls gerne etwas erfahren
hätte.

Ohne es vollständig gelesen zu haben, erscheint mir "Clean C++20" von
Stephan Roth für C++-Programmierer die deutlich bessere Wahl zu sein. Es
orientiert sich vom Aufbau her an "Clean Code" von Robert C. Martin und
verweist auch mehrfach auf dieses Buch, um herauszustellen, inwiefern
die dort genannten Regeln in C++ anders anzuwenden sind als in Java. Und
natürlich werden – dem Titel entsprechend – sehr viele C++-spezifische
Dinge angesprochen, zu denen es in Java keinen Gegenpart gibt.

Wenn ich meinen derzeitigen Stack von 1,7 Büchern abgearbeitet habe,
werde ich mir wahrscheinlich dieses Buch von Stephan Roth zulegen.

von Carsten P. (r2pi)


Lesenswert?

A. S. schrieb:
> Ein SW-Entwickler verlässt eher die Firma als eine geschweifte Klammer
> anders zu setzen (Alte Weisheit aus Indien)

Bleibt die Frage, ob es alte_weisheit_aus_indien oder 
alteWeisheitAusIndien heißt! ^^

Beitrag #6930326 wurde vom Autor gelöscht.
von Carsten P. (r2pi)


Lesenswert?

Yalu X. schrieb:
> Zum einen gefällt mir der Schreibstil des Autors nicht, weswegen das
> Lesen – unabhängig vom Inhalt – einfach nicht viel Spaß gemacht hat.
> Diese Rezension, die ich leider erst gelesen habe, nachdem ich das Buch
> schon gekauft hatte, trifft es IMHO genau auf den Punkt:
>
> 
https://www.amazon.de/gp/customer-reviews/R2L28ZEJ72KL0Q/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&ASIN=3826655486

Yalu X. schrieb:
> Frank E. schrieb:
>> Ich empfehle dazu das Buch "Clean Code" von Robert C. Martin.
>
> Ich würde es – im Kontext dieses Threads (es geht um C und C++), aber
> auch generell – nur eingeschränkt empfehlen.

> Zum einen gefällt mir der Schreibstil des Autors nicht, weswegen das
> Lesen – unabhängig vom Inhalt – einfach nicht viel Spaß gemacht hat.

Ich zitiere mal aus der Rezension:
> Trotzdem ist es sehr dogmatisch geschrieben, lässt wenig Raum
> für Diskussionen, und ist vor allem gegenüber den Codebeispielen
> herablassend
Genau DAS ist die Intention von Martin: am besten GAR KEINEN Raum für 
Diskussionen zu lassen, DARUM schreibt er so, wie er schreibt.

Mal ab davon, dass nach der GOF Fowler und Martin die ersten waren, die 
den Leuten mit ihrem Pippi-Langstrumpf-Code-Stil den Kopf gewaschen und 
klare Prinzipien eingeführt haben, würde ich persönlich jedem klugen, 
sachlichen Argument zur Code-Formatierung (von Architektur gar nicht zu 
reden) zustimmen, wenn es sachlich begründet ist. Gibt es aber nicht. 
Genauso wenig wie die alte Curly- vs. Whitespace Debatte uns auch bis 
nach dem Ausstieg aus der Kernenergie erhalten bleiben wird.

Was Martin eigentlich macht, ist das hier hinzuschreiben: "Lies meinen 
Kram, denk drüber nach, verstehe es, und wenn du dann anderer Meinung 
bist, okay, mach es besser!" Es ist ja auch nicht so, dass Martin und 
viele andere seiner Zeit und Zunft nicht später eigene Meinungen 
korrigiert oder verfeinert hätten.

Der Haken ist das mit dem Verstehen. Es gibt zu viele Coder, die das 
beibehalten, was sie einst, wo alles schön war, gelernt haben, oder die 
das beibehalten, was sie einst hübsch fanden, ohne über Sinn und Zweck 
von Regeln nachzudenken, oder die einfach der Meinung sind (sieht man 
heutzutage ja auch in vielen anderen Bereichen), dass Regeln, ohne ihre 
Absichten selbst zu verstehen, einfach scheiße sind.

Vernünftig durchdachte Coding Conventions haben eine einzige Regel: 
Schreibe Code so, dass er trotz der Unzulänglichkeiten der jeweiligen 
Programmiersprache mit so wenigen Kommentaren wie möglich auch von 
deinem Nachfolger im Job verstanden wird.

Das ist eigentlich alles, was es meiner Meinung dazu zu sagen gibt.

von Carsten P. (r2pi)


Lesenswert?

Meister E. schrieb:
>> Steffen schrieb:
>>
1
>> if (a == 1)
2
>> {
3
>>    while(b > 1000)
4
>>    {
5
>>       b = b - 3;
6
>>    }
7
>> }
8
>>

Ganz persönlich wäre ich fast dabei:
1
if (a == 1)
2
{
3
    while (b > 1000)
4
    {
5
        b = b - 3;
6
    }
7
}

Der Unterschied ist genau ein Leerzeichen, nämlich das zwischen while 
und der runden Klammer auf. Ich halte es so: Funktionen- und 
Methodenaufrufe kriegen ihre runde Klammer wie eine mathematische 
Funktion direkt nach ihrem Namen; und alles, was Blöcke enthalten kann 
im klassischen Sinne (also keine Lambdas und so) bekommt ein 
Leerzeichen. "Curly-auf-und-Curly-Sue" möchte ich vertikal auf einer 
Höhe sehen. Ich mag vertikal luftigen Code, er gliedert Gedanken. Alles, 
was Curlys (also Blöcke) enthalten kann, kriegt Curlys. Ausnahmen sind 
hier lange Zuweisungsentscheidungen der Sorte
1
if (  a <  1 && b <  1  && c >  0  ) value = a + b;   else {
2
if (  a == 1            && c == 0  ) value = 2;       else {
3
if (            b >  0  && c == 1  ) value = 3 * b;
4
else   /* none of the above */       value = 4711;         }}

Blödsinniges Beispiel, aber zum Prinzip.

Jedenfalls, wenn solche hässlichen Entscheidungen tabellarisch 
übersichtlicher sind, bevorzuge ich sowas. Aber das ist ja wiederum eine 
meiner (persönlichen) Meinungen zu Programmiersprachen: Sie sollten so 
weit wie möglich unsichtbar sein und die Problemstellung in den 
Vordergrund stellen, und sie sollten je nach Problemstellung flexibel in 
der Formatierung sein.

Python-Fans werden mir sogleich vehement widersprechen ^^

von Mombert H. (mh_mh)


Lesenswert?

Yalu X. schrieb:
> Diese Rezension, die ich leider erst gelesen habe, nachdem ich das Buch
> schon gekauft hatte, trifft es IMHO genau auf den Punkt:
>
> 
https://www.amazon.de/gp/customer-reviews/R2L28ZEJ72KL0Q/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&ASIN=3826655486

Das
1
Es leckt aus jedem Satz heraus: "Ich Gott, du Nichts."
passt zu meinen Erfahrungen mit seinen Vorträgen.

von A. S. (Gast)


Lesenswert?

Carsten P. schrieb:
> Mal ab davon, dass nach der GOF Fowler und Martin die ersten waren, die
> den Leuten mit ihrem Pippi-Langstrumpf-Code-Stil den Kopf gewaschen und
> klare Prinzipien eingeführt haben, würde ich persönlich jedem klugen,
> sachlichen Argument zur Code-Formatierung (von Architektur gar nicht zu
> reden) zustimmen, wenn es sachlich begründet ist. Gibt es aber nicht.

Es gab schon vor Martin Bücher, die sich damit befasst haben und 
durchaus verschiedene Sichtweisen beleuchtet und begründet haben. Code 
Complete z.B.. Und davor gab es gar wirkliche Untersuchungen, die jedoch 
heute kaum noch Aussagekraft haben.

von Carsten P. (r2pi)


Lesenswert?

Mombert H. schrieb:
> Das
>
1
> Es leckt aus jedem Satz heraus: "Ich Gott, du Nichts."
2
>

Und du so "Du hast doch keine Ahnung!"?

Und wenn er zehnmal ein Arsch ist, hat er in fast allen Dingen Recht. 
Weil er zwar kein Gott ist, aber weiß, was er sagt, und wieso er es 
sagt. Und wenn ein paar mehr zwischen der Person und den Aussagen 
unterscheiden könnten, wäre das ein Fortschritt. Wenn dir das persönlich 
nahe geht, tut es mir leid.

Ralf Westphal (also das deutsche Pendant zu Martin und Fowler) ist auch 
nicht mein bester persönlicher Freund (ja, wir kennen uns), trotzdem 
halte ich mich mit ganz brauchbarem Erfolg an viele seiner Ideen und 
Regeln.

Man muss halt insbesondere beruflich mal zwischen dem Bauern und seinen 
Kartoffeln unterscheiden können.

von Mombert H. (mh_mh)


Lesenswert?

Carsten P. schrieb:
> Man muss halt insbesondere beruflich mal zwischen dem Bauern und seinen
> Kartoffeln unterscheiden können.
Warum? Wenn ich den Bauern nicht mag, gehe ich wo anders Kartoffeln 
kaufen.

Nichts, von dem was ich bisher aus seiner Hand gelesen oder aus seinem 
Mund gehört habe, war weltbewegend, neu oder einzigartig. Es gibt 
genügend gute Bücher zu dem Thema, die zusätzlich noch Spaß beim Lesen 
machen. Warum sollte ich was von ihm lesen?

von Carsten P. (r2pi)


Lesenswert?

Mombert H. schrieb:
> Warum?

Stimmt, müssen musst du gar nichts außer irgendwann sterben und 
zwischendurch auf Klo (liebster Spruch einer meiner besten Freundinnen)

von Carsten P. (r2pi)


Lesenswert?

Mombert H. schrieb:
> Nichts, von dem was ich bisher aus seiner Hand gelesen oder aus seinem
> Mund gehört habe, war weltbewegend, neu oder einzigartig.

Das ist das Schöne an Meinungen: jeder darf welche haben. Welche richtig 
oder falsch, brauchbar oder schrottig sind, entscheidet der Markt. 
Früher oder später.

Drum das mit dem Bauern und den Kartoffeln: Ich persönlich entscheide 
nach den Kartoffeln, nicht nach dem Bauern.

von Mombert H. (mh_mh)


Lesenswert?

Carsten P. schrieb:
> Mombert H. schrieb:
>> Warum?
>
> Stimmt, müssen musst du gar nichts außer irgendwann sterben und
> zwischendurch auf Klo (liebster Spruch einer meiner besten Freundinnen)

Vielen Dank für deine Meinung!

von Carsten P. (r2pi)


Lesenswert?

Mombert H. schrieb:
> Vielen Dank für deine Meinung!

Entschuldige bitte. Das war ein wenig arg formuliert. Ich bin halt 
ehrlich gesagt froh darüber, wenn Leute, mit denen zusammen ich was 
coden soll, wenigstens ein paar der Standard-Werke gelesen haben, und 
viele davon hören sich so an wie Martins Tiraden. Lies mal die 
Original-Ausgabe von der GOF, oder lies manche Abhandlungen von Fowler. 
Viel charmanter sind die auch nicht.

Richtig, das kann man ihnen vorwerfen: Keine Ahnung von Pädagogik. Aber 
eigentlich sind wir doch alle alt genug, den Bauern von seinen 
Kartoffeln zu unterscheiden, oder?

Du wählst doch, nehme ich mal an, ne Partei auch nicht danach, welcher 
Vorsitzende den hübschesten Hintern oder welche Vorsitzende die netteste 
Frisur hat. Und beruflich ist es dir wuppe, bei welcher Firma die 
Hotline die säuselndste Stimme hat bei ner Reklamation.

: Bearbeitet durch User
von Meister E. (edson)


Lesenswert?

Carsten P. schrieb:
> Der Unterschied ist genau ein Leerzeichen, nämlich das zwischen while
> und der runden Klammer auf. Ich halte es so: Funktionen- und
> Methodenaufrufe kriegen ihre runde Klammer wie eine mathematische
> Funktion direkt nach ihrem Namen; und alles, was Blöcke enthalten kann
> im klassischen Sinne (also keine Lambdas und so) bekommt ein
> Leerzeichen.

Interessant. Kann mir schon vorstellen, dass Du damit noch schneller in 
eigenen Code wieder-eintauchen kannst nach längerer Zeit.

> "Curly-auf-und-Curly-Sue" möchte ich vertikal auf einer
> Höhe sehen.

> Ich mag vertikal luftigen Code, er gliedert Gedanken. Alles,

Schönes Statement, genau was ich sagen wollte. Daumen hoch.

> was Curlys (also Blöcke) enthalten kann, kriegt Curlys. Ausnahmen sind
> hier lange Zuweisungsentscheidungen der Sorte
>
>
1
> if (  a <  1 && b <  1  && c >  0  ) value = a + b;   else {
2
> if (  a == 1            && c == 0  ) value = 2;       else {
3
> if (            b >  0  && c == 1  ) value = 3 * b;
4
> else   /* none of the above */       value = 4711;         }}
5
>
>
> Blödsinniges Beispiel, aber zum Prinzip.
>
> Jedenfalls, wenn solche hässlichen Entscheidungen tabellarisch
> übersichtlicher sind, bevorzuge ich sowas. Aber das ist ja wiederum eine
> meiner (persönlichen) Meinungen zu Programmiersprachen: Sie sollten so
> weit wie möglich unsichtbar sein und die Problemstellung in den
> Vordergrund stellen, und sie sollten je nach Problemstellung flexibel in
> der Formatierung sein.

Stimmt, diesem Mittel habe ich mich auch schon bedient, aus den von Dir 
genannten Gründen. Übrigens, sehr gute Darstellung des Prinzips, auch 
mit dem In-Code-Kommentar.

> Python-Fans werden mir sogleich vehement widersprechen ^^

Das ist möglich - aber sinnlos ;)

von Oliver S. (oliverso)


Lesenswert?

Carsten P. schrieb:
> würde ich persönlich jedem klugen,
> sachlichen Argument zur Code-Formatierung (von Architektur gar nicht zu
> reden) zustimmen, wenn es sachlich begründet ist. Gibt es aber nicht.

Carsten P. schrieb:
> Und wenn er zehnmal ein Arsch ist, hat er in fast allen Dingen Recht.

Wie du ja selber schreibts, gibt es keine sachlich begründeten Argumente 
zur Code-Formatierung. Damit kann auch niemand in diesem Bereich Recht 
haben oder falsch liegen, egal, was für ein arsch er auch ist.

Dir richtigen Coding-Conventions sind die, die der Auftraggeber 
vorschreibt. Alles andere ist Mimimi - "ich finde blau aber schöner als 
türkis".

Oliver

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Meister E. schrieb:
>> if (  a <  1 && b <  1  && c >  0  ) value = a + b;   else {
>> if (  a == 1            && c == 0  ) value = 2;       else {
>> if (            b >  0  && c == 1  ) value = 3 * b;
>> else   /* none of the above */       value = 4711;         }}
>>

> Stimmt, diesem Mittel habe ich mich auch schon bedient, aus den von Dir
> genannten Gründen. Übrigens, sehr gute Darstellung des Prinzips, auch
> mit dem In-Code-Kommentar.

Sorry, aber die {} sind in dem Beispiel schon ziemlich ungewöhnlich. 
Tabellarisch ja. Aber wenn, dann "else if" ohne. Und eher (wie Misra & 
Co verlangen) um die value-Ausdrücke.

Leerzeichen um eng bindende Operatoren bei mehreren Ebenen ohne Klammer 
sind auch nicht mein Fall, aber verm. Geschmacksache.
1
if      (a <1 && b <1 && c >0) value = a+b;
2
else if (a==1         && c==0) value = 2;   
3
else if (        b >0 && c==1) value = 3*b; 
4
else                           value = 4711;

von Nur_ein_Typ (Gast)


Lesenswert?

W.S. schrieb:
> Naja, und so lesen sich dann Quelldateien mit derartigen Bezeichnern
> auch. Von wegen 'sprechend'.

Naja, wer so etwas schreibt:
1
void ScanRomForApps (void)
2
{ int    i;
3
  PAPP*  P;
4
5
  i = 0;
6
  P = (PAPP*) 0x80010000;           /* die ersten 64 K erstmal für BettyBase */
7
8
  while (((dword)P < 0x82010000) && (i < appmaxnum))
9
  { Appliste[i] = 0;
10
    if ((P->Signatur1 == AppSignatur1) &&
11
        (P->Signatur2 == AppSignatur2))
12
    { if (P == P->Alloc)
13
      { Appliste[i] = P;
14
        ++i;
15
      }
16
    }
17
    P = P + 0x8000;         /* die nächsten 32 K */
18
    if (((dword)P > 0x800FFFFF) &&
19
        ((dword)P < 0x82000000)) P = (PAPP*) 0x82000000;
20
  }
21
  AppAnzahl = i;
22
}

sollte sich mit Belehrungsversuchen beim Codingstil lieber inh_ä_rent 
zurückhalten.

von Carsten P. (r2pi)


Lesenswert?

A. S. schrieb:
>>> if (  a <  1 && b <  1  && c >  0  ) value = a + b;   else {
> Sorry, aber die {} sind in dem Beispiel schon ziemlich ungewöhnlich.
Richtig, weil ich sie quasi "aus der Sicht" haben will. Weil sie von der 
eigentlichen Information, nämlich dem kruden Verknüpfen von Bedingungen, 
ablenken. Das ist ja mein (persönliches) Credo, ich will nicht, dass die 
Programmiersprache von Inhalt ablenkt. Wir schreiben keine Gedichte, wir 
lösen Probleme von Kunden.

> Tabellarisch ja. Aber wenn, dann "else if" ohne. Und eher (wie Misra &
> Co verlangen) um die value-Ausdrücke.
>
> Leerzeichen um eng bindende Operatoren bei mehreren Ebenen ohne Klammer
> sind auch nicht mein Fall, aber verm. Geschmacksache.
>
1
> if      (a <1 && b <1 && c >0) value = a+b;
2
> else if (a==1         && c==0) value = 2;
3
> else if (        b >0 && c==1) value = 3*b;
4
> else                           value = 4711;
5
>

Damit könnte ich auch gut leben, außer mit den fehlenden Leerzeichen 
nach nach/vor den runden Klammern, die sind mir zu nah am eigentlichen 
Inhalt und irritieren mich beim Lesen.

Je länger ich deine Lösung anschaue, desto besser gefällt mir, dass das 
else vorne steht. Was mir gar nicht gefällt, ist das unrhythmische if 
else if else if else. Neuer Vorschlag:
1
if  (  a  < 1 && b  < 1 && c  < 0  ) value = a + b;
2
else
3
if  (  a == 1 &&           c == 0  ) value = 2;
4
else
5
if  (            b  > 0 && c == 1  ) value = 3 * b;
6
else
7
/* none of the above match */        value = 4711;

Die Leerzeichen um die Operatoren sind Standard in C#, und sie isolieren 
in meinen Augen die Variablen. Du kennst aus altem K&R-"C"-Code sicher 
noch y=b>>--a==1?c++:d-a (fröhliches Operator-Rangfolge- und 
Nebeneffekte-Raten ^^).

... mal ganz abgesehen davon, dass Variablen außer bei Lambdas und in 
Interatoren und Indexern niemals a, b, c heißen und diese ganze 
Konstruktion ein einziger "code smell" ist 8-O =D. Aber immerhin ist es 
in allen drei (deinen und meinen) Versionen lesbarer, als wenn man 
irgendwie versucht hätte, value aus a, b und c algebraisch zu berechnen. 
Und sowas manchmal eben doch (gerade im Embedded) nicht zu vermeiden 
ist, ohne den Code in seiner Semantik komplett zu zerreißen.

Aber dann bitte ganz tief in ner "EvaluateValue()"-Methode (oder so) 
verstecken. Wenn ich sowas in nem öffentlichen Konstruktor sehe, krieg 
ich Puls; und wenn es da keine 100%-ige test coverage gibt, ist das 
eigentlich schon n Grund für ne Abmahnung ^^

: Bearbeitet durch User
von Mombert H. (mh_mh)


Lesenswert?

Nur_ein_Typ schrieb:
> Naja, wer so etwas schreibt:
> [...]
> sollte sich mit Belehrungsversuchen beim Codingstil lieber inh_ä_rent
> zurückhalten.
Von dem UB reden wir lieber nicht ;-).

Carsten P. schrieb:
> [...]
Wenn ich sowas sehe, versuchen meine Finger automatisch clang-format 
aufzurufen, um etwas reguläres und konsistentes zu erhalten.

von Carsten P. (r2pi)


Lesenswert?

Mombert H. schrieb:
> Wenn ich sowas sehe, versuchen meine Finger automatisch clang-format
> aufzurufen, um etwas reguläres und konsistentes zu erhalten.
Kannst du gerne machen.

von Stephan Roth (Gast)


Lesenswert?

Hallo Yalu,

hast Du mein Buch schon gelesen? Ich würde mich sehr über ein ehrliches 
und konstruktives Feedback freuen.

Lieben Dank,
Stephan

von Jobst Q. (joquis)


Lesenswert?

kleiner Admin schrieb:
> Ich würde es so machen:
> if (a == 1) {
>    while(b > 1000) { i++; b = b - 3;}
>    next;
>    }
> next;

Mein Stil ist so ähnlich. Die öffnende Klammer gehört zur Bedingung, die 
schließende zum Block. Der Wechsel der Einrückungstiefe korrespondiert 
immer mit der Klammer als letztem Zeichen der vorherigen Zeile. Kompakt 
und übersichtlich.

Nur finde ich, dass zwei Leerzeichen zum Einrücken ausreichen.

: Bearbeitet durch User
von kleiner Admin (Gast)


Lesenswert?

Meistens nehme ich auch nur zwei. ;-) Jedenfalls bei C, bei Pascal waren 
es immer drei.

Bei den logischen Ausdrücken setze ich immer lieber mehr Klammern als zu 
wenige, denn es gibt Compiler, die das sonst nicht auflösen können. Und 
für das Kompilat macht es keinen Unterschied.

if ((a > b) && ((c == d) || (e != f)))

von A. S. (Gast)


Lesenswert?

kleiner Admin schrieb:
> denn es gibt Compiler, die das sonst nicht auflösen können.

Das Problem hast Du in C zum Glück nicht. Da gibt es Regeln, keine 
Meinungen.

von Nano (Gast)


Lesenswert?

Dieter H. schrieb:
> und mit tab einrückungen. Wer drückt da 4x Leerzeichen? Da muss man
> schon ordentlich gestört sein

Deswegen nimmt man ja auch nur 2 Leerzeichen, so haben wir das im 
Studium gelernt.

Tabs sind schlechter Programmierstil, auch das haben wir so im Studium 
gelernt.
Wer also doch Tabs verwenden sollte um sich die Tipparbeit zu ersparen, 
der sollte seinen Editor so einstellen, dass Tabs durch Leerzeichen 
ersetzt werden. Als Gruppenarbeit ist das schon zwingend.

Ein absolutes NoGo sind Tabs zwischen den anderen Zeichen. Das zerreißt 
komplett die Formatierung, wenn man das Dokument mal mit einem Editor 
oder einer IDE öffnet, in der die TAB Breite anders eingestellt ist.
Das sollte man daher auf keinen Fall machen und wenn, dann sollte der 
Editor das, wie schon gesagt, in Leerzeichen umwandeln.
Die Tabs am Zeilenanfang sind nicht all so kritisch, wenn sie überall am 
Zeilenanfang verwendet werden. Schlechter Programmierstil sind sie aber 
dennoch.

Deswegen haben in Code Tabs nichts zu suchen. Das ist die wichtigste 
Regel von allen.
Wer es doch macht, hat einen schlechten Programmierstil.

Editoren bzw. IDEs mit automatischer Einrückung sparen einem zudem die 
Tipparbeit. Daher ist das kein Argument keine Leerzeichen nutzen zu 
wollen.

Wer nur 2 Leerzeichen benutzt kommt mit jedem Editor gut klar und muss 
auch nicht viel tippen.
Die 2 Leerzeichen = guter Programmierstil stammen natürlich auch aus 
einer Zeit, als die Zeichen noch auf 80 Zeichen pro Zeile in den 
normalen Textmodi begrenzt war.

von MaWin (Gast)


Lesenswert?

Nano schrieb:
> Tabs sind schlechter Programmierstil, auch das haben wir so im Studium
> gelernt.

Dann muss es wohl stimmen.

von Nano (Gast)


Lesenswert?

MaWin schrieb:
> Nano schrieb:
>> Tabs sind schlechter Programmierstil, auch das haben wir so im Studium
>> gelernt.
>
> Dann muss es wohl stimmen.

Eben. So ist es. Also, nutzt keine Tabs.

von 123 (Gast)


Lesenswert?

Nano schrieb:
> Deswegen nimmt man ja auch nur 2 Leerzeichen, so haben wir das im
> Studium gelernt.

Genauso wie mehr als 80 Zeichen pro Zeile grundsätzlich ein no-go sind 
und 1TBS/OTBS der einzig gute Stil ist.

> Editoren bzw. IDEs mit automatischer Einrückung sparen einem zudem die
> Tipparbeit.

IDEs sind aufwändig und nur für wirklich grooooooße Projekte geeignet. 
Für alles Andere gibt es Texteditoren!

Der Prof. bringt dir nicht alles bei und manche Dinge, wie Einrück- und 
Klammerstile sind zum Teil individuelle Präferenz oder vmtl. didaktisch 
besser geeignet.
Schau mal hier: https://en.wikipedia.org/wiki/Indentation_style


Im Zweifelsfall hilft zB.clang-format.

von Ein T. (ein_typ)


Lesenswert?

Norbert schrieb:
> Ach ja, weil's gerade so schön passt ein kleiner Seitenhieb in Richtung
> Anti-Python-Taliban.

;-)

> Bei Python gibt's solche Probleme kaum. Vermutlich
> weil eh alle mit PyCharm arbeiten.

PyCharm sehe ich sehr, sehr selten. Früher meistens IPython oder 
neuerdings Jupyter bzw. Jupyter Lab und bei den "richtigen Editoren und 
IDEs" Atom, Sublime, VSCode, vi(m) und Emacs sehe ich hingegen oft -- 
jedenfalls im professionellen Umfeld.

von Ein T. (ein_typ)


Lesenswert?

Gerald K. schrieb:
> Wühlhase schrieb:
>> Ansonsten lobe ich mir automatische Stilanpassung...ein gemeinsamer
>> einheitlicher Codestil muß und sollte heute nicht mehr sein, finde ich.
>
> So kann man leicht feststellen wer der Author des Programmes war.

{cvs, svn, git} annotate?

von Ein T. (ein_typ)


Lesenswert?

Carsten P. schrieb:
> Python-Fans werden mir sogleich vehement widersprechen ^^

Warum sollten wir?
1
if   a <  1 and b <  1 and c >  0: value = a + b
2
elif a == 1            and c == 0: value = 2
3
elif            b >  0 and c == 1: value = 3 * b
4
else                             : value = 4711

PS: ja, wir können auch Klammern und Semikola.

von Ein T. (ein_typ)


Lesenswert?

123 schrieb:
> IDEs sind aufwändig und nur für wirklich grooooooße Projekte geeignet.
> Für alles Andere gibt es Texteditoren!

Vorsicht, sowas sagt man nicht! Die IDE-Fans zerreißen Dich in der Luft!

von Nano (Gast)


Lesenswert?

123 schrieb:
> Nano schrieb:
>> Deswegen nimmt man ja auch nur 2 Leerzeichen, so haben wir das im
>> Studium gelernt.
>
> Genauso wie mehr als 80 Zeichen pro Zeile grundsätzlich ein no-go sind
> und 1TBS/OTBS der einzig gute Stil ist.

So, aber mit nur 2 Leerzeichen als Einrückung ist es richtig und den 
benutze ich auch und allein der Name sagt es ja auch schon:
https://en.wikipedia.org/wiki/Indentation_style#Variant:_1TBS_(OTBS)

Wobei man sagen muss, dass die Einrückungstiefe vom Einrückungsstil erst 
einmal unabhängig ist, deswegen werden da in der WP 4 Leerzeichen 
benutzt um den Stil zu zeigen.

123 schrieb:
> Nano schrieb:
>> Editoren bzw. IDEs mit automatischer Einrückung sparen einem zudem die
>> Tipparbeit.
>
> IDEs sind aufwändig und nur für wirklich grooooooße Projekte geeignet.
> Für alles Andere gibt es Texteditoren!

Ich habe doch Editoren geschrieben.
Das "bzw." ist hier im Kontext als logisches "oder" zu verstehen.

> Der Prof. bringt dir nicht alles bei und manche Dinge, wie Einrück- und
> Klammerstile sind zum Teil individuelle Präferenz oder vmtl. didaktisch
> besser geeignet.

Ich weiß, es ging hier jetzt aber um die Einrücktiefe von 2 Leerzeichen 
und die nicht Verwendung von Tabs.


> Schau mal hier: https://en.wikipedia.org/wiki/Indentation_style

Kenne ich.

> Im Zweifelsfall hilft zB.clang-format.

Kenne ich auch.
Gute IDEs bieten das von Haus aus.

von 123 (Gast)


Lesenswert?

Ein T. schrieb:
> 123 schrieb:
>> IDEs sind aufwändig und nur für wirklich grooooooße Projekte geeignet.
>> Für alles Andere gibt es Texteditoren!
>
> Vorsicht, sowas sagt man nicht! Die IDE-Fans zerreißen Dich in der Luft!

Ich weiß, das habe auch nicht ich gesagt, sondern mein damaliger Prof 
vor ein paar Jahren. Ich war damals schon lange ein IDE-Fan und 
entsprechend entsetzt.

von Ein T. (ein_typ)


Lesenswert?

123 schrieb:
> Ich weiß, das habe auch nicht ich gesagt, sondern mein damaliger Prof
> vor ein paar Jahren. Ich war damals schon lange ein IDE-Fan und
> entsprechend entsetzt.

Kluger Prof! ;-)

von W.S. (Gast)


Lesenswert?

123 schrieb:
> Ich weiß, das habe auch nicht ich gesagt,

Nun, eine integrierte Entwicklungsumgebung kann die Arbeit 
erleichtern, aber das muß nicht in allen Fällen stimmen. Oft genug 
verheddern sich Leute darin und kommen nicht zu Potte.

Obendrein neigen viele Leute dazu, die IDE für die Toolchain zu halten 
und nicht mehr zu wissen, wie man die eigentlichen Tools aufruft und 
benutzt. Abgesehen davon ist ganz oft eine Abhängigkeit von Projekten zu 
genau DER IDE, womit sie entstanden, zu sehen.

Eigentlich gilt auch für sowas der altbekannte Spruch, daß gut gemeintes 
sich als dessen Gegenteil erweist. Wer nur Vorgekautes schluckt, hat 
oftmals vergessen, wie man selber kaut.

W.S.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.