Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are Clojure's Naming Conventions?

People also ask

What are naming conventions examples?

Good naming examples include: [Project number] - Data Use Agreement - [Title of research project] Approval - Change to employee travel policy - February 2014.

What are variable naming conventions explain?

JavaScript variable names should not start with a numeral (0-9). They must begin with a letter or an underscore character. For example, 123test is an invalid variable name but _123test is a valid one. JavaScript variable names are case-sensitive. For example, Name and name are two different variables.

What is the naming convention for class names?

Class names should be nouns, in mixed case with the first letter of each internal word capitalized. Try to keep your class names simple and descriptive. Use whole words-avoid acronyms and abbreviations (unless the abbreviation is much more widely used than the long form, such as URL or HTML).


You might want to look at the Clojure library coding standards on the developer Wiki - this is probably the most comprehensive list that I've seen.

To your specific points:

  1. File names are lowercase, and stored in a directory structure to match the namespace, and end in .clj e.g. "my/special/namespace.clj
  2. Functions are dash-separated-lowercase-words, ideally descriptively chosen so that your code is clear and self-documenting. Don't be afraid to re-use good function names in different namespaces (that is what namespaces are for!).
  3. Variables (by which I assume you mean parameters, let-bound variables etc.) are also usually dash-separated-lowercase-words. Since code-is-data, I think it is appropriate that functions and data have the same naming convention :-)

You might want to take a look at this non official style guide.


There are some interesting guidelines on naming written by Stuart Sierra which suggest that:

  • pure functions should be nouns describing the return value (age instead of calculate-age)
  • side-effecting functions should be verbs describing the action (create- for constructing and get- for retrieving), reserving the bang swap! changes to mutable references.
  • verbs that can also be nouns should be distinguished as verb phrases (send-message instead of message)
  • coercions should name the output type without an arrow prefix (connection instead of ->connection) except when the input type must be explicit (input-type->output-type)
  • namespace aliases can save on repetition (products/price instead of products/product-price) and prevent local clashes in let bindings
  • functions returning functions should have the -fn suffix

There is an interesting set of naming conventions documented in a comment by Taoensso in his Encore library.

He proposes names using ! for side-effects, ? for booleans, $ for expensive operations, _ as dereffable, * for macros; plus a few other combos.