Advertisement
  1. Web Design
  2. HTML/CSS
  3. HTML

Top 15+ Best Practices zum Schreiben von superlesbarem Code

Scroll to top
Read Time: 12 min

() translation by (you can also view the original English article)

Code Lesbarkeit ist ein universelles Thema in der Welt der Computerprogrammierung.  Es ist eines der ersten Dinge, die wir als Entwickler lernen.  Dieser Artikel beschreibt die fünfzehn wichtigsten Best Practices beim Schreiben von lesbarem Code. 


1 - Kommentieren und Dokumentation 

IDEs (Integrated Development Environment) haben in den letzten Jahren einen langen Weg zurückgelegt.  Dadurch wurde der Code nützlicher als je zuvor.  Wenn Sie bestimmten Standards in Ihren Kommentaren folgen, können IDEs und andere Tools sie auf verschiedene Arten verwenden.

Betrachten Sie dieses Beispiel:

Die Kommentare, die ich in der Funktionsdefinition hinzugefügt habe, können in der Vorschau angezeigt werden, wenn ich diese Funktion verwende, auch aus anderen Dateien. 

Hier ist ein weiteres Beispiel, wo ich eine Funktion von einer Drittanbieter-Bibliothek aufrufen: 

In diesen speziellen Beispielen basiert die Art der Kommentierung (oder Dokumentation) auf PHPDoc, und die IDE ist Aptana


2 - Konsistente Einrückung

Ich nehme an, Sie wissen bereits, dass Sie Ihren Code einrücken sollten.  Es ist jedoch auch erwähnenswert, dass es eine gute Idee ist, den Eindruckstil konsistent zu halten. 

Es gibt mehr als eine Möglichkeit, Code einzurücken.

Stil 1: 
1
2
function foo() {
3
  if ($maybe) {
4
		do_it_now();
5
		again();
6
	} else {
7
		abort_mission();
8
	}
9
	finalize();
10
}
Stil 2: 
1
2
function foo()
3
{
4
	if ($maybe)
5
	{
6
		do_it_now();
7
		again();
8
	}
9
	else
10
	{
11
		abort_mission();
12
	}
13
	finalize();
14
}
Stil 3: 
1
2
function foo()
3
{	if ($maybe)
4
	{	do_it_now();
5
		again();
6
	}
7
	else
8
	{	abort_mission();
9
	}
10
	finalize();
11
}

Ich habe im Stil # 2 programmiert, bin aber kürzlich auf # 1 gewechselt.  Aber das ist nur eine Frage der Präferenz.  Es gibt keinen "besten" Stil, dem jeder folgen sollte.  Eigentlich ist der beste Stil ein konsistenter Stil.  Wenn Sie Teil eines Teams sind oder Code zu einem Projekt beitragen, sollten Sie dem vorhandenen Stil folgen, der in diesem Projekt verwendet wird.

Die Einrückstile unterscheiden sich nicht immer vollständig voneinander.  Manchmal mischen sie unterschiedliche Regeln.  Zum Beispiel, in PEAR Coding Standards, die öffnende Klammer "{" geht auf der gleichen Linie wie Kontrollstrukturen, aber sie gehen auf die nächste Zeile nach Funktionsdefinitionen

BIRNE Stil: 

1
2
function foo()
3
{                     // placed on the next line

4
    if ($maybe) {     // placed on the same line

5
        do_it_now();
6
        again();
7
    } else {
8
        abort_mission();
9
    }
10
    finalize();
11
}

Beachten Sie auch, dass sie vier Leerzeichen statt Tabulatoren für Einrückungen verwenden. 

Hier ist ein Wikipedia-Artikel mit Beispielen verschiedener Einzugsstile.


3 - Vermeiden Sie offensichtliche Kommentare 

Deinen Code zu kommentieren ist fantastisch; es kann jedoch übertrieben sein oder einfach nur überflüssig sein.  Nimm dieses Beispiel: 

1
2
// get the country code

3
$country_code = get_country_code($_SERVER['REMOTE_ADDR']);
4
5
// if country code is US

6
if ($country_code == 'US') {
7
8
	// display the form input for state

9
	echo form_input_state();
10
}

Wenn der Text so offensichtlich ist, ist es wirklich nicht produktiv, ihn innerhalb von Kommentaren zu wiederholen. 

Wenn Sie diesen Code kommentieren müssen, können Sie ihn einfach zu einer einzigen Zeile kombinieren: 

1
2
// display state selection for US users

