Coding Guidelines – schon mal irgendwo gelesen?
Wenn ich das bisher irgendwo gelesen habe, habe ich das Kapitel schnell übersprungen, denn die Funktion war mir oft wichtiger als der Code. Kennt ihr das? Dann nicht weiterspringen sondern weiterlesen…
Was sind Coding Guidelines?
Die CG definieren, wie TYPO3 Code, Dateien und Verzeichnisse strukturiert und formatiert sein sollten. CG liefern keine technischen Informationen und hilft nicht beim Programmieren.
Warum braucht man Coding Guidelines?
Vor allem zwei Ziele sollen mit standardisiertem Code erreicht werden:
- Sicherheit
- Lesbarkeit
In eigenen Worten würde ich sagen, dass die CG helfen sollen, sich in unbekanntem Code (und das kann durchaus der eigenen Code nach einem längeren Zeitraum sein) schnell und sicher zurechtzufinden. Das Einhalten der CG sichert eine skalierbare und sichere Erweiterung.
Interessiert mich das?
Jedenfalls sollte es dich interessieren, wenn du deine Extension veröffentlichen willst oder es bereits getan hast. Innerhalb der „Inspiring people to share“ Erweiterungen ist es durchaus üblich, das auch andere Entwickler einen Blick in den Code riskieren um diesen mit voran zu treiben. Machen wir es also nicht noch schwerer.
Die Vorher/Nachher Show
Klar könnte ich jetzt alle Punkte stichwortartig abtippen, aber die könnt ihr sicher schneller und besser in den Original CG nachlesen (siehe Link unten). Stattdessen mache ich eine kleine Vorher/Nachher Show.
Vorher:
< ? class x { function xy () { $a = "<div style="color: blue;">Das ist ein Text</div>"; if ($b) $a = "<a href=\"index.php?id=$_POST["var"]\">$a</a>"; mysql_connect($dbort,$dbuser,$dbpw); mysql_select_db($dbdb); $z=mysql_query("SELECT * FROM table"); while($datenvondatenbank=mysql_fetch_array($z)) { echo "Daten: $datenvondatenbank[links]"; } } } ? > |
Nachher:
< ?php /* GPL Notice */ /* Class explanation */ class tx_plugin_listView { /* Function explanation */ function getDataFromDB($html) { $html .= $this->pi_getLL('value', 'alttext'); // description (HTML from Template) if ($this->piVars['uid']) { // description what this if is doing // Only using typolink or typolinkwrap // Output from piVars only // Rewrite Output (e.g.) with htmlspecialchars() } $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( '*', 'table', '1' ) // and so on // don't use echo - never ever } } // XCLASS Definition ? > |
Die wichtigsten Punkte
- ‚ statt „
- GPL Hinweis nicht vergessen
- XCLASS Definition nicht vergessen
- < ?php statt < ?
- Richtige Klammersetzung
- Sinnvolle Benennung der Variablen, Klassen, Funktionen (CamelCase, English only)
- Quelltextdokumentation (English only)
- TYPO3 API statt direkter Zugriff auf Server Variablen
- TYPO3 API statt eigener DB Zugriff
- Typolinks statt eigener harter Links
- Generell: Wie ist mein Code am einfachsten lesbar und am schnellsten verständlich
- Generell2: Ein paar Zeilen mehr aber dafür mehr Übersicht ist immer besser
Links zum Thema
- Die offiziellen TYPO3 Coding Guidelines
- Das inoffiziele Dokument von Dmitry zum Thema
(Link geändert – thx 2 Michael Stucki)
Cheers, Alex
PS: Ich mache auch nicht immer alles richtig, aber ich werde mich in Zukunft bemühen – versprochen 😉