• 符号、方法、变量使用蛇底式小写()。
    [link]

    1. # 差
    2. :'some symbol'
    3. :SomeSymbol
    4. :someSymbol
    5. someVar = 5
    6. var_10 = 10
    7. def someMethod
    8. ...
    9. end
    10. def SomeMethod
    11. ...
    12. end
    13. # 好
    14. :some_symbol
    15. some_var = 5
    16. var10 = 10
    17. def some_method
    18. ...
    19. end

  • 给符号、方法、变量命名时,避免分隔字母与数字。
    [link]

    1. # 差
    2. :some_sym_1
    3. some_var_1 = 1
    4. def some_method_1
    5. # 做一些事情
    6. # 好
    7. some_var1 = 1
    8. def some_method1
    9. # 做一些事情
    10. end

  • 文件名使用蛇底式小写,如 hello_world.rb
    [link]


  • 目录名使用蛇底式小写,如 lib/hello_world/hello_world.rb
    [link]


  • 尽量使一个源文件中只有一个类或模块。文件名就是类名或模块名,但使用蛇底式小写而不是驼峰式大小写。
    [link]

    1. # 差
    2. SomeConst = 5
    3. # 好
    4. SOME_CONST = 5

  • 谓词方法(返回布尔值的方法)的名字应当以问号结尾。(比如 Array#empty?)。不返回布尔值的方法不应以问号结尾。
    [link]


  • 谓词方法的名字应当避免使用 isdoescan 等助动词作为前缀。这些助动词在实际场景中显得冗余,且与标准库的命名习惯(比如 empty?include?)很不一致。
    [link]

    1. # 差
    2. class Person
    3. def is_tall?
    4. true
    5. end
    6. def can_play_basketball?
    7. false
    8. end
    9. def does_like_candy?
    10. true
    11. end
    12. class Person
    13. def tall?
    14. true
    15. end
    16. def basketball_player?
    17. false
    18. end
    19. def likes_candy?
    20. true
    21. end
    22. end

  • 具有潜在危险性的方法,当其存在对应安全版本的方法时,其名字应当以惊叹号结尾。(比如修改 self 或参数值的方法、相对 exit 方法不会在退出时运行 finalizers 执行清理工作的 exit! 方法等)
    [link]

    1. class Array
    2. def flatten_once!
    3. res = []
    4. each do |e|
    5. [*e].each { |f| res << f }
    6. end
    7. replace(res)
    8. end
    9. def flatten_once
    10. dup.flatten_once!
    11. end
    12. end

  • 当定义二元操作符时,将参数命名为 other<<[] 例外,因为其语义与此不同)。
    [link]

    1. def +(other)
    2. end