【问题标题】:What are Clojure's Naming Conventions?Clojure 的命名约定是什么?
【发布时间】:2011-10-06 06:02:56
【问题描述】:

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

  1. 文件名
  2. 函数(据我了解,函数名称只是用短划线分隔的值)
  3. 变量

【问题讨论】:

    标签: clojure naming-conventions


    【解决方案1】:

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

    他建议使用 ! 来表示副作用,? 表示布尔值, $ 用于昂贵的操作,_ 可减价, * 用于宏;加上其他一些组合。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您可能想看看this non official style guide

        【讨论】:

        【解决方案4】:

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

        到你的具体点:

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

        【讨论】:

        • 感谢您的链接。作为后续,文件名是否也用破折号分隔,即this/is/a/file-parser.clj
        • @tmore - 是的,我相信是的,只要它与命名空间匹配
        • 不,您必须将文件名中的连字符替换为下划线。 (命名空间 a-b/c-d 必须驻留在 a_b/c_d.clj 中。)这是 Clojure 与 Java 正确互操作必须做的名称转换的一部分。
        • Clojure 1.2.1 的一个澄清点:当您import Clojure 记录时,您必须在 在您的 Clojure 代码中 使用下划线来引用它的位置,而不是通常的破折号。见dev.clojure.org/jira/browse/CLJ-432
        • 遗憾的是,上面的链接现在给出了 403
        【解决方案5】:

        即使您没有明确要求,我也会解释一下我所看到的协议命名约定。

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

        我还看到使用“A”而不是“I”,可能代表“抽象”这个词。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-14
        • 2011-08-20
        • 2012-11-09
        • 2022-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多