Projekt

Allgemein

Profil

Herunterladen (5,11 KB) Statistiken
| Zweig: | Markierung: | Revision:
d319704a Moritz Bunkus
Lx-Office Style Guide
---------------------

Die folgenden Regeln haben das Ziel, den Code m?glichst gut les- und wartbar
zu machen. Dazu geh?rt zum Einen, dass der Code einheitlich einger?ckt ist,
aber auch, dass Mehrdeutigkeit so weit es geht vermieden wird (Stichworte
"Klammern" oder "Hash-Keys").

Diese Regeln sind keine Schikane, sondern erleichtern allen das Leben!

Jeder, der einen Patch schickt, sollte sein Script vorher durch perltidy
laufen lassen. Damit werden einige der nachfolgenden Regeln automatisch
befolgt, andere hingegen nicht. Dort, wo keine perltidy-Optionen angegeben
sind, muss der Programmierer selbst f?r die Einhaltung sorgen.

--------------------------------------------------------------------------

1. Es werden keine "echten" TAB-Zeichen sondern Leerzeichen verwendet.

2. Die Einr?ckung betr?gt zwei Leerzeichen.
Beispiel:

sub debug {
print(STDERR "Debugging.\n");
}

3. ?ffnende geschweifte Klammern befinden sich auf der gleichen Zeile wie
der letzte Befehl.
Beispiele:

sub debug {
8cc37098 Sven Schöling
...
d319704a Moritz Bunkus
}

oder

d629acd8 Sven Schöling
if ($form->{item_rows} > 0) {
d319704a Moritz Bunkus
...
}

4. Schlie?ende geschweifte Klammern sind so weit einger?ckt wie der Befehl/
die ?ffnende schlie?ende Klammer, die den Block gestartet hat, und nicht
auf der Ebene des Inhalts. Die gleichen Beispiele wie bei 3. gelten.

5. Die W?rter "else" "elsif", "while" befinden sich auf der gleichen
Zeile wie schlie?ende geschweifte Klammern.
Beispiele:

8cc37098 Sven Schöling
if ($form->{sum} > 1000) {
d319704a Moritz Bunkus
...
8cc37098 Sven Schöling
} elsif ($form->{sum} > 0) {
d319704a Moritz Bunkus
...
} else {
...
}

do {
...
} while ($a > 0);

6. Parameter von Funktionsaufrufen m?ssen mit runden Klammern versehen
8cc37098 Sven Schöling
werden. Davon nicht betroffen sind interne perl Funktionen.
d319704a Moritz Bunkus
Beispiel:

8cc37098 Sven Schöling
$main::lxdebug->message("Could not find file.");
%options = map { $_ => 1 } grep { !/^#/ } @config_file;
d319704a Moritz Bunkus
8cc37098 Sven Schöling
7. Verschiedene Klammern, Ihre Ausdr?cke und Leerzeichen:
d319704a Moritz Bunkus
8cc37098 Sven Schöling
Generell gilt: Hashkeys und Arrayindices sollten _nicht_ durch Leerzeichen
abgesetzt werden. Logische Klammerungen ebensowenig, Bl?cke schon.
d319704a Moritz Bunkus

8cc37098 Sven Schöling
Beispiel:
d319704a Moritz Bunkus
8cc37098 Sven Schöling
if (($form->{debug} == 1) && ($form->{sum} - 100 < 0)) {
...
}
d319704a Moritz Bunkus
8cc37098 Sven Schöling
$array[$i + 1] = 4;
$form->{sum} += $form->{"row_$i"};
$form->{ $form->{index} } += 1;
d319704a Moritz Bunkus
8cc37098 Sven Schöling
map { $form->{sum} += $form->{"row_$_"} } 1..$rowcount;
d319704a Moritz Bunkus
8. Mehrzeilige Befehle

8.1 Werden die Parameter eines Funktionsaufrufes auf mehrere Zeilen
8cc37098 Sven Schöling
aufgeteilt, so sollten diese bis zu der Spalte einger?ckt werden,
d319704a Moritz Bunkus
in der die ersten Funktionsparameter in der ersten Zeile stehen.
Beispiel:

$sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
8cc37098 Sven Schöling
$form->{some_col_value});

