命名

最后更新于:2022-04-01 01:18:34

> 程式设计的真正难题是替事物命名及使缓存失效。 > ——Phil Karlton * 标识符用英语命名。 ~~~ # 差 - 变量名用非ascii字符 заплата = 1_000 # 差 - 变量名用带有拉丁文的保加利亚语写成。 zaplata = 1_000 # 好 salary = 1_000 ~~~ * 符号、方法与变量使用蛇底式小写(snake_case)。 ~~~ # 差 :'some symbol' :SomeSymbol :someSymbol someVar = 5 def someMethod ... end def SomeMethod ... end # 好 :some_symbol def some_method ... end ~~~ * 类别与模组使用驼峰式大小写(CamelCase)。(保留类似 HTTP、RFC、XML 这种缩写为大写。) ~~~ # 差 class Someclass ... end class Some_Class ... end class SomeXml ... end # 好 class SomeClass ... end class SomeXML ... end ~~~ * 文件名用蛇底式小写,如 `hello_world.rb`。 * 目录名用蛇底式小写,如 `lib/hello_world/hello_world.rb`。 * 每个类/模块都在单独的文件,文件名用蛇底式小写而不是驼峰式大小写。 * 其他常数使用尖叫蛇底式大写(SCREAMING_SNAKE_CASE)。 ~~~ # 差 SomeConst = 5 # 好 SOME_CONST = 5 ~~~ * 判断式方法的名字(返回布尔值的方法)应以问号结尾。 (例如: `Array#empty?` )。不返回布尔值的方法不应用问号结尾。 * 有潜在**危险性**的方法,若此**危险**方法有安全版本存在时,应以安全版本名加上惊叹号结尾(例如:改动 `self` 或参数、 `exit!` (不会向 `exit` 那样运行 finalizers), 等等方法)。 * 如果存在潜在的**危险**方法(即修改 `self` 或者参数的方法,不像 `exit` 那样运行 finalizers 的 `exit!`,等等)的安全版本,那么 _危险_ 方法的名字应该以惊叹号结尾。 ~~~ # 不好 - 没有对应的安全方法 class Person def update! end end # 好 class Person def update end end # 好 class Person def update! end def update end end ~~~ * 如果可能的话,根据危险方法(bang)来定义对应的安全方法(non-bang)。 ~~~ class Array def flatten_once! res = [] each do |e| [*e].each { |f| res << f } end replace(res) end def flatten_once dup.flatten_once! end end ~~~ * 在简短区块中使用 `reduce` 时,把参数命名为 `|a, e|` (累加器(`accumulator`),元素(`element`)) * 在定义二元操作符时,把参数命名为 `other` (`<<` 与 `[]` 是这条规则的例外,因为它们的语义不同)。 ~~~ def +(other) # body omitted end ~~~
';