it-swarm-eu.dev

Wie verwenden Sie Leerzeilen in Ihrem Code?

Es wurden bereits einige Anmerkungen zum Leerraum in der Diskussion über Platzierungen von geschweiften Klammern gemacht.

Ich selbst neige dazu, meinen Code mit Leerzeilen zu bestreuen, um Dinge zu trennen, die in "logischen" Gruppen zusammenpassen, und hoffentlich der nächsten Person das Lesen des soeben erstellten Codes zu erleichtern.

Tatsächlich würde ich sagen, dass ich meinen Code so strukturiere, wie ich ihn schreibe: Ich mache Absätze, nicht länger als ein paar Zeilen (definitiv kürzer als 10), und versuche, jeden Absatz in sich geschlossen zu machen.

Zum Beispiel:

  • in einer Klasse werde ich Methoden gruppieren, die zusammenpassen, während ich sie durch eine Leerzeile von der nächsten Gruppe trenne.
  • wenn ich einen Kommentar schreiben muss, setze ich normalerweise eine leere Zeile vor den Kommentar
  • in einer Methode mache ich einen Absatz pro Schritt des Prozesses

Alles in allem habe ich selten mehr als 4/5 Zeilen in Gruppen, was einen sehr spärlichen Code bedeutet.

Ich betrachte all diesen Leerraum nicht als Verschwendung, weil ich ihn tatsächlich zur Strukturierung des Codes verwende (da ich tatsächlich die Einrückung verwende), und daher halte ich es für den Bildschirmbedarf, den es benötigt.

Zum Beispiel:

for (int i = 0; i < 10; ++i)
{
    if (i % 3 == 0) continue;

    array[i] += 2;
}

Ich bin der Meinung, dass die beiden Aussagen eindeutig unterschiedliche Ziele haben und daher eine Trennung verdienen, um dies deutlich zu machen.

Wie verwenden Sie Leerzeilen im Code (oder nicht)?

31
Matthieu M.

Immer

Leerzeichen sind entscheidend, um lesbaren Code zu bereinigen. Eine leere Zeile (oder zwei) helfen dabei, logische Codeblöcke visuell zu trennen.

Zum Beispiel aus Steve McConnells Code Complete, Second Edition Kapitel über Layout und Stil:

Die Probanden erzielten bei einem Verständnistest 20 bis 30 Prozent mehr Punkte, wenn Programme ein Einrückungsschema mit zwei bis vier Leerzeichen hatten, als wenn Programme überhaupt keine Einrückung hatten. Dieselbe Studie ergab, dass es wichtig ist, die logische Struktur eines Programms weder zu unterschätzen noch zu überbetonen. Die niedrigsten Verständniswerte wurden bei Programmen erzielt, die überhaupt nicht eingerückt waren. Die zweitniedrigsten Werte wurden bei Programmen erzielt, bei denen Einrückungen mit sechs Leerzeichen verwendet wurden. Die Studie kam zu dem Schluss, dass die Einrückung mit zwei bis vier Leerzeichen optimal war. Interessanterweise waren viele Probanden des Experiments der Ansicht, dass die Einrückung mit sechs Leerzeichen einfacher zu verwenden war als die kleineren Einrückungen, obwohl ihre Punktzahlen niedriger waren. Dies liegt wahrscheinlich daran, dass sechs Leerzeichen angenehm aussehen. Unabhängig davon, wie hübsch es aussieht, ist die Einrückung mit sechs Leerzeichen weniger lesbar. Dies ist ein Beispiel für eine Kollision zwischen Ästhetik und Lesbarkeit.

87
Josh K

Ja zur Klarheit.

Genau wie ich es in dieser Antwort getan habe.

21
user2567

Ich tue es, aber ich stelle sicher, dass ich es dokumentiere, indem ich es setze

(This line intentionally left blank.)

an der Leitung

13
Don

Ja, aber ich missbrauche es nicht.

Ich habe Code gesehen, bei dem jede Codezeile innerhalb einer Methode durch eine Leerzeile getrennt ist, und zwei Leerzeilen werden verwendet, wenn eine logische Trennung auftritt. Das macht es meiner Meinung nach nur noch weniger lesbar. Ich habe auch Leerzeichen gesehen, mit denen verrückte Ausrichtungen vorgenommen wurden, wie zum Beispiel:

//Prot.   Return type                    Name                 Arg1        Arg2
//=====   ============================== ==================== =========== ========

