Was ist der Unterschied zwischen ; und ;; in Clojure Code Kommentare?

72

Was ist der Unterschied zwischen ;und ;;beim Starten eines Kommentars in Clojure? Ich sehe, dass mein Texteditor sie unterschiedlich färbt, daher gehe ich davon aus, dass es fiktiv einen Unterschied gibt.

Ich sehe auch, dass Marginalia sie anders behandelt:

; Stripped entirely
;; Appears in text section of marginalia
(defn foobar []
   ; Appears in code section of marginalia output
   ;; Again, appears in code section of marginalia output
   6)
pauldoo
quelle

Antworten:

80

Für den Dolmetscher gibt es keinen Unterschied. Denken Sie an ; ;; ;;;und ;;;;wie unterschiedliche Schriftsebene.

Hier ist meine Konvention für den persönlichen Gebrauch:

;;;; Top-of-file level comments, such as a description of the whole file/module/namespace

;;; Documentation for major code sections (i.e. groups of functions) within the file.

;; Documentation for single functions that extends beyond the doc string (e.g. an explanation of the algorithm within the function)

; In-line comments possibly on a single line, and possibly tailing a line of code
G__
quelle
Ich denke, ich muss dies angesichts der Anzahl der Upvotes als korrekt markieren. Eine externe Referenz wäre nett, aber ich denke, es ist eine ungeschriebene Kultursache. :)
Pauldoo
4
Als Referenz bezeichnet Peter Norvig, der Autor von Good Lisp Programming Style , diese Konvention unter anderem als "Near Standard". stackoverflow.com/a/4531930/603891
orftz
1
Warum dann keine Erwähnung von Single ;im Dokument? clojuredocs.org/clojure.core/comment
matanster
@matanster Bei diesem Link geht es um (Kommentar) nicht; Aber FTR, der zweite Absatz im größten Beispiel, diskutiert tatsächlich einen einzigen; Für kanonische Dokumente auf der; Leser Makro Check clojure.org/reference/reader#macrochars
G__
31

Schauen Sie sich die offizielle Beschreibung der Bedeutung von ;vs ;;in elisp an: Da der Clojure-Eindringkörper im Grunde derselbe ist, werden sie ähnlich behandelt. Verwenden ;Sie diese Option grundsätzlich, wenn Sie einen langen Satz / eine Beschreibung "am Rand" schreiben, der mehrere Zeilen umfasst, aber als eine Einheit betrachtet werden sollte. Ihr Beispiel ist:

(setq base-version-list                 ; there was a base
      (assoc (substring fn 0 start-vn)  ; version to which
             file-version-assoc-list))  ; this looks like
                                        ; a subversion

Der Eindringling wird sicherstellen, dass diese nebeneinander stehen. Wenn Sie stattdessen mehrere nicht verwandte einzeilige Kommentare nebeneinander machen möchten, verwenden Sie ;;.

(let [x 99 ;; as per ticket #425
      y "test"] ;; remember to test this
  (str x y)) ;; TODO actually write this function
Amalloy
quelle
14

Emacs; Wird für Kommentare am Ende der Zeile verwendet und wird auf überraschende Weise eingerückt, wenn dies nicht Ihre Absicht ist. ;; nicht so benutze ich normalerweise ;;

Clojure ist das egal - jede Zeile wird von der ignoriert; zu EOL.

Ich glaube, es gibt eine Tradition in CL, immer mehr zu verwenden; um wichtigere Kommentare / Abschnitte anzuzeigen.

Alex Miller
quelle
7

keine Bedeutung für die Sprache. ;ist ein comment Lesemakro für vielleicht andere Tools, die sie analysieren, aber "innerhalb der Clojure" sind sie gleich.

Arthur Ulfeldt
quelle
6

Aus Clojure-Sicht gibt es keinen Unterschied. Ich finde, das fällt ;;ein bisschen besser auf als ;, aber das ist nur meine Meinung.

Marginalia hingegen behandelt sie anders, da manchmal ein Kommentar im Codeabschnitt verbleiben sollte (z. B. Lizenz) und diese mit gekennzeichnet sind ;. Dies ist eine willkürliche Entscheidung und kann sich in Zukunft ändern.

Nebel
quelle
3
Fogus, beachte Alex Millers Kommentar zu Emacs. Es rückt einzeln ein; Kommentare aber nicht ;; oder ;;; Wenn Sie Emacs nicht selbst verwenden, sollten Sie wissen, was das automatische Einrückungsschema bewirkt, da viele Ihrer Zielbenutzer dies tun.
John Lawrence Aspden
5

In Emacs wird der Lisp-Modus einschließlich des Clojure-Modus ;;mit der Konvention formatiert, am Anfang einer Zeile zu stehen, und wie jede andere Zeile basierend auf dem Kontext eingerückt. ;Es wird erwartet, dass Emacs am Ende einer Zeile verwendet wird, sodass Emacs nicht das tun, was Sie möchten, wenn Sie am Anfang einer Zeile einen Kommentar mit einem Semikolon einfügen, der erwartet, dass er für den aktuellen Kontext in den Einzug verschoben wird.

Beispiel:

(let [foo 1]
  ;; a comment
  foo) ; a comment
rplevy
quelle
1

Ich bin nicht sicher (Clojure nicht verwendet und noch nie davon gehört), aber dieser Thread könnte helfen.

Owen
quelle
Diese Stile sind mit Schriftarten mit variabler Breite völlig inkompatibel. Ich hoffe, die Clojure-Community hat die Sache mit der Spaltenausrichtung nicht für Kommentare übernommen.
Pauldoo