8.3 Ein Spezialfall ist der tern?re Oprator "?:", der am besten in einer
?bersichtlichen Tabellenstruktur organisiert wird.
d319704a Moritz Bunkus
Beispiel:

8cc37098 Sven Schöling
my $rowcount = $form->{"row_$i"} ? $i
: $form->{oldcount} ? $form->{oldcount} + 1
: $form->{rowcount} - $form->{rowbase};
d319704a Moritz Bunkus
9. Kommentare

9.1 Kommentare, die alleine in einer Zeile stehen, sollten soweit wie der
Code einger?ckt sein.
9.2 Seitliche h?ngende Kommentare sollten einheitlich formatiert werden.

8cc37098 Sven Schöling
9.3 S?mtliche Kommentare und Sonstiges im Quellcode ist bitte auf Englisch
zu verfassen. So wie ich keine Lust habe franz?sischen Quelltext zu lesen,
sollte auch der Lx-Office Quelltext f?r nicht-Deutschsprachige lesbar sein.

Beispiel:

my $found = 0;
while (1) {
last if $found;
d319704a Moritz Bunkus
8cc37098 Sven Schöling
# complicated check
$found = 1 if //
}

$i = 0 # initialize $i
$n = $i; # save $i
$i *= $const; # do something crazy
$i = $n; # recover $i

10. Hashkeys sollten nur in Anf?hrungszeichen stehen, wenn die Interpolation
gew?nscht ist.
d319704a Moritz Bunkus
Beispiele:

8cc37098 Sven Schöling
$form->{sum} = 0;
d319704a Moritz Bunkus
$form->{"row_$i"} = $form->{"row_$i"} - 5;
8cc37098 Sven Schöling
$some_hash{42} = 54;
d319704a Moritz Bunkus
11. Die Maximale Zeilenl?nge ist nicht bescr?nkt. Zeilenl?ngen <= 79
8cc37098 Sven Schöling
helfen unter bestimmten Bedingungen, aber wenn die Lesbarkeit unter
kurzen Zeilen leidet (wie zum Biespiel in grossen Tabellen), dann
ist Lesbarkeit vorzuziehen.
d319704a Moritz Bunkus
8cc37098 Sven Schöling
Als Beispiel sei print_options aus bin/mozilla/io.pl angef?hrt.
d319704a Moritz Bunkus
8cc37098 Sven Schöling
12. Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind unerw?nscht.
Sie f?hren zu unn?tigen Whitespace?nderungen die diffs verf?lschen.

Emacs und vim haben beide recht einfach Methoden daf?r:
emacs kennt das Kommande nuke-trailing-whitespace,
vim macht das gleiche manuell ?ber :%s/\s\+$//e

12. Es wird kein perltidy verwendet.
d319704a Moritz Bunkus
8cc37098 Sven Schöling
In der Vergangenheit wurde versucht perltidy zu verwenden um einen
einheitlichen Stil zu erlangen, es hat sich aber gezeigt, dass Perltidys
sehr eigenwilliges Verhaltes was Zeilenumbr?che angeht oftmals gut
formatierten Code zerst?rt. F?r den Interessierten, hier sind die perltidy
Optionen die grob den beschriebenen Richtlinien entsprechen.
d319704a Moritz Bunkus
-syn
-i=2
-nt
-pt=2
-sbt=2
-ci=2
-ibc
-hsc
-noll
-nsts
-nsfs
-asc
-dsm
-aws
-bbc
-bbs
-bbb
-mbl=1
-nsob
-ce
-nbl
-nsbl
-cti=0
-bbt=0
-bar
-l=79
-lp
-vt=1
-vtc=1