private   int                            AMethodWithALongName(string s,   object o)
{
    ...
}

private   IDictionary<MyLongObject, int> SomethingCrazy      (string s)
{
    ...
}

protected void                           Foo                 (string str, object o)
{
    ...
}

Der gleiche Missbrauch von horizontalen Leerzeichen kann auf vertikale Leerzeichen angewendet werden. Verwenden Sie es wie jedes andere Werkzeug mit Bedacht.

12
Allon Guralnek

Ich bin alles dafür, Code so klar wie möglich zu machen, und Leerzeichen sind oft ein nützliches Werkzeug für dieses Unterfangen. Aber vergessen wir nicht das Refactoring:

  • in einer Klasse werde ich Methoden gruppieren, die zusammenpassen, während ich sie durch eine Leerzeile von der nächsten Gruppe trenne.

Da Sie mehrere verwandte Mitglieder haben, sind diese Kandidaten für eine neue Klasse.

  • wenn ich einen Kommentar schreiben muss, setze ich normalerweise eine leere Zeile vor den Kommentar

Wenn der Code unklar genug ist, um einen Kommentar zu wünschen, frage ich, ob ich ihn umgestalten kann, um den Code klar genug zu machen, damit der Kommentar nicht benötigt wird.

  • in einer Methode mache ich einen Absatz pro Schritt des Prozesses

Warum nicht eine Methode für jeden "Absatz" erstellen?

Wenn Sie am Ende eine Reihe von Methoden in Ihrer Klasse haben, lesen Sie meinen Hinweis oben zum Extrahieren einer neuen Klasse.

5
Jay Bazuzi

Ja. Dies erleichtert das visuelle Scannen einer Datei. Unter anderem wird klarer, zu welcher Zeile ein Kommentar gehört.

Some code here
// Which line does this comment go with?
More code here

// It's pretty clear which line this comment goes with
More code here

Still more code here
5
Nathan Long

Ich werde oft dafür kritisiert, dass ich meinen Code so geschrieben habe. Ich verstehe nicht, warum jemand es nicht so machen würde.

Lesbarkeit ist so wichtig, wenn Sie nach längerer Zeit zu einem Projekt zurückkehren und ich ein Sprichwort gehört habe: "Schreiben Sie immer Code, wenn der nächste, der ihn liest, ein Psychopath ist, der Ihren Standort kennt.".

5

Ich schreibe nicht immer Software, aber wenn ich das tue, verwende ich aus Gründen der Klarheit leere Zeilen.

5
Trinidad

Ich verwende Leerzeilen sparsam und konsequent, und konsequent ist wichtiger als sparsam. Jedoch:

  • Wenn jede Codezeile durch eine Leerzeile von der nächsten getrennt ist, gibt es zu viele Leerzeilen.
  • Wenn es weder einen Reim noch einen Grund gibt, der leicht erkennbar ist, wo Leerzeilen platziert werden, dann sind sie eine Ablenkung und es gibt normalerweise zu viele von ihnen.
  • Wenn eine Funktion so groß ist, dass sie viele Leerzeilen benötigt, ist sie zu groß.
  • Wenn ein Codeblock mehr als eine Leerzeile davor oder danach benötigt, liegt etwas ernsthaft in die Irre.
  • Wenn Sie mehr als zwei Leerzeilen zwischen Funktionen haben, haben Sie wahrscheinlich zu viele Leerzeilen.

Das meiste davon ist nicht schrecklich umstritten; was folgt könnte sein. Ich stelle fest, dass auf die K & R-Notation mit den offenen Klammern am Zeilenende bedrückend oft eine leere Zeile folgt. Ich persönlich mag die Klammern am Ende der Zeile nicht und das Mischen mit einer leeren Zeile nach der Klammer macht einen Unsinn in der Notation (IMNSHO). Setzen Sie die offene Klammer in die nächste Zeile, und Sie haben eine meist leere Zeile (und, IMNSHO, besser lesbaren Code). Wenn Sie am Ende der Linie eine K & R-Klammer verwenden müssen, verschwenden Sie die vertikale Platzersparnis nicht durch überflüssige Leerzeilen.

// I don't like this
if (something == anotherthing) {
    print ...
    update ...
}

// I much prefer this
if (something == anotherthing)
{
    print ...
    update ...
}

// I loathe this - not least for its inconsistent spacing
if (something == anotherthing) {

    print ...
    update ...
}

// I loathe this too, for its absurd waste of vertical space
if (something == anotherthing) {

    print ...
    update ...

}
4

