程式設(shè)計(jì)的真正難題是替事物命名及使緩存失效。
——Phil Karlton
標(biāo)識(shí)符用英語(yǔ)命名。
# 差 - 變量名用非ascii字符
заплата = 1_000
# 差 - 變量名用帶有拉丁文的保加利亞語(yǔ)寫(xiě)成。
zaplata = 1_000
# 好
salary = 1_000
符號(hào)、方法與變量使用蛇底式小寫(xiě)(snake_case)。
# 差
:'some symbol'
:SomeSymbol
:someSymbol
someVar = 5
def someMethod
...
end
def SomeMethod
...
end
# 好
:some_symbol
def some_method
...
end
類(lèi)別與模組使用駝峰式大小寫(xiě)(CamelCase)。(保留類(lèi)似 HTTP、RFC、XML 這種縮寫(xiě)為大寫(xiě)。)
# 差
class Someclass
...
end
class Some_Class
...
end
class SomeXml
...
end
# 好
class SomeClass
...
end
class SomeXML
...
end
文件名用蛇底式小寫(xiě),如?hello_world.rb
。
目錄名用蛇底式小寫(xiě),如?lib/hello_world/hello_world.rb
。
每個(gè)類(lèi)/模塊都在單獨(dú)的文件,文件名用蛇底式小寫(xiě)而不是駝峰式大小寫(xiě)。
其他常數(shù)使用尖叫蛇底式大寫(xiě)(SCREAMING_SNAKE_CASE)。
# 差
SomeConst = 5
# 好
SOME_CONST = 5
判斷式方法的名字(返回布爾值的方法)應(yīng)以問(wèn)號(hào)結(jié)尾。 (例如:?Array#empty?
?)。不返回布爾值的方法不應(yīng)用問(wèn)號(hào)結(jié)尾。
有潛在危險(xiǎn)性的方法,若此危險(xiǎn)方法有安全版本存在時(shí),應(yīng)以安全版本名加上驚嘆號(hào)結(jié)尾(例如:改動(dòng)?self
?或參數(shù)、?exit!
?(不會(huì)向?exit
?那樣運(yùn)行 finalizers), 等等方法)。
如果存在潛在的危險(xiǎn)方法(即修改?self
?或者參數(shù)的方法,不像?exit
?那樣運(yùn)行 finalizers 的?exit!
,等等)的安全版本,那么?危險(xiǎn)?方法的名字應(yīng)該以驚嘆號(hào)結(jié)尾。
# 不好 - 沒(méi)有對(duì)應(yīng)的安全方法
class Person
def update!
end
end
# 好
class Person
def update
end
end
# 好
class Person
def update!
end
def update
end
end
如果可能的話,根據(jù)危險(xiǎn)方法(bang)來(lái)定義對(duì)應(yīng)的安全方法(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
在簡(jiǎn)短區(qū)塊中使用?reduce
?時(shí),把參數(shù)命名為?|a, e|
?(累加器(accumulator
),元素(element
))
在定義二元操作符時(shí),把參數(shù)命名為?other
?(<<
?與?[]
?是這條規(guī)則的例外,因?yàn)樗鼈兊恼Z(yǔ)義不同)。
def +(other)
# body omitted
end
更多建議: