# Formatierung Formatierung kann den entscheidenden Unterschied zwischen lesbarem und unlesbarem Code machen. Schlechter Code kann mit einer guten Formatierung wenigstens einigermassen lesbar gemacht werden. Guter Code mit schlechter Formatierung macht es fast unmöglich etwas zu verstehen. ## Vertikale Formatierung Fast jeder Code wird heutzutage von oben nach unten gelesen. Es macht also Sinn, wenn der Code endsprechend formatiert ist. Es gibt zwei Aspekte zu beachten: Vertikale Dichte und Vertikaler Abstand. Grundsätzlich kann gesagt werden: Konzepte, die zusammengehören, sollten beieinanderstehen. Die Vertikale Dichte beschreibt, wie nahe beieinander zusammengehörige Codeteile stehen sollten. Instanzvariablen beispielsweise, sollten möglichst beieinander sein, um die Zusammengehörigkeit zu zeigen. ```CSharp public class Person { /** * name of the person */ public String name; /** *Age of the person */ public int age; } ``` Im obigen Beispiel sind die Felder durch Kommentare getrennt. Es ist schwierig auf den ersten Blick herauszulesen, dass es sich um Instanz-Felder handelt. Sie sollten stattdessen beieinanderstehen: ```CSharp public class Person { public String name; public int age; } ``` Auch Methoden, die zueinander gehören sollten, immer beieinanderstehen. Es sollte weiterhin nach Abstraktionsebene sortiert werden, wo die oberste Methode die höchste Abstraktionsebene belegt, es sollte aber wie ein Fluss gelesen werden können. So wie Konzepte, die zusammengehören, beieinanderstehen sollten, sollten auch Konzepte die unabhängig voneinander sind einen Vertikalen Abstand haben. Abstände zwischen Instanz-Variablen und Methoden macht Sinn, Abstände zwischen Konstruktoren und Methoden machen Sinn aber auch verschiedene Abstände zwischen überladenen und verschiedenen Methoden kann hilfreich sein. ## Horizontale Formatierung Auch die Horizontale Formatierung ist sehr wichtig. Hierbei gibt es mehr Konzepte zu beachten. Der erste Punkt ist wieder die Offenheit und Dichte. Beispielsweise sollte bei einer Zuweisung zwischen dem Gleichheitszeichen (=), der Variabel und dem Wert ein Abstand bestehen, da sie nicht direkt zueinander gehören. Zwischen Methodenaufruf und Parameter Klammer sollte aber kein Abstand sein, da diese direkt zueinander gehören und ein Abstand verwirrend wirken könnte. Die Horizontale Ausrichtung ist heutzutage eine Selbstverständlichkeit, kann aber für Assembler Programmierer gewöhnungsbedürftig sein. Die Bauteile einer Zeile sollten nicht horizontal gleich sein, da es von der eigentlichen Verwandtschaft der Teile ablenkt: ```CSharp public class Person { // Falsche Formatierung public         String                name; public         int                   age; private        ArrayList<Person>     parents; protected long                  wealth; } ``` Die Einrückung kann auch einen grossen Unterschied machen. Alle Zeilen die auf der gleichen Ebene agieren und zum gleichen Code Block gehören sollten auch gleich eingerückt sein.