Schreiben Sie das, was am besten lesbar und am wenigsten überraschend ist.

function validEmail($addr) {
    $regex = "/.../";   
    return preg_match($regex, $addr);
}

Diese Funktion benötigt keine 12 Zeilen mit Dokumentkommentaren.

Tatsächlich braucht es keine Kommentare.

Oder leere Zeilen.

Sie würden von seiner Essenz ablenken.

3
KevBurnsJr

Innerhalb der Funktion? selten

Wenn ich einen deutlich anderen Block habe, wird auf eine neue Funktion umgestaltet. Wenn sich wenige Fälle nicht lohnen.

Für mich sind Leerzeilen innerhalb der Funktion eine der falschesten "Best Practices".

3
Maniero

Zu einer Zeit streute ich großzügig leere Zeilen in meinen Code. Heutzutage neige ich dazu, sparsamer zu sein. Ich denke, dass dies ein Teil dessen ist, worüber Steve Yegge sprach hier :

Hoffentlich hilft Ihnen die Szene, die ich bisher gemalt habe, zu verstehen, warum Sie manchmal Code betrachten und ihn einfach sofort hassen. Wenn Sie ein n00b sind, werden Sie sich erfahrenen Code ansehen und sagen, es sei undurchdringlicher, undisziplinierter Mist, der von jemandem geschrieben wurde, der nie die Grundlagen des modernen Software-Engineerings gelernt hat. Wenn Sie ein Veteran sind, sehen Sie sich den n00b-Code an und sagen, dass es sich um überkommentierte, dekorative Flusen handelt, die ein Praktikant in einer einzigen Nacht mit starkem Alkoholkonsum hätte schreiben können.

Der Knackpunkt ist die Kompressionstoleranz. Während Sie im Laufe Ihrer Karriere Code schreiben, insbesondere wenn dieser Code sehr unterschiedliche Sprachen und Problembereiche umfasst, steigt Ihre Toleranz für die Codekomprimierung. Es unterscheidet sich nicht vom Fortschritt vom Lesen von Kinderbüchern mit riesigem Text zu immer komplexeren Romanen mit kleinerem Text und größeren Wörtern.

...

Ein Programmierer mit einer hohen Komprimierungstoleranz wird tatsächlich durch einen Bildschirm voller Geschichten behindert. Warum? Denn um eine Codebasis zu verstehen, müssen Sie in der Lage sein, so viel wie möglich davon in Ihren Kopf zu packen. Wenn es sich um einen komplizierten Algorithmus handelt, möchte ein erfahrener Programmierer das Ganze auf dem Bildschirm sehen, was bedeutet, dass die Anzahl der Leerzeilen und Inline-Kommentare reduziert wird - insbesondere Kommentare, die einfach wiederholen, was der Code tut. Dies ist genau das Gegenteil von dem, was ein n00b-Programmierer will. n00bs möchte sich auf jeweils eine Anweisung oder einen Ausdruck konzentrieren und den gesamten Code aus dem Blickfeld verschieben, damit sie sich konzentrieren und laut schreien können.

Ich stimme ihm grundsätzlich zu. Es ist viel besser, den Code zu komprimieren, damit Sie so viel wie möglich auf einem Bildschirm sehen können, als ihn zu viel zu platzieren. Das heißt nicht, dass Sie niemals Leerzeilen verwenden sollten. Es ist nur so, dass ich denke, wenn die Gruppierung, die Sie erstellen möchten, die Lesbarkeit nicht immens erhöht, schadet sie mehr als sie nützt.

2
Jason Baker

Ein emeritierter Professor gab zwei große Ratschläge

  1. Whitespace ist kostenlos
  2. Verwenden Sie nicht die Heftklammern, die wieder durch die Vorderseite des Papiers ragen, sonst werde ich Sie im Stich lassen.
2
Wonko the Sane

oft

Verwenden Sie es für logische Codeblöcke, die ähnlich verarbeitet werden. Sobald Sie einen Kommentar hinzugefügt haben, um zu zeigen, dass Sie einen anderen Schritt ausführen, ist es Zeit, die Methode zu extrahieren.

Good Whitespace

{
    int x = computeX();
    x += ADJUSTMENT_FACTOR_X;

    int y = computeY();
    y += ADJUSTMENT_FACTORY_Y;

    setPosition(x, y);
}

Bad Whitespace

