集合 (Collections)
尽量用
map而不是collect。[link]尽量用
detect而不是find。find
容易和 ActiveRecord 的find搞混 -detect则是明确的说明了
是要操作 Ruby 的集合, 而不是 ActiveRecord 对象。
[link]尽量用
reduce而不是inject。
[link]尽量用
size, 而不是length或者count, 出于性能理由。[link]尽量用数组和 hash 字面量来创建,
而不是用 new。 除非你需要传参数。
[link]# 错误arr = Array.newhash = Hash.new# 正确arr = []hash = {}# 正确, 因为构造函数需要参数x = Hash.new { |h, k| h[k] = {} }
为了可读性倾向于用
Array# join而不是Array# *。
[link]# 错误%w(one two three) * ', '# => 'one, two, three'# 正确%w(one two three).join(', ')# => 'one, two, three'
用 符号(symbols) 而不是 字符串(strings) 作为 hash keys。
[link]# 错误hash = { 'one' => 1, 'two' => 2, 'three' => 3 }# 正确hash = { :one => 1, :two => 2, :three => 3 }
如果可以的话, 用普通的 symbol 而不是字符串 symbol。[link]
# 错误:"symbol"# 正确:symbol
用
Hash# key?而不是Hash# has_key?
用Hash# value?而不是Hash# has_value?.
根据 Matz 的说法, 长一点的那种写法在考虑要废弃掉。
[link# 错误hash.has_key?(:test)hash.has_value?(value)# 正确hash.key?(:test)hash.value?(value)
用多行 hashes 使得代码更可读, 逗号放末尾。
[link]hash = {:protocol => 'https',:only_path => false,:controller => :users,:action => :set_password,:redirect => @redirect_url,:secret => @secret,}
如果是多行数组,用逗号结尾。[link]
# 正确array = [1, 2, 3]# 正确array = ["car","bear","plane","zoo",]
