Zweimal im Monat besuchen wir einige der Lieblingsbeiträge unserer Leser aus der gesamten Geschichte von Nettuts+.
Die Lesbarkeit von Codes ist ein universelles Thema in der Welt der Computerprogrammierung. Es ist eines der ersten Dinge, die wir als Entwickler lernen. In diesem Artikel werden die fünfzehn wichtigsten Best Practices beim Schreiben von lesbarem Code beschrieben.
IDE (Integrated Development Environment) haben in den letzten Jahren einen großen Weg zurückgelegt. Dies machte das Kommentieren Ihres Codes so nützlich wie nie zuvor. Wenn Sie sich in Ihren Kommentaren an bestimmte Standards halten, können IDEs und andere Tools diese auf unterschiedliche Weise verwenden.
Betrachten Sie dieses Beispiel:
Die bei der Funktionsdefinition hinzugefügten Kommentare können in der Vorschau angezeigt werden, wenn ich diese Funktion verwende, auch von anderen Dateien.
Hier ein weiteres Beispiel, bei dem ich eine Funktion aus einer Bibliothek eines Drittanbieters aufrufe:
In diesen speziellen Beispielen basiert der verwendete Kommentartyp (oder die Dokumentation) auf PHPDoc, und die IDE ist Aptana.
Ich gehe davon aus, dass Sie bereits wissen, dass Sie Ihren Code einrücken sollen. Es ist jedoch auch erwähnenswert, dass es eine gute Idee ist, den Einrückungsstil konsistent zu halten.
Es gibt mehrere Möglichkeiten, den Code einzurücken.
function foo () if ($ vielleicht) do_it_now (); nochmal(); else abort_mission (); finalize ();
function foo () if ($ vielleicht) do_it_now (); nochmal(); else abort_mission (); finalize ();
function foo () if ($ vielleicht) do_it_now (); nochmal(); else abort_mission (); finalize ();
Ich habe in Stil 2 programmiert, bin aber vor kurzem zu # 1 gewechselt. Das ist aber nur eine Frage der Bevorzugung. Es gibt keinen "besten" Stil, dem jeder folgen sollte. Eigentlich ist der beste Stil ein konsistenter Stil. Wenn Sie Teil eines Teams sind oder wenn Sie Code zu einem Projekt beitragen, sollten Sie den in diesem Projekt vorhandenen Stil beachten.
Die Einrückungsstile unterscheiden sich nicht immer vollständig voneinander. Manchmal mischen sie unterschiedliche Regeln. In PEAR-Codierungsstandards beispielsweise die Öffnungsklammer ""
Befindet sich in derselben Zeile wie Kontrollstrukturen, geht aber nach Funktionsdefinitionen in die nächste Zeile über.
Birne Stil:
function foo () // in der nächsten Zeile platziert if ($ vielleicht) // in derselben Zeile platziert do_it_now (); nochmal(); else abort_mission (); finalize ();
Beachten Sie auch, dass sie anstelle von Registerkarten vier Leerzeichen für Einrückungen verwenden.
Hier ist ein Wikipedia-Artikel mit Beispielen verschiedener Einrückungsstile.
Ihren Code zu kommentieren ist fantastisch. Es kann jedoch übertrieben oder einfach nur redundant sein. Nehmen Sie dieses Beispiel:
// Erhalte den Ländercode $ country_code = get_country_code ($ _ SERVER ['REMOTE_ADDR']); // Wenn der Ländercode US ist, wenn ($ country_code == 'US') // die Formulareingabe für den Status echo anzeigen form_input_state ();
Wenn der Text so offensichtlich ist, ist es nicht produktiv, ihn innerhalb von Kommentaren zu wiederholen.
Wenn Sie diesen Code kommentieren müssen, können Sie ihn stattdessen einfach zu einer einzelnen Zeile kombinieren:
// Statusanzeige für US-Benutzer anzeigen $ country_code = get_country_code ($ _ SERVER ['REMOTE_ADDR']); if ($ country_code == 'US') echo form_input_state ();
Meistens erfordern bestimmte Aufgaben einige Codezeilen. Es empfiehlt sich, diese Aufgaben in separaten Codeblöcken mit einigen Leerzeichen zu speichern.
Hier ist ein vereinfachtes Beispiel:
// Liste der Foren abrufen $ forums = array (); $ r = mysql_query ("SELECT-ID, Name, Beschreibung von Foren"); während ($ d = mysql_fetch_assoc ($ r)) $ forums [] = $ d; // Laden Sie die Vorlagen load_template ('header'); load_template ('forum_list', $ forums); load_template ('footer');
Das Hinzufügen eines Kommentars am Anfang jedes Codeblocks betont auch die visuelle Trennung.
PHP selbst ist manchmal schuld daran, dass es keine einheitlichen Namensschemata gibt:
Zunächst sollten die Namen Wortgrenzen haben. Es gibt zwei beliebte Optionen:
Durch verschiedene Optionen entsteht eine Situation, die den Einrückungsstilen ähnelt, wie ich bereits erwähnt habe. Wenn ein bestehendes Projekt einer bestimmten Konvention folgt, sollten Sie dies tun. Einige Sprachplattformen verwenden auch ein bestimmtes Benennungsschema. In Java zum Beispiel verwendet der meiste Code camelCase-Namen, während in PHP die Mehrzahl der Unterstriche verwendet wird.
Diese können auch gemischt werden. Einige Entwickler ziehen es vor, Unterstriche für prozedurale Funktionen und Klassennamen zu verwenden, aber für Klassenmethodennamen camelCase:
Klasse Foo_Bar öffentliche Funktion someDummyMethod () Funktion procedureural_function_name ()
Es gibt also keinen offensichtlichen "besten" Stil. Einfach konsequent sein.
DRY steht für Don't Repeat Yourself. Auch bekannt als DIE: Die Vervielfältigung ist das Böse.
Der Grundsatz lautet:
"Jedes Wissen muss eine einzige, eindeutige, autoritative Darstellung innerhalb eines Systems haben."
Die meisten Anwendungen (oder Computer im Allgemeinen) dienen dazu, sich wiederholende Aufgaben zu automatisieren. Dieses Prinzip sollte in jedem Code, auch in Webanwendungen, beibehalten werden. Derselbe Code sollte nicht immer und immer wieder wiederholt werden.
Beispielsweise bestehen die meisten Webanwendungen aus vielen Seiten. Es ist sehr wahrscheinlich, dass diese Seiten gemeinsame Elemente enthalten. Kopf- und Fußzeilen sind in der Regel die besten Kandidaten dafür. Es ist keine gute Idee, diese Kopf- und Fußzeilen in jede Seite einzufügen. Hier erläutert Jeffrey Way, wie Sie in CodeIgniter Vorlagen erstellen.
$ this-> load-> view ('include / header'); $ this-> load-> view ($ main_content); $ this-> load-> view ('include / footer');
Zu viele Schachtelungsebenen können das Lesen und Befolgen von Code erschweren.
function do_stuff () //? if (is_writable ($ ordner)) if ($ fp = fopen ($ dateipfad 'w')) if ($ stuff = get_some_stuff ()) if (fwrite ($ fp, $ stuff)) //? else return false; else return false; else return false; else return false;
Aus Gründen der Lesbarkeit können Sie normalerweise Änderungen an Ihrem Code vornehmen, um die Verschachtelung zu reduzieren:
function do_stuff () //? if (! is_writable ($ ordner)) return false; if (! $ fp = fopen ($ dateipfad, 'w')) return false; if (! $ stuff = get_some_stuff ()) return false; if (fwrite ($ fp, $ stuff)) //? else return false;
Unsere Augen sind wohler beim Lesen von großen und schmalen Textspalten. Das ist genau der Grund, warum Zeitungsartikel so aussehen:
Es empfiehlt sich, das Schreiben von langen, langen Codezeilen zu vermeiden.
// bad $ my_email-> set_from ('[email protected]') -> add_to ('[email protected]') -> set_subject ('Methods Chained') -> set_body ('Some long message') -> senden(); // good $ my_email -> set_from ('[email protected]') -> add_to ('[email protected]') -> set_subject ('Methods Chained') -> set_body ('Some long message') -> senden(); // bad $ query = "SELECT-ID, Benutzername, Vorname, Nachname, Status FROM Benutzer LEFT JOIN Benutzerposts USING (Benutzer.id, BenutzerpostensBenutzer_ID) WHERE post_id = '123'"; // good $ query = "SELECT-ID, Benutzername, Vorname, Nachname, Status FROM Benutzer LEFT JOIN Benutzerposts USING (Benutzer.id, BenutzerpostensBenutzer_ID) WHERE post_id = '123'";
Wenn jemand den Code aus einem Terminalfenster lesen möchte, z. B. Vim-Benutzer, empfiehlt es sich, die Zeilenlänge auf etwa 80 Zeichen zu begrenzen.
Technisch könnten Sie den gesamten Anwendungscode in einer einzigen Datei schreiben. Aber das wäre ein Albtraum zum Lesen und Unterhalten.
Bei meinen ersten Programmierprojekten wusste ich von der Idee, "Include-Dateien" zu erstellen. Ich war jedoch noch nicht einmal entfernt organisiert. Ich habe einen "inc" -Ordner erstellt, in dem sich zwei Dateien befinden: db.php
und Functions.php
. Mit dem Anwachsen der Anwendungen wurde auch die Funktionsdatei sehr umfangreich und nicht mehr zu pflegen.
Eine der besten Methoden ist, entweder ein Framework zu verwenden oder ihre Ordnerstruktur zu imitieren. So sieht CodeIgniter aus:
Normalerweise sollten die Variablen beschreibend sein und ein oder mehrere Wörter enthalten. Dies gilt jedoch nicht unbedingt für temporäre Variablen. Sie können so kurz wie ein einzelnes Zeichen sein.
Es empfiehlt sich, konsistente Namen für temporäre Variablen zu verwenden, die dieselbe Rolle haben. Hier sind einige Beispiele, die ich in meinem Code verwende:
// $ i für Schleifenzähler für ($ i = 0; $ i < 100; $i++) // $j for the nested loop counters for ($j = 0; $j < 100; $j++) // $ret for return variables function foo() $ret['bar'] = get_bar(); $ret['stuff'] = get_stuff(); return $ret; // $k and $v in foreach foreach ($some_array as $k => $ v) // $ q, $ r und $ d für mysql $ q = "SELECT * FROM-Tabelle"; $ r = mysql_query ($ q); while ($ d = mysql_fetch_assocr ($ r)) // $ fp für Dateizeiger $ fp = fopen ('file.txt', 'w');
Datenbankinteraktion ist ein großer Teil der meisten Webanwendungen. Wenn Sie unbearbeitete SQL-Abfragen schreiben, sollten Sie sie auch lesbar halten.
Obwohl bei SQL-Sonderwörtern und Funktionsnamen die Groß- und Kleinschreibung nicht beachtet wird, ist es üblich, sie zu verwenden, um sie von Ihren Tabellen- und Spaltennamen zu unterscheiden.
SELECT ID, Benutzername FROM Benutzer; UPDATE Benutzer SET last_login = NOW () WHERE id = '123' SELECT ID, Benutzername FROM Benutzer u LEFT JOIN Benutzeradresse ua ON (u.id = ua.user_id) WHERE ua.state = 'NY' GROUP BY u.id ORDER BY u.username LIMIT 0,20
Dies ist ein weiterer Grundsatz, der für fast alle Programmiersprachen in allen Umgebungen gilt. Bei der Webentwicklung implizieren die "Daten" normalerweise eine HTML-Ausgabe.
Als PHP vor vielen Jahren zum ersten Mal veröffentlicht wurde, wurde es hauptsächlich als Template-Engine angesehen. Es war üblich, große HTML-Dateien mit ein paar Zeilen PHP-Code dazwischen zu haben. Die Dinge haben sich jedoch im Laufe der Jahre geändert, und die Websites wurden immer dynamischer und funktioneller. Der Code ist mittlerweile ein großer Teil von Webanwendungen, und es ist nicht mehr ratsam, ihn mit HTML zu kombinieren.
Sie können das Prinzip entweder selbst auf Ihre Anwendung anwenden oder ein Drittanbieter-Tool (Template Engines, Frameworks oder CMS) verwenden und deren Konventionen befolgen.
Beliebte PHP-Frameworks:
Beliebte Template Engines:
Beliebte Content-Management-Systeme
Sie können sich dafür entscheiden, keine ausgefallene Vorlagen-Engine zu verwenden, sondern verwenden stattdessen einfach Inline-PHP in Ihren Vorlagendateien. Dies verstößt nicht unbedingt gegen die "Trennung von Code und Daten", solange der Inline-Code direkt mit der Ausgabe zusammenhängt und lesbar ist. In diesem Fall sollten Sie die alternative Syntax für Kontrollstrukturen in Betracht ziehen.
Hier ist ein Beispiel:
Hallo, Nutzername; ?>
|Mein Message Board
Titel; ?>
Foren als $ forum):?>id, $ forum-> title)?> (Threads-> count (); ?> Threads)
Beschreibung; ?>
So können Sie viele geschweifte Klammern vermeiden. Außerdem sieht der Code ähnlich aus und fühlt sich an wie HTML strukturiert und eingerückt ist.
Objektorientierte Programmierung kann Ihnen helfen, gut strukturierten Code zu erstellen. Das bedeutet jedoch nicht, dass Sie die prozedurale Programmierung vollständig aufgeben müssen. Das Erstellen einer Mischung aus beiden Stilen kann gut sein.
Objekte sollten zur Darstellung von Daten verwendet werden, die sich normalerweise in einer Datenbank befinden.
Klasse Benutzer public $ username; public $ first_name; public $ last_name; öffentliche $ email; öffentliche Funktion __construct () //? öffentliche Funktion create () //? public function save () //? öffentliche Funktion delete () //?
Verfahrensfunktionen können für bestimmte Aufgaben verwendet werden, die unabhängig voneinander ausgeführt werden können.
Funktionskapitalisierung ($ string) $ ret = strtoupper ($ string [0]); $ ret. = strtolower (substr ($ string, 1)); return $ ret;
Open Source-Projekte werden mit der Unterstützung vieler Entwickler erstellt. Diese Projekte müssen ein hohes Maß an Lesbarkeit des Codes gewährleisten, damit das Team so effizient wie möglich zusammenarbeiten kann. Daher ist es eine gute Idee, den Quellcode dieser Projekte zu durchsuchen, um zu sehen, was diese Entwickler tun.
Wenn Sie "umgestalten", nehmen Sie Änderungen am Code vor, ohne die Funktionalität zu ändern. Sie können es als "Aufräumen" betrachten, um die Lesbarkeit und Qualität zu verbessern.
Dies beinhaltet keine Fehlerbehebungen oder das Hinzufügen neuer Funktionen. Sie können den Code, den Sie am Tag zuvor geschrieben haben, umwandeln, obwohl er noch frisch in Ihrem Kopf ist, sodass er lesbarer und wiederverwendbar ist, wenn Sie ihn möglicherweise in zwei Monaten betrachten. Wie das Motto lautet: "frühzeitig refaktorieren, oft refaktorieren".
Sie können während des Refactoring-Prozesses "bewährte Methoden" für die Lesbarkeit von Code anwenden.
Ich hoffe, Ihnen hat dieser Artikel gefallen! Irgendwas das ich vermisst habe? Lass es mich über die Kommentare wissen. Und wenn Sie Ihre Kodierung verbessern möchten, stehen Ihnen auf Envato Market zahlreiche Skripts und Apps zur Verfügung. Sehen Sie, was diese Woche am beliebtesten ist.