什么是Clojure的命名约定?

tmo*_*ore 52 clojure naming-conventions

谁能解释或指出我在哪里可以找到clojure的命名约定:

  1. 文件名
  2. 函数(据我所知,函数名称只是虚线分隔值)
  3. 变量

mik*_*era 48

您可能希望查看开发人员Wiki上的Clojure库编码标准 - 这可能是我见过的最全面的列表.

针对您的具体要点:

  1. 文件名是小写的,并存储在目录结构中以匹配命名空间,并以.clj结尾,例如"my/special/namespace.clj
  2. 函数是以破折号分隔的小写单词,理想情况下是描述性选择,以便您的代码清晰且自我记录.不要害怕在不同的命名空间中重用好的函数名称(这就是命名空间的用途!).
  3. 变量(我假设你的意思是参数,let-bound变量等)通常也是以破折号分隔的小写单词.由于代码是数据,我认为函数和数据具有相同的命名约定是合适的:-)

  • 不,您必须在文件名中用下划线替换连字符.(命名空间`ab/cd`必须位于`a_b/c_d.clj`中.)这是Clojure要正确处理Java的名称的一部分. (30认同)
  • 谢谢你的链接.作为后续工作,文件名也是分开的,即`this/is/a/file-parser.clj` (2认同)
  • Clojure 1.2.1的一个澄清点:当你"导入"一个Clojure记录时,你必须在你的Clojure代码*中使用下划线*而不是通常的破折号来引用它所在的位置.见http://dev.clojure.org/jira/browse/CLJ-432 (2认同)
  • 遗憾的是上面的链接现在给出了 403 (2认同)

Rob*_*wer 8

Stuart Sierra撰写的一些有趣的命名指南表明:

  • 纯函数应该是描述返回值的名词(age而不是calculate-age)
  • 副作用函数应该是描述动作的动词(create-用于构造和get-检索),保留swap!对可变引用的爆炸变化.
  • 也可以是名词的动词应该被区分为动词短语(send-message而不是message)
  • 强制应该将输出类型命名为没有箭头前缀(connection而不是->connection),除非输入类型必须是explicit(input-type->output-type)
  • 命名空间别名可以节省重复(products/price而不是products/product-price)并防止let绑定中的本地冲突
  • 函数返回函数应该有-fn后缀