3
$country_code = get_country_code($_SERVER['REMOTE_ADDR']);
4
if ($country_code == 'US') {
5
	echo form_input_state();
6
}

4 - Codegruppierung

Meistens erfordern bestimmte Aufgaben ein paar Zeilen Code.  Es ist eine gute Idee, diese Aufgaben in separaten Blöcken mit einigen Leerzeichen zwischen ihnen zu halten. 

Hier ist ein vereinfachtes Beispiel: 

1
2
3
// get list of forums

4
$forums = array();
5
$r = mysql_query("SELECT id, name, description FROM forums");
6
while ($d = mysql_fetch_assoc($r)) {
7
	$forums []= $d;
8
}
9
10
// load the templates

11
load_template('header');
12
load_template('forum_list',$forums);
13
load_template('footer');

Das Hinzufügen eines Kommentars am Anfang jedes Codeblocks betont auch die visuelle Trennung. 


5 - Konsistentes Namensschema

PHP selbst ist manchmal schuldig, nicht konsistenten Namensschemata zu folgen: 

  • strpos () und str_split () 
  • imagetypes () vs. image_type_to_extension ()

Vor allem sollten die Namen Wortgrenzen haben.  Es gibt zwei beliebte Optionen: 

  • camelCase: Der erste Buchstabe jedes Wortes wird groß geschrieben, außer dem ersten Wort. 
  • Unterstriche: Unterstriche zwischen Wörtern wie: mysql_real_escape_string (). 

Wenn Sie verschiedene Optionen verwenden, entsteht eine Situation ähnlich der Einzugsstile, wie ich bereits erwähnt habe.  Wenn ein bestehendes Projekt einer bestimmten Konvention folgt, sollten Sie damit fortfahren.  Einige Sprachplattformen neigen auch dazu, ein bestimmtes Namensschema zu verwenden.  In Java verwendet der meiste Code zum Beispiel camelCase-Namen, während in PHP die meisten Unterstriche unterstrichen sind. 

Diese können auch gemischt werden.  Einige Entwickler bevorzugen die Verwendung von Unterstrichen für prozedurale Funktionen und Klassennamen, verwenden aber camelCase für Klassenmethodennamen:

1
2
class Foo_Bar {
3
4
	public function someDummyMethod() {
5
6
	}
7
8
}
9
10
function procedural_function_name() {
11
12
}

Es gibt also keinen offensichtlichen "besten" Stil. Nur konsequent sein. 


6 - TROCKEN-Prinzip

DRY steht für Do not Repeat Yourself.  Auch bekannt als DIE: Duplikation ist böse.

Das Prinzip besagt: 

"Jedes Wissen muss eine einzige, eindeutige, autoritative Repräsentation in einem System haben." 

Der Zweck für die meisten Anwendungen (oder Computer im Allgemeinen) besteht darin, sich wiederholende Aufgaben zu automatisieren.  Dieses Prinzip sollte in allen Code- und sogar Webanwendungen beibehalten werden.  Das gleiche Stück Code sollte nicht immer wieder wiederholt  werden.

Zum Beispiel 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, Kopien zu behalten, die diese Kopf- und Fußzeilen in jede Seite einfügen.  Hier erklärt Jeffrey Way, wie man Vorlagen in CodeIgniter erstellt. 

1
2
$this->load->view('includes/header');
3
4
$this->load->view($main_content);
5
6
$this->load->view('includes/footer');

7 - Vermeiden Sie tiefe Verschachtelung

Zu viele Verschachtelungsebenen können das Lesen und Folgen von Code erschweren. 

1
2
function do_stuff() {
3
4
// ...

5
6
	if (is_writable($folder)) {
7
8
		if ($fp = fopen($file_path,'w')) {
9
10
			if ($stuff = get_some_stuff()) {
11
12
				if (fwrite($fp,$stuff)) {
13
14
					// ...

15
16
				} else {
17
					return false;
18
				}
19
			} else {
20
				return false;
21
			}
22
		} else {
23
			return false;
24
		}
25
	} else {
26
		return false;
27
	}
28
}

Aus Gründen der Lesbarkeit ist es normalerweise möglich, Änderungen an Ihrem Code vorzunehmen, um die Verschachtelung zu reduzieren: 

1
2
function do_stuff() {
3
4
// ...

5
6
	if (!is_writable($folder)) {
7
		return false;
8
	}
9
10
	if (!$fp = fopen($file_path,'w')) {
11
		return false;
12
	}
13
14
	if (!$stuff = get_some_stuff()) {
15
		return false;
16
	}
17
18
	if (fwrite($fp,$stuff)) {
19
		// ...

20
	} else {
21
		return false;
22
	}
23
}

