Verbinden Sie die Klammern

Dec 22 2022
Ein Spiel, das dabei hilft, die Auswirkungen des Platzierungsstils von Klammern in Java zu visualisieren. Ziel ist es, objektiv zu sein. Wir befanden uns in der Anfangsphase der Programmierung eines neuen Projekts mit der Programmiersprache Java.

Ein Spiel, das dabei hilft, die Auswirkungen des Klammerplatzierungsstils in Java zu visualisieren

Foto von Karim MANJRA auf Unsplash

Das Ziel muss objektiv sein

Vor einigen Jahren entwickelte ich einen kreativen Ansatz, um mit einem neuen Team, in dem ich arbeitete, zu helfen, einen Programmierstil festzulegen und zu vereinbaren. Wir befanden uns in der Anfangsphase der Programmierung eines neuen Projekts mit der Programmiersprache Java. Ich habe darum gebeten, dass wir im Voraus als Team einheitliche Richtlinien für den Codestil festlegen und vereinbaren. Ich wusste, dass ich mir ein objektives und kreatives Argument einfallen lassen musste, um eine der umstrittenen Debatten über den Codestil in Java anzugehen – wo die geschweiften Klammern platziert werden sollen.

Kreativität statt Konflikt wählen

Gegen den Strom von „aber alle anderen machen das auch so“ zu schwimmen ist schwer. Noch schwieriger wird es, wenn ein hoch angesehenes Suchunternehmen einem bestimmten Java-Codierungsstil sein Gütesiegel aufdrückt.

Um mir zu helfen, ein objektives Argument für einen bestimmten Stil der Zahnspangenplatzierung zu präsentieren, habe ich ein Spiel entwickelt, das ich „Verbinde die Zahnspangen“ nenne. Ich nahm Code aus zwei von mir erstellten Beispielklassen und fügte sie in ein Powerpoint-Deck ein und zeichnete buchstäblich Linien über den Code, um die Anfangs- und Endklammern zu verbinden. Das Spiel wurde von einem meiner Lieblingsspiele aus der Kindheit inspiriert – „Connect the Dots“.

Das Tolle an „Connect the Dots“ ist, dass die Regeln einfach sind und fast jeder das Spiel in der Schule gespielt hat. „Connect the Braces“ ist ebenfalls sehr einfach. Verbinden Sie einfach die Anfangs- und Endklammern jedes Codebereichs, indem Sie eine Linie zwischen ihnen ziehen. Leicht.

Ich habe das Spiel dem Team vorgestellt, und nachdem ich fertig war, antwortete niemand „aber alle anderen machen es so“. Dies bestätigte, dass mindestens ein Team positiv auf eine kreative Auseinandersetzung über den Platzierungsstil der Zahnspange reagierte.

Automatisierung des Spiels

Ich erzählte meinem Freund Vladimir Zakharov (Vlad) von diesem Spiel und wie es das, was ich zuvor als Branddebatte erlebt hatte, effektiv entschärfte. Ich fragte Vlad, ob er etwas Java-Code schreiben könnte, um das Spiel zu visualisieren, das ich ihm beschrieben hatte. Vlad ist besser im visuellen Programmieren als ich, daher wusste ich, dass er den Code schneller fertigstellen würde als ich.

Vlad hat etwas noch Besseres geschafft, als nur die geschweiften Klammern in einer Quelldatei zu verbinden. Er färbte auch Codeblöcke in grüner Hervorhebung. Dies hat den zusätzlichen Vorteil, dass Leerzeichen optisch hervorgehoben werden.

Die Bilder im folgenden Abschnitt wurden mit Vlads automatisierter Version von „Connect the Braces“ auf aktuellem Code der Eclipse Collections Kata generiert .

Warnung! Spiel weiter!

Die folgenden Bilder sind grafisch. Einige Entwickler können sie als störend empfinden. Bei der Erstellung der folgenden Visuals wurde tatsächlicher Quellcode verwendet. Alle Bilder, die nach dem Scrollen über diesen Text hinaus sichtbar sind, liegen in der alleinigen Verantwortung der Person, die scrollt, nicht des Autors. Alle Früchte oder Haustiere, die während der beiden „Connect the Braces“-Runden beschädigt wurden, waren das Ergebnis von Code-Stil-Entscheidungen, nicht des Autors. Wähle weise. Du wurdest gewarnt!

Runde eins: Obst Enum

Verbinden Sie die Klammern für Fruit Enum aus der Eclipse Collections Kata

Runde Zwei: PetType Enum

Verbinden Sie die geschweiften Klammern für PetType Enum aus der Eclipse Collections Kata

Klarheit statt Unordnung wählen

Ich weiß, dass ich wahrscheinlich gerade in einen reißenden Fluss voller hungriger Piranhas gewatet bin, während ich eine Badehose aus Steak trug. Ich versuche nicht, jeden davon zu überzeugen, dass ein bestimmter Stil der Zahnspangenplatzierung der „einzig wahre Stil“ ist. Es gibt definitiv einen Stil, den ich bevorzuge, wenn ich Code schreibe, und ich muss bei jedem Projekt, an dem ich arbeite, dafür argumentieren. Ich finde, wenn ich meine Argumente mit diesem Spiel darlege, können wir eine gesunde Diskussion über die Bedeutung von Ästhetik, Leerraum und visuellem Tracking für das Scannen und die Lesbarkeit von Code führen.

Ich wähle Klarheit statt Unordnung. Signal über Rauschen. Ich wähle den Stil auf der rechten Seite.

Um meinen Freund Vlad zu zitieren:

