The Clojure Style Guide

Clojure 风格指南

榜样很重要。
– 《机械战警》 Alex J. Murphy 警官

这份 Clojure 旨在为 Clojure 程序员编写简洁易懂,易于维护的高质量 Clojure 代码提供一份最佳实践。无论多么好的风格或指南,但是过于理想化的结果导致大家拒绝使用或者可能根本没人用,毫无意义。

本指南分为几个小节,每一小节由几条相关的规则构成。我尽力在每条规则后面说明理由(如果省略了说明,那是因为其理由显而易见)。

这些规则不是我凭空想象出来的 — 它们中的绝大部分来自我多年以来作为职业软件工程师的经验,来自 Clojure 社区成员的反馈和建议,以及许多备受推崇的 Clojure 编程资源,例如 "Clojure Programming""The Joy of Clojure"

这份指南还处于不断完善中,可能有一些部分是缺失的,可能有一些是不完善的,可能有一些规则缺少例子,可能有一些规例没有用例子阐述的足够清晰。要记住的是,随着时间的推移这些问题都会被解决。

请注意,Clojure 开发者社区同样维护了一份 coding standards for libraries 列表。

组织

所有风格都又丑又难读,自己的除外。几乎人人都这样想。把 “自己的除外” 拿掉,
他们或许是对的...
– Jerry Coffin(论缩排)

这个规则的一个例外是,将相关的 def 放在一起。

;; good
(def min-rows 10)
(def max-rows 20)
(def min-cols 15)
(def max-cols 30)

语法

如果反向谓词作为一个独立函数存在时(例如,<code>event?</code> 和 <code>odd?</code>),
这条规则可以忽略。

命名

程序设计的真正难题是替事物命名以及缓存失效。

– Phil Karlton

    在宏中:
    * `expr` - 表达式
    * `body` - 宏定义
    * `binding` - 宏绑定矢量

集合

一百个函数去操作一个数据结构要优于十个函数去操作十个数据结构。
– Alan J. Perlis

可变性

Refs (引用)

Agents (代理)

Atoms (原子)

字符串

异常

注释

良好的代码自身就是最佳的文档。当你要添加一个注释时, 扪心自问,“如何改善代码让它不需要注释?” 改善代码,再写相应文档使之更清楚。
– Steve McConnell

注解

经验

工具

下面是一些 Clojure 社区创建的工具,为你写出地道的 Clojure 助一臂之力。

测试

[link]

贡献

这份指南中的任何规则都不是一成不变的。 我渴望和任何一位对 Clojure 风格指南的伙伴一起工作, 最终创造一份对整个 Clojure 社区都大有裨益的资源。

欢迎发起讨论或提交一个带有改进性质的更新请求。在此提前感谢你的帮助!

你也可以通过 gittip 对此项目提供财务方面的支持。

Support via Gittip

授权

Creative Commons License 本指南基于 Creative Commons Attribution 3.0 Unported License 授权许可。

口耳相传

一份社区驱动的风格指南,如果没多少人知道, 对一个社区来说就没有多少用处。微博转发这份指南, 分享给你的朋友或同事。我们得到的每个评价、建议或意见都可以让这份指南变得更好一点。 而我们想要拥有最好的指南,不是吗?

共勉之,
Bozhidar

原文地址

https://github.com/geekerzp/clojure-style-guide/blob/master/README-zhCN.md

2019-02-14 00:44

留言