8 - Grenzlinienlänge 

Unsere Augen sind komfortabler beim Lesen großer und schmaler Textspalten.  Genau aus diesem Grund sehen Zeitungsartikel so aus:

Es empfiehlt sich, horizontal lange Codezeilen nicht zu schreiben. 

1
2
3
// bad

4
$my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('Methods Chained')->set_body('Some long message')->send();
5
6
// good

7
$my_email
8
	->set_from('test@email.com')
9
	->add_to('programming@gmail.com')
10
	->set_subject('Methods Chained')
11
	->set_body('Some long message')
12
	->send();
13
14
// bad

15
$query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";
16
17
// good

18
$query = "SELECT id, username, first_name, last_name, status

19
	FROM users

20
	LEFT JOIN user_posts USING(users.id, user_posts.user_id)

21
	WHERE post_id = '123'";

Wenn jemand beabsichtigt, den Code aus einem Terminal-Fenster zu lesen, wie z. B. Vim-Benutzer, empfiehlt es sich, die Zeilenlänge auf etwa 80 Zeichen zu begrenzen. 


9 - Datei- und Ordnerorganisation

Technisch könnten Sie einen vollständigen Anwendungscode in einer einzigen Datei schreiben. Aber das wäre ein Albtraum, den man lesen und pflegen könnte. 

Bei meinen ersten Programmierprojekten wusste ich von der Idee, "Include-Dateien" zu erstellen.  Allerdings war ich noch nicht einmal im entferntesten organisiert.  Ich habe einen "inc" Ordner mit zwei Dateien erstellt: db.php und functions.php.  Als die Anwendungen anwuchsen, wurde auch die Funktionsdatei riesig und nicht mehr zu pflegen. 

Einer der besten Ansätze besteht darin, entweder ein Framework zu verwenden oder ihre Ordnerstruktur zu imitieren.  So sieht CodeIgniter aus: 


10 - Konsistente temporäre Namen

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 die gleiche Art von Rolle haben.  Hier sind ein paar Beispiele, die ich in meinem Code verwende: 

1
2
3
// $i for loop counters

4
for ($i = 0; $i < 100; $i++) {
5
6
	// $j for the nested loop counters

7
	for ($j = 0; $j < 100; $j++) {
8
9
	}
10
}
11
12
// $ret for return variables

13
function foo() {
14
	$ret['bar'] = get_bar();
15
	$ret['stuff'] = get_stuff();
16
17
	return $ret;
18
}
19
20
// $k and $v in foreach

21
foreach ($some_array as $k => $v) {
22
23
}
24
25
// $q, $r and $d for mysql

26
$q = "SELECT * FROM table";
27
$r = mysql_query($q);
28
while ($d = mysql_fetch_assocr($r)) {
29
30
}
31
32
// $fp for file pointers

33
$fp = fopen('file.txt','w');

11 - Erstellen Sie spezielle SQL-Wörter 

Datenbankinteraktion ist ein großer Teil der meisten Webanwendungen.  Wenn Sie rohe SQL-Abfragen schreiben, ist es ratsam, sie auch lesbar zu halten. 

Obwohl SQL-spezifische Wörter und Funktionsnamen nicht zwischen Groß- und Kleinschreibung unterscheiden, ist es üblich, sie groß zu schreiben, um sie von Ihren Tabellen- und Spaltennamen zu unterscheiden.

1
2
SELECT id, username FROM user;
3
4
UPDATE user SET last_login = NOW()
5
WHERE id = '123'
6
7
SELECT id, username FROM user u
8
LEFT JOIN user_address ua ON(u.id = ua.user_id)
9
WHERE ua.state = 'NY'
10
GROUP BY u.id
11
ORDER BY u.username
12
LIMIT 0,20

12 - Trennung von Code und Daten 

Dies ist ein weiterer Grundsatz, der für fast alle Programmiersprachen in allen Umgebungen gilt.  Im Fall von Web-Entwicklung, die "Daten" impliziert im Allgemeinen HTML-Ausgabe.

Als PHP vor vielen Jahren zum ersten Mal veröffentlicht wurde, wurde es hauptsächlich als Template-Engine gesehen.  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 verändert und Websites wurden immer dynamischer und funktionaler.  Der Code ist jetzt ein großer Teil von Webanwendungen und es ist nicht länger eine gute Methode, ihn mit HTML zu kombinieren. 

