]> wagnertech.de Git - mfinanz.git/blob - doc/programmierstilrichtlinien.txt
Merge von 568 aus unstable.
[mfinanz.git] / doc / programmierstilrichtlinien.txt
1 Lx-Office Style Guide
2 ---------------------
3
4 Die folgenden Regeln haben das Ziel, den Code möglichst gut les- und wartbar
5 zu machen. Dazu gehört zum Einen, dass der Code einheitlich eingerückt ist,
6 aber auch, dass Mehrdeutigkeit so weit es geht vermieden wird (Stichworte
7 "Klammern" oder "Hash-Keys").
8
9 Diese Regeln sind keine Schikane, sondern erleichtern allen das Leben!
10
11 Zum einfachen Formartieren von Perl-Scripten gibt es das Tool "perltidy",
12 das man weitgehend konfigurieren kann. Bei fast allen nachfolgenden Punkten
13 sind die dazugehörigen perltidy-Optionen angegeben. perltidy ist bei den
14 meisten Linux-Distributionen enthalten und kann ansonten unter
15 http://perltidy.sourceforge.net heruntergeladen werden.
16
17 Jeder, der einen Patch schickt, sollte sein Script vorher durch
18 perltidy laufen lassen -- und seine Veränderung danach noch einmal
19 kurz testen! Damit werden einige der nachfolgenden Regeln automatisch
20 befolgt, andere hingegen nicht. Dort, wo keine perltidy-Optionen
21 angegeben sind, muss der Programmierer selbst für die Einhaltung
22 sorgen.
23
24 (A) "Inhalt"
25 ============
26
27 1. Alle Variablen müssen in dem Block, in dem sie benutzt werden mit
28    "my $variable;" oder mit "local *FILEHANDLE;" deklariert werden.
29    Neue globale Variablen einzuführen ist nicht erlaubt!
30
31 2. Variablennamen
32
33   2.1 Alle Variablennamen müssen sinnvoll sein. "$i" als Schleifenzähler zu
34       nehmen ist in Ordnung. Sobald es aber über einen trivialen Fall
35       hinausgeht ist der Variable ein Name zu geben, der den Inhalt wieder-
36       spiegelt. Beispielsweise "$rowcount" für die Anzahl der Zeilen/
37       Positionen in einer Rechnung oder "$net_price" für den Nettopreis.
38
39   2.2 Variablen, die einfach den Inhalt einer Datenbankspalte beeinhalten,
40       sollten so benannt werden, wie die Datenbankspalte ebenfalls heißt.
41
42   2.3 Variablennamen sollten in Englisch gehalten sein, weil der Rest
43       des Programms ebenfalls in Englisch gehalten ist. Für Begriffe,
44       für die es keine englischen Entsprechungen gibt, sind deutsche
45       Variablennamen in Ordnung.
46
47 3. Die Schreibweise von Variablen sollte komplett klein ein. Zusammengesetzte
48    Namen sollten mit Unterstrichen getrennt werden. Beispiel: "$net_price".
49
50 4. Kommentare
51
52   4.1 Kommentare beziehen sich immer auf Code in der gleichen Zeile, wenn
53       der Kommentar am rechten Rand steht, oder auf den nachfolgen Code.
54
55   4.2 Codeteile, deren Funktion nicht auf den ersten Blick ersichtlich ist,
56       sollten kommentiert werden. Der Kommentar sollte kurz beschreiben,
57       was der Codeteil macht, eventuelle Nebenwirkungen oder Probleme
58       auflisten.
59
60   4.3 Kommentare der Art, dass Benutzer X am Datum Y den Teil Z geändert
61       hat, sind nicht notwendig. Dafür gibt es die SVN-Commit-Nachrichten,
62       die all diese Informationen enthalten bzw. enthalten müssen.
63
64   4.4 Funktionen sollten kommentiert werden. Dazu wird vor der Funktion
65       ein Kommentarblock erstellt, der beschreibt, was diese Funktion
66       tut. Zusätzlich sollte aufgezählt werden, welche Parameter die
67       Funktion erwartet und welche Bedeutung diese haben. Der Rückgabewert
68       ist ebenfalls zu dokumentieren.
69
70 5. Alle Texte/Begriffe, die ausgegeben werden, müssen mit
71    $text->locale('Begriff'); ausgegeben werden, damit diese Begriffe
72    übersetzt werden können. Das betrifft aber nur Begriffe, die einzeln
73    übersetzbar sind, natürlich nicht für z.B. HTML-Code.
74
75 6. Änderungen in den Kernbestandteilen von Lx-Office, die nur der Anbindung
76    von Modulen dienen, die wiederum nicht Bestandteil der offiziellen
77    Distribution sind, müssen durch eine Konfigurationsvariable abschaltbar
78    sein. Damit soll verhindert werden, dass solcher Code ausgeführt wird,
79    wenn das Modul nicht installiert ist, da dieser Code ausschließlich von
80    den Programmierern dieses Moduls getestet werden kann.
81
82
83
84
85
86 (B) "Optik" -- Sachen, die die Form betreffen
87 =============================================
88
89 1. Es werden keine "echten" TAB-Zeichen sondern Leerzeichen verwendet.
90    Perltidy: -nt
91
92 2. Die Einrückung beträgt zwei Leerzeichen.
93    Perltidy: -i=2
94    Beispiel:
95
96    sub debug {
97      print(STDERR "Debugging.\n");
98    }
99
100 3. Öffnende geschweifte Klammern befinden sich auf der gleichen Zeile wie
101    der letzte Befehl.
102    Perltidy: -nbl -nsbl -bar
103    Beispiele:
104
105    sub debug {
106    ...
107    }
108
109    oder
110
111    if ($form->{"path"} eq "bin/mozilla") {
112      ...
113    }
114
115 4. Schließende geschweifte Klammern sind so weit eingerückt wie der Befehl/
116    die öffnende schließende Klammer, die den Block gestartet hat, und nicht
117    auf der Ebene des Inhalts. Die gleichen Beispiele wie bei 3. gelten.
118    Perltidy: macht's automatisch
119
120 5. Die Wörter "else" "elsif", "while" befinden sich auf der gleichen
121    Zeile wie schließende geschweifte Klammern.
122    Perltidy: -ce
123    Beispiele:
124
125    if ($form->{"sum"} > 1000) {
126      ...
127    } elsif ($form->{"sum"} > 0) {
128      ...
129    } else {
130      ...
131    }
132
133    do {
134      ...
135    } while ($a > 0);
136
137 6. Parameter von Funktionsaufrufen müssen mit runden Klammern versehen
138    werden.
139
140    Achtung: perltidy kann dieses nicht erledigen. Der Programmierer muss
141    selber darauf achten!
142
143    Beispiel:
144
145    debug("Konnte Datei nicht oeffnen.\n");
146
147 7. Verschiedene Klammern
148
149   7.1 Aufeinander folgende runde Klammern sollten nicht durch Leerzeichen
150       abgesetzt werden.
151       Perltidy: -pt=2
152       Beispiel:
153
154       if (($form->{"debug"} == 1) && (($form->{"sum"} - 100) < 0)) {
155         ...
156       }
157
158   7.2 Nach und vor eckigen Klammern sollten keine Leerzeichen stehen.
159       Perltidy: -sbt=2
160       Beispiel:
161
162       $array[$i + 1] = 4;
163
164   7.3 Nach und vor geschweiften Klammern sollten keine Leerzeichen stehen,
165       es sei denn, sie sind verschachtelt.
166       Beispiel:
167
168       $form->{"sum"} += $form->{"row_${i}"};
169
170       $form->{ $form->{"index"} } += 1;
171
172   7.4 Nach und vor geschweiften Klammern, die Codeblöcke beschränken,
173       sollten Leerzeichen stehen, wenn sich der Codeblock über nur eine
174       Zeile erstreckt.
175       Perltidy: -bbt=0
176       Beispiel:
177
178       map({ $form->{"sum"} += $form->{"row_$_"}; } (1..$rowcount));
179       $form->{ $row + 1 } = 5;
180
181 8. Mehrzeilige Befehle
182
183   8.1 Werden die Parameter eines Funktionsaufrufes auf mehrere Zeilen
184       aufgeteilt, so müssen diese bis zu der Spalte eingerückt werden,
185       in der die ersten Funktionsparameter in der ersten Zeile stehen.
186       Perltidy: -lp -vt=1 -vtc=1
187       Beispiel:
188
189       $sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
190                            $form->{"some_col_value"});
191
192   8.2 Wird ein Befehl auf einer neuen Zeile forgesetzt, so ist ab der
193       zweiten Zeile zusätzlich zwei Leerzeichen einzurücken.
194       Perltidy: -ci=2
195       Beispiel:
196
197       my $rowcount =
198         $form->{"row_$i"} ? $i : $form->{"rowcount"} - $form->{"rowbase"};
199
200 9. Kommentare
201
202   9.1 Kommentare, die alleine in einer Zeile stehen, sollten soweit wie der
203       Code eingerückt sein.
204       Perltidy: -ibc
205
206   9.2 Seitliche hängende Kommentare sollten einheitlich formatiert werden.
207       Perltidy: -hsc
208
209 10. Hash-Keys sind, sofern es sich um Zeichenketten und nicht um
210     Nummern handelt, in Anführungszeichen zu setzen.
211
212     Achtung: perltidy kann dieses nicht erledigen. Der Programmierer muss
213     selber darauf achten!
214
215     Beispiele:
216
217     $form->{"sum"} = 0;
218     $form->{"row_$i"} = $form->{"row_$i"} - 5;
219     $some_hash{42} = 54;
220
221 11. Die Maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen <= 79
222     helfen, weil sie dann im Textmodus / per SSH deutlich besser lesbar
223     sind. Oft genug ist es aber nicht möglich oder nur unter großen
224     Verrenkungen, diese Vorgabe einzuhalten.
225
226     Zeilen sollten nicht länger als 79 Zeichen sein.
227     Perltidy: -l=79
228
229
230
231
232 (C) Liste der perltidy-Optionen
233 ===============================
234
235 Vollständige Liste aller Optionen, die ich für perltidy benutze. Diese
236 können in ~/.perltidyrc geschrieben werden:
237
238 -syn
239 -i=2
240 -nt
241 -pt=2
242 -sbt=2
243 -ci=2
244 -ibc
245 -hsc
246 -noll
247 -nsts
248 -nsfs
249 -asc
250 -dsm
251 -aws
252 -bbc
253 -bbs
254 -bbb
255 -mbl=1
256 -nsob
257 -ce
258 -nbl
259 -nsbl
260 -cti=0
261 -bbt=0
262 -bar
263 -l=79
264 -lp
265 -vt=1
266 -vtc=1
267
268
269
270