什么是Clojure的命名约定?

时间:2011-07-15 15:07:13

标签: clojure naming-conventions

任何人都可以解释或指出我在哪里可以找到clojure的命名约定:

  1. 文件名
  2. 功能(据我所知,功能名称只是短划线值)
  3. 变量

5 个答案:

答案 0 :(得分:47)

您可能希望查看开发者Wiki上的Clojure library coding standards - 这可能是我见过的最全面的列表。

针对您的具体要点:

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

答案 1 :(得分:9)

您可能需要查看this non official style guide

答案 2 :(得分:8)

有一些有趣的guidelines on naming written by Stuart Sierra表明:

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

答案 3 :(得分:1)

注释中记录了一组有趣的命名约定 陶恩索在他的 Encore library

他使用!为副作用建议名称,?为布尔值, 对于代价高昂的操作$_为可撤销, *用于宏;加上其他一些组合。

答案 4 :(得分:0)

即使您没有明确要求,我也会解释我在协议命名约定中看到的内容。

通常,名称以大写“I”开头,然后其余为驼峰大小写,其中每个单词的首字母大写,其余为小写。例如,我想为火箭船定义一个协议,我使用的名称是IRocketShip

我也看过'A'而不是'I',可能代表'abstract'这个词。