Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 8cc37098

Von Sven Schöling vor mehr als 15 Jahren hinzugefügt

  • ID 8cc3709892637804488c66da41979fab60f7e604
  • Vorgänger 662a225c
  • Nachfolger 7bc8df16

Programmierrichtlinien etwas aktualisiert.

Unterschiede anzeigen:

doc/programmierstilrichtlinien.txt
8 8

  
9 9
Diese Regeln sind keine Schikane, sondern erleichtern allen das Leben!
10 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 11
Jeder, der einen Patch schickt, sollte sein Script vorher durch perltidy
18 12
laufen lassen. Damit werden einige der nachfolgenden Regeln automatisch
19 13
befolgt, andere hingegen nicht. Dort, wo keine perltidy-Optionen angegeben
......
22 16
--------------------------------------------------------------------------
23 17

  
24 18
1. Es werden keine "echten" TAB-Zeichen sondern Leerzeichen verwendet.
25
   Perltidy: -nt
26 19

  
27 20
2. Die Einr?ckung betr?gt zwei Leerzeichen.
28
   Perltidy: -i=2
29 21
   Beispiel:
30 22

  
31 23
   sub debug {
......
34 26

  
35 27
3. ?ffnende geschweifte Klammern befinden sich auf der gleichen Zeile wie
36 28
   der letzte Befehl.
37
   Perltidy: -nbl -nsbl -bar
38 29
   Beispiele:
39 30

  
40 31
   sub debug {
41
   ...
32
     ...
42 33
   }
43 34

  
44 35
   oder
......
50 41
4. Schlie?ende geschweifte Klammern sind so weit einger?ckt wie der Befehl/
51 42
   die ?ffnende schlie?ende Klammer, die den Block gestartet hat, und nicht
52 43
   auf der Ebene des Inhalts. Die gleichen Beispiele wie bei 3. gelten.
53
   Perltidy: macht's automatisch
54 44

  
55 45
5. Die W?rter "else" "elsif", "while" befinden sich auf der gleichen
56 46
   Zeile wie schlie?ende geschweifte Klammern.
57
   Perltidy: -ce
58 47
   Beispiele:
59 48

  
60
   if ($form->{"sum"} > 1000) {
49
   if ($form->{sum} > 1000) {
61 50
     ...
62
   } elsif ($form->{"sum"} > 0) {
51
   } elsif ($form->{sum} > 0) {
63 52
     ...
64 53
   } else {
65 54
     ...
......
70 59
   } while ($a > 0);
71 60

  
72 61
6. Parameter von Funktionsaufrufen m?ssen mit runden Klammern versehen
73
   werden.
74

  
75
   Achtung: perltidy kann dieses nicht erledigen. Der Programmierer muss
76
   selber darauf achten!
62
   werden. Davon nicht betroffen sind interne perl Funktionen.
77 63

  
78 64
   Beispiel:
79 65

  
80
   debug("Konnte Datei nicht oeffnen.\n");
66
   $main::lxdebug->message("Could not find file.");
67
   %options = map { $_ => 1 } grep { !/^#/ } @config_file;
81 68

  
82
7. Verschiedene Klammern
69
7. Verschiedene Klammern, Ihre Ausdr?cke und Leerzeichen:
83 70

  
84
  7.1 Aufeinander folgende runde Klammern sollten nicht durch Leerzeichen
85
      abgesetzt werden.
86
      Perltidy: -pt=2
87
      Beispiel:
71
  Generell gilt: Hashkeys und Arrayindices sollten _nicht_ durch Leerzeichen
72
  abgesetzt werden. Logische Klammerungen ebensowenig, Bl?cke schon.
88 73

  
89
      if (($form->{"debug"} == 1) && (($form->{"sum"} - 100) < 0)) {
90
        ...
91
      }
92 74

  
93
  7.2 Nach und vor eckigen Klammern sollten keine Leerzeichen stehen.
94
      Perltidy: -sbt=2
95
      Beispiel:
75
  Beispiel:
96 76

  
97
      $array[$i + 1] = 4;
98

  
99
  7.3 Nach und vor geschweiften Klammern sollten keine Leerzeichen stehen,
100
      es sei denn, sie sind verschachtelt.
101
      Beispiel:
102

  
103
      $form->{"sum"} += $form->{"row_${i}"};
77
      if (($form->{debug} == 1) && ($form->{sum} - 100 < 0)) {
78
        ...
79
      }
104 80

  
105
      $form->{ $form->{"index"} } += 1;
81
      $array[$i + 1]             = 4;
82
      $form->{sum}              += $form->{"row_$i"};
83
      $form->{ $form->{index} } += 1;
106 84

  
107
  7.4 Nach und vor geschweiften Klammern, die Codebl?cke beschr?nken,
108
      sollten Leerzeichen stehen, wenn sich der Codeblock ?ber nur eine
109
      Zeile erstreckt.
110
      Perltidy: -bbt=0
111
      Beispiel:
112

  
113
      map({ $form->{"sum"} += $form->{"row_$_"}; } (1..$rowcount));
114
      $form->{ $row + 1 } = 5;
85
      map { $form->{sum} += $form->{"row_$_"} } 1..$rowcount;
115 86

  
116 87
8. Mehrzeilige Befehle
117 88

  
118 89
  8.1 Werden die Parameter eines Funktionsaufrufes auf mehrere Zeilen
119
      aufgeteilt, so m?ssen diese bis zu der Spalte einger?ckt werden,
90
      aufgeteilt, so sollten diese bis zu der Spalte einger?ckt werden,
120 91
      in der die ersten Funktionsparameter in der ersten Zeile stehen.
121
      Perltidy: -lp -vt=1 -vtc=1
122 92
      Beispiel:
123 93

  
124 94
      $sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
125
                           $form->{"some_col_value"});
95
                           $form->{some_col_value});
96

  
97
  8.3 Ein Spezialfall ist der tern?re Oprator "?:", der am besten in einer
98
      ?bersichtlichen Tabellenstruktur organisiert wird.
126 99

  
127
  8.2 Wird ein Befehl auf einer neuen Zeile forgesetzt, so ist ab der
128
      zweiten Zeile zus?tzlich zwei Leerzeichen einzur?cken.
129
      Perltidy: -ci=2
130 100
      Beispiel:
131 101

  
132
      my $rowcount =
133
        $form->{"row_$i"} ? $i : $form->{"rowcount"} - $form->{"rowbase"};
102
      my $rowcount = $form->{"row_$i"} ? $i
103
                   : $form->{oldcount} ? $form->{oldcount} + 1
104
                   :                     $form->{rowcount} - $form->{rowbase};
134 105

  
135 106
9. Kommentare
136 107

  
137 108
  9.1 Kommentare, die alleine in einer Zeile stehen, sollten soweit wie der
138 109
      Code einger?ckt sein.
139
      Perltidy: -ibc
140

  
141 110
  9.2 Seitliche h?ngende Kommentare sollten einheitlich formatiert werden.
142
      Perltidy: -hsc
143 111

  
144
10. Hash-Keys sind, sofern es sich um Zeichenketten und nicht um
145
    Nummern handelt, in Anf?hrungszeichen zu setzen.
112
  9.3 S?mtliche Kommentare und Sonstiges im Quellcode ist bitte auf Englisch
113
      zu verfassen. So wie ich keine Lust habe franz?sischen Quelltext zu lesen,
114
      sollte auch der Lx-Office Quelltext f?r nicht-Deutschsprachige lesbar sein.
115

  
116
      Beispiel:
117

  
118
      my $found = 0;
119
      while (1) {
120
        last if $found;
146 121

  
147
    Achtung: perltidy kann dieses nicht erledigen. Der Programmierer muss
148
    selber darauf achten!
122
        # complicated check
123
        $found = 1 if //
124
      }
125

  
126
      $i = 0         # initialize $i
127
      $n = $i;       # save $i
128
      $i *= $const;  # do something crazy
129
      $i = $n;       # recover $i
130

  
131
10. Hashkeys sollten nur in Anf?hrungszeichen stehen, wenn die Interpolation
132
    gew?nscht ist.
149 133

  
150 134
    Beispiele:
151 135

  
152
    $form->{"sum"} = 0;
136
    $form->{sum}      = 0;
153 137
    $form->{"row_$i"} = $form->{"row_$i"} - 5;
154
    $some_hash{42} = 54;
138
    $some_hash{42}    = 54;
155 139

  
156 140
11. Die Maximale Zeilenl?nge ist nicht bescr?nkt. Zeilenl?ngen <= 79
157
    helfen, weil sie dann im Textmodus / per SSH deutlich besser lesbar
158
    sind. Oft genug ist es aber nicht m?glich oder nur unter gro?en
159
    Verrenkungen, diese Vorgabe einzuhalten.
141
    helfen unter bestimmten Bedingungen, aber wenn die Lesbarkeit unter
142
    kurzen Zeilen leidet (wie zum Biespiel in grossen Tabellen), dann
143
    ist Lesbarkeit vorzuziehen.
160 144

  
161
    Zeilen sollten nicht l?nger als 79 Zeichen sein.
162
    Perltidy: -l=79
145
    Als Beispiel sei print_options aus bin/mozilla/io.pl angef?hrt.
163 146

  
164
--------------------------------------------------------------------------
147
12. Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind unerw?nscht.
148
    Sie f?hren zu unn?tigen Whitespace?nderungen die diffs verf?lschen.
149

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

  
154
12. Es wird kein perltidy verwendet.
165 155

  
166
Vollst?ndige Liste aller Optionen, die ich f?r perltidy benutze. Diese
167
k?nnen in ~/.perltidyrc geschrieben werden:
156
    In der Vergangenheit wurde versucht perltidy zu verwenden um einen
157
    einheitlichen Stil zu erlangen, es hat sich aber gezeigt, dass Perltidys
158
    sehr eigenwilliges Verhaltes was Zeilenumbr?che angeht oftmals gut
159
    formatierten Code zerst?rt. F?r den Interessierten, hier sind die perltidy
160
    Optionen die grob den beschriebenen Richtlinien entsprechen.
168 161

  
169 162
-syn
170 163
-i=2

Auch abrufbar als: Unified diff