Sie können das Prinzip entweder selbst auf Ihre Anwendung anwenden oder Sie können ein Drittanbieter-Tool (Template-Engines, Frameworks oder CMS) verwenden und deren Konventionen befolgen.

Beliebte PHP-Frameworks: 

Beliebte Vorlagen-Engines: 

Beliebte Content-Management-Systeme 


13 - Alternative Syntax innerhalb von Vorlagen 

Sie können sich dafür entscheiden, keine ausgefallene Vorlagen-Engine zu verwenden, sondern statt dessen in Ihre Vorlagendateien mit einfachem Inline-PHP zu wechseln.  Dies verletzt nicht unbedingt die "Trennung von Code und Daten", solange der Inline-Code direkt mit der Ausgabe verknüpft ist und lesbar ist.  In diesem Fall sollten Sie die alternative Syntax für Kontrollstrukturen in Betracht ziehen. 

Hier ist ein Beispiel:

1
2
<div class="user_controls">
3
	<?php if ($user = Current_User::user()): ?>
4
		Hello, <em><?php echo $user->username; ?></em> <br/>
5
		<?php echo anchor('logout', 'Logout'); ?>
6
	<?php else: ?>
7
		<?php echo anchor('login','Login'); ?> |
8
		<?php echo anchor('signup', 'Register'); ?>
9
	<?php endif; ?>
10
</div>
11
12
<h1>My Message Board</h1>
13
14
<?php foreach($categories as $category): ?>
15
16
	<div class="category">
17
18
		<h2><?php echo $category->title; ?></h2>
19
20
		<?php foreach($category->Forums as $forum): ?>
21
22
			<div class="forum">
23
24
				<h3>
25
					<?php echo anchor('forums/'.$forum->id, $forum->title) ?>
26
					(<?php echo $forum->Threads->count(); ?> threads)
27
				</h3>
28
29
				<div class="description">
30
					<?php echo $forum->description; ?>
31
				</div>
32
33
			</div>
34
35
		<?php endforeach; ?>
36
37
	</div>
38
39
<?php endforeach; ?>

Auf diese Weise können Sie viele geschweifte Klammern vermeiden.  Außerdem sieht der Code so aus und fühlt sich ähnlich an wie HTML strukturiert und eingerückt ist. 


14 - Objektorientiert vs. Prozedural 

Objektorientierte Programmierung kann Ihnen helfen, gut strukturierten Code zu erstellen.  Aber das bedeutet nicht, dass Sie die prozedurale Programmierung komplett aufgeben müssen.  Es kann gut sein, eine Mischung aus beiden Stilen zu kreieren. 

Objekte sollten zum Darstellen von Daten verwendet werden, die sich normalerweise in einer Datenbank befinden. 

1
2
class User {
3
4
	public $username;
5
	public $first_name;
6
	public $last_name;
7
	public $email;
8
9
	public function __construct() {
10
		// ...

11
	}
12
13
	public function create() {
14
		// ...

15
	}
16
17
	public function save() {
18
		// ...

19
	}
20
21
	public function delete() {
22
		// ...

23
	}
24
25
}

Prozedurale Funktionen können für bestimmte Aufgaben verwendet werden, die unabhängig voneinander ausgeführt werden können.

1
2
function capitalize($string) {
3
4
	$ret = strtoupper($string[0]);
5
	$ret .= strtolower(substr($string,1));
6
	return $ret;
7
8
}

15 - Lesen Sie den Open Source Code 

Open Source-Projekte werden mit dem Input vieler Entwickler erstellt.  Diese Projekte müssen eine hohe 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 beobachten, was diese Entwickler tun. 


16 - Code-Refactoring 

Wenn Sie "umgestalten", nehmen Sie Änderungen am Code vor, ohne die Funktionalität zu ändern.  Sie können es sich wie ein "Aufräumen" vorstellen, um die Lesbarkeit und Qualität zu verbessern. 

Dies beinhaltet keine Fehlerkorrekturen oder das Hinzufügen neuer Funktionen.  Sie könnten den Code, den Sie am Vortag geschrieben haben, neu gestalten, während er noch frisch in Ihrem Kopf ist, so dass er besser lesbar und wiederverwendbar ist, wenn Sie ihn möglicherweise in zwei Monaten betrachten. Wie das Motto sagt: "früh refaktorieren, oft umgestalten" Sie können während des Refactoring-Prozesses eine der "Best Practices" der Code-Lesbarkeit anwenden.

Ich hoffe, dir hat dieser Artikel gefallen! 

Irgendwelche, die ich verpasste? Lass mich über die Kommentare wissen.  Lass mich über die Kommentare wissen.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.