Übung: Verwenden von Leerraum zur Verbesserung der Lesbarkeit von Code
Print- und Webdesigner*innen wissen, dass das Unterbringen von zu vielen Informationen auf engem Raum die Betrachter*innen überwältigt. Daher setzen sie Leerraum strategisch ein, um Informationen aufzubrechen, damit der Betrachter bestmöglich in die Lage versetzt wird, die primäre Botschaft ihrer Arbeit zu erkennen.
Entwickler können eine ähnliche Strategie verwenden, wenn sie Code in einem Editor schreiben. Durch Verwenden von Leerraum, um die jeweilige Bedeutung zu vermitteln, können Entwickler die Absicht Ihres Codes klar und deutlich herausstellen.
Was ist Leerraum?
Der Begriff „Leerraum“ bezieht sich auf einzelne Leerzeichen, die über die Leertaste (space bar) eingefügt, Tabstopps, die über die TAB-TASTE (tab) eingefügt, und Zeilenvorschübe, die über die EINGABETASTE (enter) eingefügt wurden.
Der C#-Compiler ignoriert Leerraum. In der folgenden Übung wird veranschaulicht, wie Leerraum ignoriert wird und wie Leerraum das Verständnis verbessern kann.
Hinzufügen von Code, um zu veranschaulichen, wie Leerraum vom C#-Compiler ignoriert wird
Stellen Sie sicher, dass eine leere „Program.cs“-Datei in Visual Studio Code geöffnet ist.
Öffnen Sie bei Bedarf Visual Studio Code, und führen Sie dann die folgenden Schritte aus, um eine „Program.cs“-Datei im Editor vorzubereiten:
Klicken Sie im Menü Datei auf Ordner öffnen.
Verwenden Sie das Dialogfeld „Ordner öffnen“, um zum Ordner CsharpProjects zu navigieren und diesen dann zu öffnen.
Wählen Sie in der Visual Studio Code EXPLORER-Ansicht Program.cs aus.
Wählen Sie im Visual Studio Code-Menü Auswahl die Option Alle auswählen aus, und drücken Sie dann die ENTF-Taste.
Geben Sie den folgenden Code ein:
// Example 1: Console . WriteLine ( "Hello Example 1!" ) ; // Example 2: string firstWord="Hello";string lastWord="Example 2";Console.WriteLine(firstWord+" "+lastWord+"!");Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.
Klicken Sie in der EXPLORER-Ansicht auf "TestProject", um ein Terminal am Speicherort des TestProject-Ordners zu öffnen, klicken Sie mit der rechten Maustaste auf "TestProject", und wählen Sie dann " In integriertem Terminal öffnen" aus.
Geben Sie in der Eingabeaufforderung des Terminals dotnet run ein, und drücken Sie dann die EINGABETASTE.
Die folgende Ausgabe wird angezeigt.
Hello Example 1! Hello Example 2!Nehmen Sie sich etwas Zeit, um zu überlegen, was Ihnen dieses Ergebnis darüber sagt, wie Sie Leerraum in Ihrem Code verwenden sollten.
Diese beiden Codebeispiele veranschaulichen zwei entscheidende Ideen:
- Leerraum spielt für den Compiler keine Rolle. Allerdings ...
- Leerraum kann, wird er richtig verwendet, Ihre Fähigkeit erhöhen, den Code zu lesen und zu verstehen.
Es ist wahrscheinlich, dass Sie Code nur einmal schreiben, diesen jedoch mehrmals lesen müssen. Daher sollten Sie sich auf die Lesbarkeit des Codes konzentrieren, den Sie schreiben. Im Lauf der Zeit werden Sie ein Gefühl dafür bekommen, wann und wie Leerraum in Form von Leerzeichen, Tabstopps und Zeilenvorschüben verwendet werden sollte.
Empfehlungen vorab:
- Jeder vollständige Befehl (eine Anweisung) gehört in eine eigene Zeile.
- Wird eine einzelne Codezeile zu lang, können Sie sie aufteilen. Sie sollten jedoch vermeiden, eine einzelne Anweisung willkürlich in mehrere Zeilen aufzuteilen, es sei denn, Sie haben einen guten Grund dafür.
- Verwenden Sie links und rechts von einem Zuweisungsoperator jeweils ein Leerzeichen.
Ersetzen Sie den vorhandenen Code durch folgenden Code:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }Beachten Sie, dass dieser Code nicht viel Leerraum enthält. Dieser Code wird im Folgenden verwendet, um einen Ansatz für das Hinzufügen von Leerraum in Ihren Anwendungen zu veranschaulichen. Effektiver Leerraum sollten es einfacher machen, die Funktionsweise von Code besser zu verstehen.
Hinweis
Im Code wird die
Random-Klasse verwendet, um ein simuliertes Würfelspiel zu entwickeln, bei dem der Gesamtwert aus drei Würfen verwendet wird, um die höchste Würfelzahl zu ermitteln. Der Code vergibt zusätzliche Punkte für zwei oder drei gleiche Würfelaugen. Sie müssen diesen Code nicht vollständig verstehen, um den Vorteil von Leerraum zu erkennen.Nehmen Sie sich etwas Zeit, um zu überlegen, wie Sie Leerraum verwenden würden, um die Lesbarkeit dieses Codes zu verbessern.
Es gibt zwei Merkmale dieses Codes, die Sie beachten sollten:
- In diesem Codebeispiel gibt es keine vertikalen Leerräume. Anders ausgedrückt: Es gibt keine leeren Zeilen, durch die die Codezeilen voneinander getrennt sind. Alle Zeilen fügen sich zu einer dichten Codeauflistung.
- Die Codeblöcke, die durch die öffnenden und schließenden geschweiften Klammern (
{ }) definiert sind, liegen dicht gedrängt, wodurch es schwierig wird, ihre Grenzen visuell erkennen zu können.
Allgemein gesagt fügen Sie, um die Lesbarkeit zu verbessern, zwischen zwei, drei oder vier Codezeilen, die ähnliche oder zusammengehörende Aktionen ausführen, eine leere Zeile ein.
Die Gestaltung Ihres Codes mit vertikalem Leerraum ist subjektiv. Möglicherweise sind sich zwei Entwickler*innen nicht darüber einig, was lesbar ist oder wann Leerraum hinzugefügt werden sollte. Verwenden Sie Ihr bestmögliches Urteilsvermögen.
Um vertikalen Leerraum zur Verbesserung der Lesbarkeit einzufügen, aktualisieren Sie Ihren Code wie folgt:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }Die erste Zeile mit Leerraum trennt die Deklaration der Variable
dicevon den Codezeilen, die zum Zuweisen von Werten zu Ihren Würfelvariablen verwendet werden. Durch diese Trennung können Sie einfacher erkennen, wiedicein Ihrem Code verwendet wird.Die nächste Zeile mit Leerraum trennt die Deklaration Ihrer Würfelvariablen von der Deklaration von
total. Das Gruppieren der Deklaration Ihrer drei Würfelvariablen ist aus zwei Gründen hilfreich. Zunächst wird eine Gruppe von Codezeilen erstellt, die verwandte Variablen enthält. Zweitens sind die Variablennamen so ähnlich, und die Deklaration folgt demselben Muster. Durch das Gruppieren wird ihre Ähnlichkeiten noch deutlicher, und die Unterschiede können offengelegt werden.Schließlich trennt die dritte Zeile mit Leerraum eine weitere Gruppe verwandter Anweisungen von Ihren geschachtelten
if-Anweisungen. Die Anweisungsgruppe mit den Deklaration der MethodentotalundConsole.WriteLine()steht weniger nach der Darstellung, sondern mehr nach ihrem Zweck in einem Zusammenhang. Ihr Code konzentriert sich auf den Gesamtwert, der mit drei Würfeln erreicht wird, und darauf, ob doppelte oder dreifache Würfelwerte vorkommen. Diese Zeilen hängen zusammen, da Sietotalberechnen und die Ergebnisse des Würfelns den Benutzer*innen melden müssen.Einige Entwickler*innen könnten einwenden, dass Sie eine leere Zeile zwischen den beiden Deklarationen von
totalundConsole.WriteLine()hinzufügen sollten. Auch hier gilt, dass die Auswahl des Leerraums nach bestem Ermessen erfolgt. Sie sollten entscheiden, was für Sie besser lesbar ist, und diesen Stil durchgängig anwenden.Sie haben damit nur noch die
if-Anweisung. Sie können sie jetzt untersuchen.Konzentrieren Sie sich auf die Codezeilen unter dem Schlüsselwort
if, und ändern Sie Ihren Code wie folgt:Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }Beachten Sie, dass die öffnenden und schließenden geschweiften Klammern auf jeweils einer eigenen Zeile stehen, um die Abstände zu optimieren.
Die Symbole
{und}erstellen Codeblöcke. Viele C#-Konstrukte erfordern Codeblöcke. Diese Symbole sollten in einer eigenen Zeile angeordnet werden, damit ihre Grenzen klar sichtbar und lesbar sind.Außerdem ist es wichtig, mit der TAB-TASTE (
tab) die Codeblocksymbole unter dem Schlüsselwort auszurichten, zu dem sie gehören. Beachten Sie als Beispiel die Codezeile, die mit dem Schlüsselwortifbeginnt. Unter dieser Zeile befindet sich das{-Symbol. Durch diese Anordnung lässt sich einfach erkennen, dass die{zurif-Anweisung gehört. Außerdem ist das letzte}-Symbol ebenfalls mit derif-Anweisung bündig. Die Kombination aus Ausrichtung und Einzug macht es einfacher zu verstehen, wo der Codeblock beginnt und endet.Die Codezeilen in diesem Codeblock sind eingezogen, wodurch zu erkennen ist, dass sie zu diesem Codeblock gehören.
Sie folgen dabei dem gleichen Muster für die innere
if-Anweisung, für dieelse-Anweisung und für den Code in diesen Codeblöcken.
Nicht jeder stimmt mit diesem Stilleitfaden für das Einschließen von Leerraum überein. Sie sollten diesen Leitfaden jedoch als Ausgangspunkt beim Schreiben von Code in Betracht ziehen. In Zukunft können Sie selbst die Entscheidung treffen, wann Sie von diesem Leitfaden abweichen.
Zusammenfassung
Die wichtigsten Ergebnisse dieser Übung:
- Verwenden Sie Leerraum mit Bedacht, um die Lesbarkeit Ihres Codes zu verbessern.
- Verwenden Sie Zeilenvorschübe, um leere Zeilen zu erstellen, mit denen Codeabschnitte voneinander getrennt werden. Ein Abschnitt enthält Codezeilen, die ähnlich sind oder zusammen eine Aufgabe ausführen.
- Verwenden Sie Zeilenvorschübe, um Codeblocksymbole voneinander zu trennen, sodass diese in einer eigenen Codezeile stehen.
- Verwenden Sie die TAB-TASTE (
tab), um einen Codeblock für das Schlüsselwort auszurichten, zu dem er gehört. - Ordnen Sie Code in einem Codeblock eingezogen an, um die Zugehörigkeit zu verdeutlichen.