{
    //Open a connection
    String serverAddress = lookupAddress();
    Connection connection = openConnection(serverAddress);
    connection.login(user, password);


    //Go get stuff from the server
    item1 = connection.get(1);
    item2 = connection.get(2);

    //Close connection
    connection.close();

    //log data
    log(item1);
    log(item2);

    //Update client
    gui.updateView(item1, item2);        
}    

vs.

{
    Connection connection = openConnection();
    updateData(connection);
    closeConnection(connection);
    logUpdate();
    updateGui();
}

vs.

{
     updateDataFromServer();
     logUpdate();
     updateGui();
}
2
Steve Jackson

Ich verwende nicht nur Leerzeichen, sondern auch Klammern, um die Übersichtlichkeit zu gewährleisten.

Klammern, mit denen ich sage, dass dies möglicherweise Funktionen sein können.

code
{
    code
    code
    code
    code
}
{
    code
    code=code
    code
    code

    code()
    code()
}
2
user2528

Ich stelle mir Leerzeichen genauso vor wie Absätze. Sie gruppieren Linien, die zu einer Idee beitragen.

Wenn Sie eine neue Idee oder eine neue Facette derselben Idee beginnen, beginnen Sie einen neuen Absatz - so.

Im imperativen Code gruppiere ich Aufgaben, die eine zusammenhängende Aufgabe ausführen. Im deklarativen Code gruppiere ich Code, der eine zusammenhängende Aussage einer Idee beschreibt.

Sie haben eindeutig keine Probleme damit, dies auf Englisch zu tun (einige Leute sind schrecklich mit Absätzen), daher sollte es mit ein wenig Übung überhaupt nicht schwierig sein, dieselbe Fähigkeit auf Code anzuwenden.

1
Rei Miyasaka

Leerzeilen sind meiner Meinung nach ein Muss. Ich benutze sie, um verschiedene logische Codeblöcke zu trennen. Macht den Code lesbar. Lesbarer Code ist guter Code;)

Mein idealer Code wäre, dass jeder logische Block durch eine Leerzeile und einen Kommentar über jedem Block mit einer Hauptlogik getrennt wird.

Natürlich finde ich es sehr irritierend, wenn Leute es tun, indem sie überall mehrere Leerzeilen hinzufügen :(

1
Karun AB

Ich verwende nur Leerzeichen innerhalb einer Funktion/Methode, um Deklarationen und Code zu trennen.

Wenn Sie das Bedürfnis haben, einige Zeilen zu haben, um Unterblöcke von Code zu trennen, die eine Logik implementieren, sollten sie sich nur in einer anderen Funktion/privaten Methode befinden. Es liegt an Ihrem Compiler, diesen Overhead nicht zu groß zu machen.

typischerweise im Peusdo-Code:

def function(arg1, argn, ...)
    INITIALIZERS

    CODE
    BLOCK_START
        INITIALIZERS

        CODE
    BLOCK_END
    CODE
end

Wenn ich nutzlose Leerzeichen sehe, schaudere ich normalerweise.

1
haylem

Meine Faustregeln lauten wie folgt:

  1. Wenn ich Probleme beim Lesen des Codes habe, den ich gestern geschrieben habe, muss ich wahrscheinlich ein oder drei Methoden extrahieren.

  2. Wenn meine Klassendefinition zu lang ist, um leicht gelesen zu werden, muss ich wahrscheinlich ein Modul/eine Schnittstelle/ein Objekt extrahieren.

  3. Methodendefinitionen: Fügen Sie eine Zeile hinzu

  4. Modul-/Klassendefinitionen: Fügen Sie zwei Zeilen hinzu

1
philosodad

Ja. Zur besseren Lesbarkeit. Manchmal habe ich sogar leere Zeilen in Code eingefügt, den ich nicht geschrieben habe. Ich finde es einfacher, Code zu verstehen, wenn sie über Leerzeilen logisch gruppiert sind - so wie Sie ihn "schnell lesen" können.

0
javacruiser

Wir sollten Leerzeilen zwischen Codeblöcken verwenden, wie wir es tun, wenn wir einen Brief schreiben.

Zum Beispiel zwischen Funktionen oder innerhalb einer Funktion, wenn wir eine Schleife beenden ...

Die Leute werden dir einen sauberen Code danken, wenn sie ihn warten müssen;)

0
user7242

Wir verwenden das von Microsoft StyleCop empfohlene Whitespacing. Abgesehen von Lesbarkeit und Konsistenz habe ich festgestellt, dass (zusammen mit kleinen Klassengrößen) richtig angelegter Code das Verwalten von Zusammenführungen viel einfacher macht, wenn verschiedene Personen in einem Team zufällig an denselben Bereichen arbeiten.