Wenn ich Code lese, möchte ich normalerweise entweder das „Was“ sehen, z. Wie macht diese Methode, was sie macht, was passiert, wenn ich diesem Zweig folge, und so weiter. Die visuelle Trennung von Was und Wie hilft mir, den Code zu scannen und meine Aufmerksamkeit auf das zu richten, was gerade wichtig ist.

Der Formatierungsstil mit vertikalen Klammern hat den natürlichen Effekt, das „Was“ vom „Wie“ zu trennen, indem Leerzeichen zwischen Signatur (Klassen- und Methodendefinitionen) und Implementierung (Variablen und Code) eingefügt werden. Die Anfangs- und Endklammern befinden sich immer an der gleichen horizontalen Position, wobei die Variabilität konsequent auf der Tiefe der verschachtelten Gültigkeitsbereiche basiert (z. B. Steueranweisungen wie if, for und while). Sie erwarten, die Basis einer Pyramidenform mit den geschweiften Klammern zu sehen, können also getrost ignorieren, wo sie sich befinden, weil Sie wissen, wo sie sich befinden. Dieser Stil lässt sich einfach in Ihrer IDE automatisch formatieren und in einem CheckStyle-Build durchsetzen.

Ich schwimme seit über 20 Jahren gegen den Strom, indem ich diesen Klammerformatierungsstil in Java verwende. Für Entwickler, die meinetwegen Codebasen lesen oder darin arbeiten müssen, die mit dem Platzierungsstil für vertikale Klammern formatiert sind, habe ich etwas zu sagen.

Gern geschehen!

Eine Ausnahme von der Regel

Ich wähle einen anderen Klammerplatzierungsstil, wenn ich Powerpoint-Folien oder Text für ein Buch mit Java-Code erstelle. Nur in diesen beiden Printmedien wähle ich fast immer den Stil, der weniger Codezeilen bevorzugt. Das Brechen von Code über Seiten hinweg ist unerwünscht. Dies ist ein Kompromiss, der aufgrund von Beschränkungen des verfügbaren vertikalen Raums eingegangen wird. Diese auferlegte Grenze existiert nicht in Code, den Sie in Ihrer IDE oder in einem Browser lesen, der Quellen von einem VCS wie GitHub oder GitLab liest, wo vertikales Scrollen gut funktioniert.

Sieben ineffektive Programmiergewohnheiten vieler Programmierer

Ein paar Monate, nachdem ich das Spiel „Verbinde die Zahnspange“ erstellt hatte, stieß ich auf einen erstaunlichen Vortrag von Kevlin Henney , der ein großartiges Argument für einen bestimmten Stil der Zahnspangenplatzierung präsentiert, neben vielen anderen großartigen Punkten, die er in seinem Vortrag über den Codierungsstil anführt.

Also, was ich Ihnen gerade gesagt habe, falls Sie sich fragen, ja, es gibt eine Möglichkeit, die richtige Art und Weise zu bestimmen, wie Sie Ihre Zahnspange ausrichten … objektiv.

Nichts verraten. Ich empfehle dringend, sich diesen Vortrag anzuschauen. Achtung, dieser Vortrag kann eine konstruktive Unterbrechung Ihres derzeitigen Programmierstils darstellen.

Ein Aufruf zum Handeln im Java-Code-Stil

Wir hinterlassen Milliarden Zeilen Java-Quellcode in Versionskontrollsystemen, die von unserem zukünftigen Selbst und zukünftigen Generationen von Entwicklern gepflegt werden. Der Codestil hat einen direkten und subtilen Einfluss auf die Klarheit und Lesbarkeit. Nicht jeder liest Code mit der gleichen Geschwindigkeit. Möglicherweise gibt es Herausforderungen bei der Barrierefreiheit, die Sie im Team besprechen und berücksichtigen sollten. Jeder sollte in der Lage sein, Code letztendlich durch Lesen zu parsen, unabhängig vom Codestil. Wenn wir weniger Zyklen damit verbringen könnten, das Was vom Wie zu trennen und Code zu finden, nach dem wir suchen, wäre das eine gute Sache.

Hier sind meine Regeln für den Aufbau eines akzeptablen Programmierstils in einem Team.

  1. Diskutieren Sie mit Ihrem Team über Codestilrichtlinien.
  2. Wenden Sie konsistente Richtlinien für den Codestil in Ihrem Projekt an, indem Sie Regeln zur automatischen Formatierung verwenden, die in Ihrer bevorzugten IDE codiert und angepasst sind.
  3. Führen Sie einen automatisierten kontinuierlichen Build aus, der bei inkonsistenten Codestil-Commits (z. B. CheckStyle) unterbrochen wird.
  4. Veröffentlichen Sie Ihre Codestilrichtlinien in Ihrem Projekt-VCS.
  5. Haben Sie den Mut und nehmen Sie sich die Zeit, Ihre Richtlinien für den Codestil weiterzuentwickeln, wenn Sie etwas Neues entdecken oder lernen.

Fühlen Sie sich frei, das Spiel Connect the Braces zu verwenden, um rationale und objektive Diskussionen über den Codestil zu erleichtern, insbesondere wenn es um Diskussionen über den Stil der Platzierung von Klammern in Java geht. Wenn Ihnen dieser Stil gefällt und Sie die Codestileinstellungen sehen möchten, die wir in den letzten sieben Jahren in IntelliJ IDEA for Eclipse Collections verwendet haben, können Sie sie hier in GitHub einchecken .

Genießen!

Ich bin der Schöpfer und ein Committer für das Eclipse Collections OSS-Projekt, das von der Eclipse Foundation verwaltet wird . Eclipse Collections ist offen für Beiträge .