每个缩排层级使用两个空格。不要使用制表符.
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 | # 差 |