Klammern in eigener Zeile schließen inakzeptabel? [geschlossen]


8

Ich benutze Emacs seit einigen Jahren, bin aber erst kürzlich über die Codierungsstandards gestolpert . Dort heißt es:

Machen Sie es sich nicht zur Gewohnheit, Linien in engen Klammern zu setzen. Lisp-Programmierer finden das beunruhigend.

Dies ist genau die Gewohnheit, die ich aufgebaut habe, da ich finde, dass der Code leichter zu lesen ist. Ich sehe gemischte Stile in den mit Emacs gelieferten Paketen. Meine Frage ist, ob diese Verwirrung den meisten Elisp-Programmierern gemeinsam ist.

Bearbeiten: Wenn ich meinen Code betrachte, folge ich dem nicht genau. Dann wäre der Code ziemlich schrecklich. Es ist meistens defun, lass, wenn und so weiter. Aber es scheint gegen den Strich zu sein, also sollte ich wahrscheinlich damit aufhören. Prost auf die Eingabe.

(Borderline Opinion Based, aber es scheint mit dem Schließen von geschweiften Klammern in C ++ zu tun zu haben, wo es nicht umstritten sein sollte, anzugeben, dass sie im Allgemeinen auf ihren eigenen Linien stehen sollten).


4
Nicht inakzeptabel, nur wirklich nervig :)
abo-abo

4
Stellen Sie es sich wie eine Leerzeichen-Sprache vor, außer dass Klammern mögliche Mehrdeutigkeiten beseitigen - in gut formatiertem Lisp sollten Sie es lesen können, ohne auf die Klammern zu
schauen

1
Ich bin gespannt, welche mit Emacs gelieferten Pakete dies nicht einhalten.
Malabarba

3
@ Malabarba Eine Suche mit agden Lisp-Quellen gibt mir 3414 Kandidaten für den regulären Ausdruck ^\s*?\)$, die 468 Dateien umfassen, die zu etwa 200 Paketen gehören?
Wasamasa

1
@wasamasa Gute Idee. Ich habe das durch ein paar weitere Pipes gesteckt und .elfestgestellt , dass 90% der Dateien weniger als 10 Instanzen davon haben. Das heißt, diese Dateien übernehmen es nicht als Stil, sondern verwenden es nur an einigen geeigneten Stellen (um wirklich lange Funktionen zu erledigen ).
Malabarba

Antworten:


6

Nun, eine kurze Antwort lautet "es gibt keine Notwendigkeit". Da Emacs die S-Ausdrücke von LISP analysieren kann, weiß es genau, wo sich die Formulare ausgleichen, und kann den Code korrekt erneut einrücken. In diesem Fall verschwendet das Verschieben einer Klammer in die eigene Zeile einfach eine zusätzliche Zeile Platz und ist gleichzeitig nicht idomatisch und erschüttert andere LISP-Programmierer, die an den kanonischen Stil gewöhnt sind. Wie in den Kommentaren erwähnt, schließt dies nicht aus, dass Sie vertikale Leerzeichen verwenden, um Codestücke visuell zu trennen.

In der Praxis verwenden viele Emacs, die LISP-Programmierer verwenden, eine Vielzahl zusätzlicher visueller Hinweise wie den Show-Paren-Modus , die beim Navigieren durch ein dichtes Nest aus schließenden Klammern helfen. Ingenieure, die Module wie paredit und smart-parens in ihren Bearbeitungszyklus aufgenommen haben, sind mit dem AST eins geworden und manipulieren seine Struktur einfach direkt so, dass Ausdrücke immer ausgewogen und vollständig sind.


Natürlich habe ich übereinstimmende Klammern und so weiter, aber ich denke, der vertikale Raum hat einen Platz in allen Codes, und das ist es, was diese nicht empfohlene Gewohnheit mit sich bringt. Aber ein gemeinsamer Stil ist immer gut, für alles Öffentliche würde ich den empfohlenen Weg verwenden. Aber um es umzudrehen, welchen Wert bringt die Masse der Klammern am Ende :).
Sinnvoller Benutzername

4
Sie können jederzeit vertikalen Raum hinzufügen. Nichts sagt, dass Sie jede Zeile bis zur nächsten glätten müssen. Manchmal ist vertikaler Raum nützlich; manchmal ist es nicht. Wenn Sie die Klammern am Ende der Zeile einfügen, können Sie auswählen, wann vertikaler Raum hinzugefügt werden soll und wann nicht. Parens auf einer neuen Linie erzwingen vertikalen Raum und vieles davon.
zck

@zck: Ich habe die Antwort aktualisiert, um Ihren Punkt zu erwähnen. Vielen Dank.
stsquad

Guter Punkt. Ich habe begonnen, meinen Code so zu ändern, dass er dem Standard entspricht. Kein großer Unterschied, sollte sich also schnell daran gewöhnen. Ich schätze, ich hatte nur das Gefühl, dass die Klammern für etwas verwendet werden sollten, während die meisten anderen sie so ziemlich zu ignorieren scheinen.
Sinnvoller Benutzername

6

Riastradhs Lisp Style Guide geht etwas genauer auf dieses spezielle Thema ein. Während er generell davon abhält, schließende Klammern in die eigene Zeile zu setzen, erkennt er mehrere Ausnahmen, wie z. B. eine vorherige Zeile, in der ein schließender Paren auskommentiert wird, und sehr lange Listen, die sonst beim Hinzufügen neuer Elemente am Anfang oder Ende ständig Unterschiede durcheinander bringen würden .


1

Ich schreibe jetzt seit ungefähr 2-3 Jahren Elisp. Zuerst habe ich die Sache mit den hängenden Eltern gemacht, aber seit ich die von Ihnen erwähnte Regel entdeckt habe, habe ich selbst damit begonnen. Und ich kann jetzt sagen, dass es viel einfacher ist, den Code zu lesen, wenn er richtig gestaltet ist.

Ich habe hier sogar einen LISP-Prettifizierungscode geschrieben: lispy-tab .

Und natürlich habe ich die show-paren-modeganze Zeit auf.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.