每个缩排层级使用两个空格。不要使用制表符.
1 | # 差 - 四个空格 |
范围的字面量语法中,不要添加任何空格。
1 | # 差 |
使用 _
语法改善大数的数值字面量的可读性。
1 | # 差 - 有几个零? |
使用 def
定义方法时,如果有参数则使用括号,如果无参数则省略括号。
1 | # 差 |
除非必要,否则避免在并行赋值时使用单字符的 _
变量。优先考虑前缀形式的下划线变量,而不是直接使用 _
,因为前者可以提供一定的语义信息。但当赋值语句左侧出现带 *
操作符的变量时,使用 _
也是可以接受的。
1 | foo = 'one,two,three,four,five' |
永远不要使用 for
, 除非你很清楚为什么。大部分情况下,你应该使用迭代器。for
是由 each
实现的,所以你绕弯了。另外,for
没有引入一个新的作用域 (each
有),因此在它内部定义的变量在外部仍是可见的。
1 | arr = [1, 2, 3] |
倾向使用三元操作符(?:
)而不是 if/then/else/end
结构。前者更为常见且简练。
1 | # 差 |
永远不要使用 if x; ...
。使用三元操作符来替代。
1 | # 差 |
使用 !
而不是 not
。
1 | # 差 - 因为操作符的优先级,这里必须使用括号 |
永远不要使用 and
与 or
关键字。使用 &&
与 ||
来替代。
1 | # 差 |
对于单行主体,倾向使用 {...}
而不是 do...end
。对于多行主体,避免使用 {...}
。对于“流程控制”或“方法定义”(比如 Rakefile、其他 DSL 构成片段),总是使用 do...end
。避免在链式方法调用中使用 do...end
.
1 | names = %w[Bozhidar Steve Sarah] |
某些人可能会争论在多行链式方法调用时使用 {...}
看起来还可以。但他们应该扪心自问——这样的代码真的可读吗?难道不能把区块内容提取出来放到小巧的方法里吗? #我觉得写成代码块易读。
避免在不需要流程控制的情况下使用 return
。
1 | # 差 |
嗯。。。很魔幻。
通过使用范围或 Comparable#between?
来替代复杂的比较逻辑。
1 | # 差 |
当创建一组元素为单词(没有空格或特殊字符)的数组时,倾向使用 %w
而不是 []
。此规则只适用于数组元素有两个或以上的时候。
1 | # 差 |
倾向使用符号而不是字符串作为哈希键。
1 | # 差 |
倾向使用 Hash#each_key
而不是 Hash#keys.each
,使用 Hash#each_value
而不是 Hash#values.each
。
1 | # 差 |