über mich Startseite Links Programmieren - CodeOptimierung - CodeConventionen - GFA-Basic Atari Hardware- Basteleien Witze Zitate Sprüche Braille Kunst Buch-Tip historisches Impressum |
Code-Konventionen / Codierungs-StilÜbersichtVorwort [^]Wie vermutlich jeder Programmierer, habe ich mir im Laufe der Zeit meine Vorlieben für eine gewisse die Quellcode-Formatierung, Namensbildung etc. angeeignet.
Für ein universitäres Projekt habe ich zu diesem Thema recherchiert und
meine Vorlieben mit den Meinungen anderer verglichen und nach Gründen
für die einzelnen Konventionen gesucht. Im folgenden finden Sie meine aus dieser Recherche entstandenen Code-Konventionen. Wo möglich, habe ich Argumente für meine Entscheidungen angegeben, um auch Sie von selbigen zu überzeugen. Auch wenn Die Formulierung der meisten Regeln sich auf Java-Quellcode bezieht, ist fast alles auf die meisten anderen Programmiersprachen übertragbar. Oberste Regel: [^]Wenn es der Lesbarkeit / dem Verständnis dient, dürfen alle Regeln ignoriert werden. Die Anwendung dieser Regel sollte aber stets die Ausnahme sein! Wozu? [^]
Aufbau einer '.java'-Datei [^]Jegliche Regelung, wie eine Quellcode-Datei aufgebaut sein soll, hilft es sich in fremden Quellcode schneller zurechtzufinden. Die 'public'-Klasse / das 'public'-Interface soll immer die oberste Klasse/Interface in der Datei sein. Schematische Aufbau
Ich selber sehe das Zusammenziehen aller Variablen-Deklarationen am Anfang der Klasse nicht so eng. Gerade 'static final'-Konstanten, die nur in einer Methode zum Einsatz kommen deklariere ich gerne direkt vor selbiger anstatt am Anfang der Klasse. Manche Programmierer legen die Reihenfolge bezüglich ihrer Sichtbarkeit fest. Ich halte aber nichts davon, da ich Methoden, die Inhaltlich zusammen gehören lieber auch im Quellcode beieinander habe, egal wie ihre Sichtbarkeit ist. Position von Klammern [^]Ich vertrete die Meinung, das die Regel: Daraus ergibt sich das folgende nicht so weit verbreitete Aussehen:
Einrückungen [^]Ich rücke immer 2 Leerzeichen ein. Warum Leerzeichen?
Grund:
Grund: Zeilenlänge [^]80 Zeichen pro Zeile sollte nur in Ausnahmen überschritten werden.
Grund: Zeilen sollte ohne Scrollen im Editor, wenn möglich, ganz sichtbar sein. Weil früher auf Terminals nur 80-Zeichen pro Zeile dargestellt wurden, heute sind es bei nicht zu kleiner Font-Wahl meist auch nicht viel mehr, ist diese Schranke noch immer aktuell. Zeilenumbrüche [^]Nach einem Zeilenumbruch sollte immer die Einrückung beibehalten werden. Wenn es die Lesbarkeit verbessert, kann aber auch mehr eingerückt werden! Kommentare [^]Wo nötig sollte der Code kommentiert werden. Wenn man das Gefühl hat, daß man zum Verständnis viele Kommentare braucht, ist das ein Hinweis auf schlechten Code! (SUN) Zwar ist kein Code so klar, daß auf Kommentare ganz verzichtet werden kann, doch sollte der Code so leicht verständlich, wie möglich sein. Befor man einen Kommentar schreibt sollte man nachdenken, ob man nicht stattdessen den Code klarer verständlich schreiben kann. Alle Dinge, die nicht direkt aus dem Code hervorgehen, sollten kommentiert werden. Zudem die übergeordnete Idee, die zu dieser Implementierung geführt hat. In den
Um die Struktur des Codes leicht ersichtlich zu lassen, sollte man Kommentare genauso weit, wie den Code einrücken Kommentare am Zeilenende sollten nur gemacht werden, wenn sie kurz sind (sollten die 80 Zeichen-Regel nicht verletzen) und sollten deutlich von Code getrennt sein, um die Lesbarkeit zu erleichtern Deklarationen [^]Pro Zeile sollten in der Regel nur eine Deklaration stehen. Ausnahme stellen Variablen dar, die Inhaltlich zusammengehören Grund: Nie sollten Arrays und 'Nicht-Arrays' in einer Zeile deklariert werden. Grund: Positionierung der Deklaration in Methoden [^]Variablen sollten erst unmittelbar vor der Nutzung deklariert werden nicht etwa schon am Anfang der Methode. Grund:
Initialisierung [^]Wenn möglich gleich bei der Deklaration Grund:
Leerzeichen [^]keine Leerzeichen vor runden Klammern bei Methoden, und Kontrollstrukturen
(
Grund: '
|
korrekter Fall | Fehlerfall Endlosschleife |
---|---|
|
|
Der rechte Fall ist ein Block gefolgt von einer leeren
while
-Schleife.
Dieser Fehler hat mich stundenlange Fehlersuche gekostet.
Nur einen Ausdruck pro Zeile!
OK | NICHT |
---|---|
|
|
Grund:
Lesbarkeit.
for, while, do..while, if, else
.
Auch einzelne Ausdrücke in einen {}-Block packen
(Aus rein optischen Gründen verstoße ich selbst regelmäßig gegen diese Regel)
Grund:
falsch eingerückter Code | eigentlich gemeint | mit allen {} |
---|---|---|
|
|
|
switch
-Anweisung [^]0. Vermeiden sie 'fall-through'
1. kommentieren sie absichtliches 'fall-through'
|
Grund:
Oft wird versehentlich die 'break'-Anweisung vergessen. Um deutlich zu machen,
daß es sich um Absicht handelt, sollte man das dokumentieren.
(z.B. der jikes-Compiler warnt auch wenn
'fall-through's im Code vorkommen!)
Leerzeilen verbessern die Lesbarkeit des Code, wenn sie logische Abschnitte trennen.
Ich empfehle zumindest eine Leerzeile zwischen Methoden
Immer nach ',' und nie bei den einstelligen Operatoren '-', '--', '++'
Grund:
Ich finde das verbessert die Lesbarkeit.
Ich nenne die fast immer verwendeten Regeln für die Schreibweisen.
TAGE_PRO_JAHR
Grund:
Diese Regeln sind unter den meisten Programmierern verbreitet und sorgen
daher bei Einhaltung zu leichterer Lesbarkeit.
public
'-Variablen [^]Variablen sollten nur public
sein, wenn es sich um reine
Datenstrukturen, ohne Funktionalität, handelt. Viele fordern sogar
ganz auf 'public
'-Variablen zu verzichten und immer
über get- / set-
Methoden zuzugreifen.
Grund:
'public
'-Variablen geben einen direkten Blick auf die
Implementierung frei, deshalb widerspricht das schon ideell gegen
die objektorientierte Sicht.
Wenn es 'public
'-Variablen gibt, kann dieser Teil der
Implementierung später nie mehr geändert werden!
Greifen Sie nie über Instanzen einer Klasse auf deren statische Methoden zu. Greifen Sie immer über den Klassennamen zu.
Grund:
Bis ich das einmal gesehen harte, wußte ich gar nicht, daß man so etwas
unschönes machen kann.
Wenn man über den Klassennamen die statischen Methoden zugreift ist es unmöglich diese ausversehen für Instanzmethoden zu halten.
Vermeiden Sie konkrete Werte im Code zu verwenden. Benennen Sie lieber
sprechende Konstanten, die Sie dann im Code verwenden. Vor allem vor
'Magic-Numbers' sei gewarnt. Sie erschweren die Lesbarkeit und
machen spätere Änderungen unnötig schwer.
(z.B. -1 steht für ungültiger Parameter, -2 für alles OK ...)
Grund:
Wie oben schon beschrieben ist die Lesbarkeit und Wartbarkeit deutlich
verbessert, wenn man sprechende Konstantennamen einsetzt.
?:
-Operator [^]Schreiben Sie die Bedingung in Klammern!
Grund:
Das erhöht die Lesbarkeit erheblich
Schreiben Sie lieber mehr als weniger Klammern!
Grund:
Nicht jeder kennt die Vorrangregeln aller Operatoren auswendig. Da ist der
Leser dankbar über jede Klammer, die das Lesen erleichtert.
Vereinbaren Sie in Projekten spezielle Kommentare wie:
//FIXME
//TO BE IMPLEMENTED
//DEBUG
//INFO
//???
//!!!
Grund:
Einheitlich markierte Stellen kann jeder schnell finden.
final
'-Variablen [^]Variablen sollten wann immer möglich als final
deklariert
werden. Vor allem Methodenparameter.
Grund:
Methoden/Funktionen, die sehr lang sind (mehr als 100 Zeilen (Kommentare nicht mitgerechnet)) sind meist ein Hinweis darauf, daß Ihre Funktionalität, aus Übersichtlichkeitsgründen, lieber auf mehrerer aufgeteilt werden sollte.
Das selbe gilt für Klassen (2000 Zeilen hielt SUN hier für eine magische Grenze).
Verwendete Abkürzungen/Namen: [^] | |
IDE: | Entwicklungsumgebung, wie z.B. Eclipse, JBuilder |
VM : | 'Virtual Maschine' : z.B. die java Virtuelle Maschine |
jikes: | Ein java-Compiler (empfohlen, da viel schneller als javac und oft hilfreichere Fehlermeldungen) |
Lage dieser Seite: | "http://www.rinneberg.de/programming/codeconventions.htm" |
"http://www.Folke-Rinneberg.de/programming/codeconventions.htm" |
Link zu dieser Seite: |
Sie haben eine Internetseite und finden meine Seite gut?
Dann wäre es nett, wenn Sie einen Link zu meiner hinzufügen. Haben Sie eine Seite zum gleichen Thema? Schicken Sie mir eine E-Mail mit der URL (Betreff: 'HOMEPAGE: Link (hier Ihre URL einfügen)'). Vielleicht setze ich einen Link. |
Benachrichtigung über Änderungen dieser Seite: |
Wollen sie informiert werden, wenn sich der Inhalt dieser Seite
ändert? Schicken Sie mir eine E-Mail mit dem Betreff:
'HOMEPAGE: informiere mich (www.rinneberg.de/programming/codeconventions.htm)'. |
about myself Home links programming - CodeOptimisation - CodeConventions - GFA-basic Atari hardware- modifications jokes quotations patter braille art book-tip history imprint |
Code-Conventions / Coding-StyleContentpreface [^]I think, like every other programmer, I made my mind about how source-code should look like. This page lists my preferred rules to write well readable source code.
For one software-project in the university I searched for code conventions
of other programmers and what reasons exists for them, because we had to
decide which conventions we should use in our project. On the rest of this page you will find my code conventions and, wherever possible, reasons for them. The rules mainly refer to java-code but can be quite easily transferred to nearly all other programming languages. the top rule: [^]If it increases readability / easy understanding you may ignore all rules! You should use this rule only as an exception. why do we need code-conventions? [^]
structure of a '.java'-File [^]Whatever convention you use how your source code files are structured will help new authors to find things faster in your code. The 'public'-class / the 'public'-interface should always be the topmost class / interface in a file. schematic structure
I myself think it is most times useful, but not always to group all variable declarations at the top of the class declaration. Especially 'static final'-constants, which are used in only one method may be declared directly before this method instead of the top of the class. Some programmers use conventions in which order the methods should be declared (p.e. in order of visibility). I think this is nearly never a help for easier reading the code. The order should depend of the functionality. If a private method is only used my one public one I think it is useful to group both methods near to each other. position of brackets [^]My opinion is that the rule: The result of this rule is the following not widely used appearance:
indent [^]I use two spaces to indent blocks. why space characters?
Reason:
Reason: line length [^]You should not write more than 80 characters in one line.
Reason: If possible the hole line should be displayed in your editor without the need of horizontal scrolling. Some time ago, terminals could only display 80 characters per line, and nowadays it is mostly not a lot more (if you did not use a very tiny font). Therefore the 80 characters rule is still valid. line breaks [^]After each line break the indent should still be the same. If it increases readability, you may increase the indent (p.e. if you cut a line in more lines because it would be too long it is sometimes better to make extra indent). comments [^]Wherever needed, you should comment your code. If you think a comment is needed to understand your code, it may be a hint that your code is bad! (SUN) It is true that no program code can live totally without comments, but code should be as easy readable even without extra comments as possible. Before you add a comment to your code, think if an other implementation would be clearer and would therefore not need this comment. Code which needs less comments is always to be preferred. Everything which could not be understand directly by reading the code must be documented in comments. Especially the main idea of an implemented algorithm or the implemented idea must be documented for easy understanding by readers which are not the author of the code. In
If you indent your comments as much as the code around them, the structure of the code can easier be recognised than if you need other or no indent for your comments. Comments attached to the end of a line should be only used if they are very short and did not violate the 80 characters per line rule to have best possible readability. declarations [^]In each line should be only one declaration. Exceptions are variables with a common content like p.e. Reason: Never declare arrays and 'non-arrays' in the same line. Reason: position of declarations in methods [^]Variables should be declared directly before the use not all at the beginning of a method. Reason:
initialising [^]If possible, initialise the variables directly when you declare them. Reason:
spaces [^]no spaces before round brackets of methods, and constructors
(
Reason: '
|
The correct code | the error infinite loop |
---|---|
|
|
The right case the code represents a code block followed by an empty
while
-loop.
I once needed hours of debugging to find an error of this kind.
Only one expression per line!
OK | NOT |
---|---|
|
|
Reason:
Readability.
for, while, do..while, if, else
.
Even if there is only one expression, put it in a {}-block
(I myself ignore this rule quite often because the look is often better, if you
did not use the brackets)
Reason:
if-else
-error:
code with wrong indent | this was meant by the programmer | code with all {}-blocks |
---|---|---|
|
|
|
switch
-operator [^]0. Do avoid 'fall-through'
1. comment if you made a 'fall-through' with intention
|
Reason:
Quite often the 'break' is missing my mistake. To make clear that
the missing 'break' intended by the programmer he should
comment this.
(p.e. the jikes-compiler warns if a code
consists 'fall-through's!)
Free lines increase the readability of code, if they are used to make the logical structure clearer.
I recommend to use free lines at least between methods.
Every time after ',' and never before unary operators '-', '--', '++'
Reason:
My opinion is that this increases the readability.
Here I only mention the conventions used by nearly all java-programmers.
DAYS_PER_YEAR
Reason:
This conventions are extremely widely used out there and nearly any programmer
knows them and expects them to be used by others, too.
Therefore every violation of this conventions lead to worse readability.
public
'-variables [^]variables should only be public
, if the class is only a data
structure with no methods. Quite a lot of programmers say you should totally
avoid 'public
'-variables and always use
get- / set-
methods to access variables.
Reason:
'public
'-variables let you see a part of the implementation, which
violates the object orientated idea of hiding the implementation.
If you use 'public
'-variables, this part of the implementation
can never be changed!
Do never access static methods by using instances of the class. Use always the classname to access static methods.
Reason:
Until I once saw this ugly way to access static methods, I did not even
know that it is possible this way.
If you use the classname to access static methods, the reader can not accidentally think a static method is instance method.
Avoid to use concrete values in your code. Better make constants with good
names and use them within the code.
Especially 'magic-numbers' should be avoided. They decrease readability
and make changes in the future more difficult.
(p.e. -1 stands for 'prong parameter-value', -2 stands for 'everything is OK' ...)
Reason:
Readability an later changes are much more easy, if you use constants with good
names.
?:
-operator [^]Always put the condition in brackets!
Reason:
This increases readability a lot.
More brackets are better than few!
Reason:
Not everyone knows the binding power of all operators. Therefore
the readability increases if you put brackets at not so clear positions.
Make an agreement about special comments to be used in your project like p.e.:
//FIXME
//TO BE IMPLEMENTED
//DEBUG
//INFO
//???
//!!!
Reason:
If all authors of a project use the same comments, everyone can easily
find this positions.
final
'-variables [^]Variables should be declared as final
whenever possible.
Especially the parameters of methods.
Reason:
final
.methods/functions, which need a lot lines of code (more than 100 (comment lines not counted)) are most times a hint that the functionality may be split in more methods to make the code easier to understand.
The same is true for classes (2000 lines are meant to be a magic boarder not to cross (SUN)).
names and abbreviations: [^] | |
IDE: | Development environment, like p.e. Eclipse, JBuilder |
VM : | 'virtual machine' : p.e. the java virtual machine |
jikes: | a java-Compiler (better use this one than the javac, because it is a lot faster than javac and often mention more helpful error messages and warnings) |
Location of this page: | "http://www.rinneberg.de/programming/codeconventions.htm" |
"http://www.Folke-Rinneberg.de/programming/codeconventions.htm" |
Link this web site: |
You have your own web site and like mine?
It would be nice to add a link to mine. If you have similar content on your web page, write me an e-mail with the URL (subject: 'HOMEPAGE: link (insert your URL here)'). I possibly add a link to it on this site. |
Be informed of content changes: |
You want to be informed, if the content of this page
has changed? Then write me an e-mail with the subject:
'HOMEPAGE: remind me (www.rinneberg.de/programming/codeconventions.htm)' |
Help to improve this web page: |
Because I am no native English speaker, it is likely that there can be made a lot of improvements to my translation. I am very interested in every proposal how to improve the English part of this web page. |