2012-05-24 9 views
11

Wie ich sehe, hat clojure mehr Zeichen für Variablennamen als c/C++/java. Zum Beispiel:Wie lautet die übliche Namensregel in Clojure?

Funktionen enden mit '?' geben normalerweise einen Booleschen Wert zurück, sie sind Prädikat.

Es gibt auch Variablen, die mit '-' beginnen oder mit '!' Enden.

Ich denke, das sind alle Clojure-Stil-Namen. Also, was ist die übliche Namensregel in clojure? Gibt es für Clojure-Programmierer etwas gemeinsam?

+0

Mögliches Duplikat einer 2011 Frage: http://StackOverflow.com/Questions/6709131/what-are-clojures-naming-conventions –

Antwort

19

Es lohnt sich auf Clojure sucht Library Coding Standards, die ich denke, sind wahrscheinlich immer noch die beste Referenz auf Clojure Codierung Stil.

Die wichtigsten Konventionen Funktion Namensgebung zu sein scheinen:

  • Verwenden Kleinfunktionsnamen: frobnicate
  • Mehrere Wortnamen Bindestriche als Trennzeichen verwenden: frobnicate-with-extra-fizz
  • Verwenden von Namespaces, damit Sie gut wiederverwenden Namen bei Bedarf: my.special.collection/concat
  • Verwenden Sie ?, um ein Prädikat anzugeben, das true oder false zurückgibt: sequential?
  • Verwenden !, um eine Funktion mit Nebenwirkungen zu zeigen, die nicht Transaktion sicher ist, zB: set!

Für lokale Variablen die folgenden sind häufig:

  • f, g, h - Funktionen
  • n - Ganzzahl, die eine Größe oder Zählung darstellt
  • index, i - ganzzahliger Index
  • x, y - Zahlen
  • s - String-Eingang
  • coll - eine Sammlung
  • pred - ein Prädikat Schließung
  • & more - variadische Eingang
+1

Ich habe manchmal einige Funktionen mit einem * am Ende, wie foo * gesehen. Was bedeutet das? – DanLebrero

+2

Das ist eine gute Antwort, aber ich habe einen Nitpick. Ich denke '' 'sollte nur für Funktionen verwendet werden, die tatsächlich' true' oder 'false' zurückgeben. Siehe das verknüpfte Dokument: "Verwenden"? Suffix für Prädikate. N.B. - Prädikate zurück booleans ". Ein Beispiel dafür im Kern ist ['einige'] (http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/some) und ['every?'] (http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/every?). – spacemanaki

+0

@dAni: Ich habe in Sachen über 'foo *' (und '* foo *' für gutes Maß) bearbeitet. – thedayturns