Ich bin mir nicht sicher, ob es nur meine Vorstellungskraft ist, aber verschiedene Tools scheinen besser zu erkennen, wo gleichwertiger Code beim Zusammenführen beginnt und endet, wenn er ordentlich angeordnet ist. Schön angelegter Code ist eine Freude beim Zusammenführen. Ok, das war eine Lüge - aber zumindest wird der Schmerz auf einem überschaubaren Niveau gehalten.

0
FinnNk

Leerraum ist äußerst wertvoll.

Hier ist der Deal ... Nerds, die komplizierten Code schreiben wie E = MC2 sind großartig darin, ihre Programmierkenntnisse zu demonstrieren.

Lassen Sie uns jetzt sechs Monate weitermachen, und es ist 2:00 Uhr morgens, und das System, das seit sechs Monaten nicht mehr angeschaut wurde, ist genau auf der Linie von E = MC) kaputt gegangen2. Dies ist fast unmöglich zu debuggen ... jeder flippt aus.

Angenommen, der Code sieht eher so aus ...

See Dick
See Jane
See Dick and Jan

Wenn es 2:00 Uhr morgens ist und der Code defekt ist. Ein kurzer Blick zeigt Ihnen, dass Zeile drei hätte sein sollen

See Dick and Jane

Problem gelöst.

Fazit ... verwenden Sie Leerzeichen.

Niemals eine leere Zeile, nicht in der gesamten Datei. Das heißt nicht, dass der Code keine Unterbrechungen enthält:

 code;
 //
 morecode;

Leerzeilen dienen zum Öffnen von Abschnitten des Codes, an denen gearbeitet werden soll. In Ihrem Editor befinden sich einige Hotkeys, mit denen Sie zur vorherigen/nächsten Leerzeile gelangen.

0
Mark

Wie viele andere angegeben haben, erleichtern leere Zeilen das Lesen von Code. Es gibt jedoch einige Sprachen, die diesen Standard durchsetzen. Eine, an die ich auf Anhieb denken kann (nicht so sehr über leere Zeilen, sondern über die richtige Einrückung), ist Python.

0
Skudd

Ich stimme zu, ich benutze Leerzeichen auf die gleiche Weise. Wenn ich jedoch Leerzeichen verwende, um eine Methode in zu viele Teile zu unterteilen, ist dies ein Zeichen dafür, dass ich diesen Code möglicherweise in mehrere Methoden umgestalten muss. Zu viele logische Abschnitte in einer Methode können darauf hinweisen, dass die Methode schwieriger zu testen ist.

0
user7187

Ich benutze sie, um Code in logische Einheiten zu trennen. Ich habe nur sehr wenige Codebeispiele gesehen, bei denen keine Leerzeilen verwendet wurden. Eine Verschleierung ist natürlich ausgeschlossen.

0
kirk.burleson

Die Antwort des Psychopathen ist die beste, aber ich würde sie durch die Annahme ersetzen, dass die nächste Person ein Idiot ist und dass sie davon ausgehen wird, dass Sie es sind, und dass Sie ihnen das Gegenteil beweisen wollen.

Ebenso wichtig für die Lesbarkeit ist die Verwendung von Kommentaren. Ich öffne jede Funktion oder Unterroutine mit einem Kommentarblock und erkläre im Klartext, was es ist, was es tut, was die Argumente sind und was die erwarteten Ergebnisse sind (einschließlich einer Liste von Fehlerbedingungen). Dann gibt es keine Frage, was es beabsichtigt und/oder zu tun beabsichtigt ist. Was damit erreicht wird, kann variieren, aber das ist weiter unten.

Ich denke, viel zu viele Codierer gehen entweder davon aus, dass sie selbst "Reparaturen" am Code durchführen, oder es ist ihnen einfach egal.

0
Peter

Leerzeilen sind wichtig. Wenn Sie jedoch eine ganze leere Zeile in der öffnenden Klammer verschwenden, wird die Menge an Code reduziert, die Sie in einem Bildschirm sehen können. Sollte sein:

for (int i; i < 10; ++i)
{  if (i % 3 == 0) continue;

   array[i] += 2;
}

(Lass mich nicht anfangen, die Klammer '{' in die gleiche Zeile wie das 'für' zu setzen ... das ist Meshuggah).

0
user7195