Anzahl der Klammern in clojure verwalten

8

Ich bin neu in clojure und die Hauptsache, mit der ich mich abmühen muss, ist das Schreiben von lesbarem Code. Ich habe oft Funktionen wie die folgende.

%Vor%

mit vielen Aufbauten der Endhalterungen. Was sind die besten Möglichkeiten, dies zu reduzieren oder so zu formatieren, dass es einfacher ist, fehlende Klammern zu erkennen?

    
Jim Jeffries 10.04.2012, 19:37
quelle

8 Antworten

7

Ein Editor, der die Klammern färbt, ist in diesem Fall sehr hilfreich. Zum Beispiel, was Ihr Code in meinem vim-Editor aussieht (mit vimclojure ):

Da du nicht gesagt hast, welchen Editor du verwendest, musst du die Rainbow-Coloring-Funktion für deinen Editor entsprechend finden.

    
Jeff 10.04.2012, 19:48
quelle
15

Wenn Sie den paredit -Modus von Emacs verwenden (der auch in einigen anderen Editoren emuliert wird), bedeutet das, dass Sie - außer Sie kopieren / einfügen mit Maus- / erzwungenen unstrukturierten Auswahlen - mit übereinstimmenden Klammern / Klammern / Klammern und verwandten Einrückungen umgehen ohne zu zählen benötigt.

Emacs mit Ссылка (sehr empfehlenswert!) hat standardmäßig clajure aktiviert. Andernfalls siehe Ссылка

    
Joost Diepenmaat 10.04.2012 20:17
quelle
13

Zusätzlich zu einem Editor, der Klammervergleich unterstützt, können Sie auch versuchen, Ihren Code weniger verschachtelt zu machen. Ich glaube, dass Ihre Funktion wie folgt umgeschrieben werden könnte:

%Vor%

Natürlich ist das eher eine Kunst (Handwerk) als eine Wissenschaft, aber einige Hinweise (in zufälliger Reihenfolge):

  • Probleme bei 4clojure und deren Lösungen von Top-Usern (sichtbar nach der Lösung bestimmter Probleme) - Ich glaube, dass Chris Houser da unter dem Griff ist %Code%
  • Apropos CH - "Die Freude an Clojure" ist eine sehr nützliche Lektüre
  • Das Durchsuchen von Dokumenten auf clojure.core - dort gibt es viele nützliche Funktionen
  • chouser und -> threading-Makros sind sehr nützlich zum Reduzieren von verschachteltem Code
  • stackoverflow - einige der hellsten und hilfsbereitesten Menschen der Welt beantworten dort Fragen; -)
Rafał Dowgird 10.04.2012 20:20
quelle
3

Ich kann nicht stark genug wiedergeben, wie wertvoll es ist, paredit oder ein ähnliches Feature in einem anderen Editor zu verwenden. Es befreit dich von der Sorge um Parens - sie passen sich immer perfekt an, und langweilige, fehleranfällige Bearbeitungsaufgaben wie " (foo (bar x) y) in (foo (bar x y)) ändern" werden zu einem einzigen Tastendruck. Für eine Woche oder so frustriert Sie parated unglaublich, da es Sie daran hindert, Dinge manuell zu erledigen, aber sobald Sie die automatischen Methoden kennen, mit parens umzugehen, werden Sie niemals in der Lage sein, zurück zu gehen.

Ich habe kürzlich gehört, dass jemand sagt, und ich denke, es ist ungefähr richtig, dass das Schreiben von Lispeln ohne Parität wie das Schreiben von Java ohne Auto-Complete (möglich, aber nicht sehr angenehm) ist.

    
amalloy 10.04.2012 20:37
quelle
3
%Vor%

das ist lesbarer, denke ich. Beachten Sie Folgendes:

  • sollten Sie Recurve verwenden, wenn Tail recursing
  • ist
  • Sie sollten mit seq testen - siehe Ссылка
  • repeat kann zählen
  • concat wird nil weglassen, was das Wiederholen von sich selbst verhindert
  • Sie müssen nicht für jede offene Zeile eine neue Zeile erstellen

wie für die Parens - Ihr Editor / Ide sollte sich darum kümmern. Ich tippe hier blind, also vergib mir, wenn es falsch ist ...

[Rafał Dowgirds Code ist kürzer; Ich lerne auch ...]

[aktualisiert:] nachdem ich den "faulen" Link erneut gelesen habe, denke ich, dass ich faule Sequenzen falsch behandelt habe,

    
andrew cooke 10.04.2012 20:28
quelle
2

Ich bin mir nicht sicher, ob Sie alle Klammern vermeiden können. Was ich jedoch Lispers gesehen habe, ist ein Editor mit parent matching / highlight und vielleicht sogar Rainbow Klammern: Ссылка

Ehrlich gesagt, das sind die Features, die auch für Nicht-Lisp-Editoren nützlich wären:)

    
oblio 10.04.2012 19:44
quelle
1

Verwenden Sie immer 100% recycelte, runde Klammern, die aus mindestens 75% Post-Consumer-Materialien bestehen; dann musst du dich nicht so schlecht fühlen, wenn du so viele verwendest.

    
Kaz 10.04.2012 22:36
quelle
1

Formatieren Sie es wie Sie möchten. Es ist Aufgabe des Redakteurs, den Code in dem vom Leser bevorzugten Stil anzuzeigen. Ich mag das C-style hierarchische baumförmige Format mit einzelnen Klammern auf ihren eigenen Zeilen (alle LISPers kochen vor Wut: -)))))))))))))

Aber ich benutze manchmal diesen Stil:

%Vor%

Dies ist eine Aktualisierung des traditionellen Stils, in dem eckige Klammern stehen (log2 branch-level)

Der Grund, warum ich den Raum mag, ist, dass meine Sehkraft schlecht ist und ich einfach keinen dichten Text lesen kann. Also zu den wütenden LISPern, die mir vorschreiben, Dinge auf die traditionelle Weise zu tun, sage ich, nun, jeder hat seinen eigenen Weg, entspannen Sie sich, es ist in Ordnung.

Ich kann nicht darauf warten, dass jemand in Clojure einen anständigen Editor schreibt, der kein Texteditor ist, sondern ein -Expressions-Editor , und das Problem der Formatierung verschwindet. Ich schreibe selbst, aber es braucht Zeit. Die Idee besteht darin, Ausdrücke zu bearbeiten, indem Funktionen auf sie angewendet werden, und ich navigiere den Code mit einem Zipper, Ausdruck für Ausdruck, nicht mit Wörtern oder Zeichen oder Linien. Der Code wird durch die gewünschte Anzeigefunktion dargestellt.

** Ja, ich weiß, dass es Emacs / Parait gibt, aber ich habe Emacs probiert und es hat mir nicht leid getan.

    
Hendekagon 11.04.2012 00:31
quelle