Ruby编程中的语法使用风格推荐

2019-09-25 09:40:00王冬梅

    这是一个相当流行的 ruby 方言,有时被称为 safe assignment in condition。

  

 # bad (+ a warning)
  if v = array.grep(/foo/)
   do_something(v)
   ...
  end

  # good (MRI would still complain, but RuboCop won't)
  if (v = array.grep(/foo/))
   do_something(v)
   ...
  end

  # good
  v = array.grep(/foo/)
  if v
   do_something(v)
   ...
  end

    在任何可以的地方使用快捷的 self assignment 操作符。

   

 # bad
  x = x + y
  x = x * y
  x = x**y
  x = x / y
  x = x || y
  x = x && y

  # good
  x += y
  x *= y
  x **= y
  x /= y
  x ||= y
  x &&= y

    只有在变量没有被初始化的时候使用 ||= 来初始化变量。

  # set name to Vozhidar, only if it's nil or false
  name ||= 'Bozhidar'

    不要使用||=来初始化布尔变量。(想想如果当前值为false的时候会发生什么。)

  # bad - would set enabled to true even if it was false
  enable ||= true

  # good
  enabled = true if enabled.nil?

    使用 &&= 来预处理变量不确定是否存在的变量。使用 &&= 仅仅在(变量)存在的时候
    才会改变值,除去了使用 if 来检查它的存在性。

  # bad
  if something
   something = something.downcase
  end

  # bad
  something = something ? nil : something.downcase

  # ok
  something = something.downcase if something

  # good
  something = something && something.downcase

  # better
  something &&= something.downcase

    避免全等(case equality)=== 操作符的使用。从名称可知,这是 case 表达式的隐式使用并且在 case 语句外的场合使用会产生难以理解的代码。

   

 # bad
  Array === something
  (1..100) === 7
  /something/ === some_string

  # good
  something.is_a?(Array)
  (1..100).include?(7)
  some_string =~ /something/

    避免使用 Perl 的指定变量风格(比如,$:,$; 等等。)。它们相当神秘,不鼓励在单行代码之外使用它们。
    使用 English 库提供的友好别名。

 

  # bad
  $:.unshift File.dirname(__FILE__)

  # good
  require 'English'
  $LOAD_PATH.unshift File.dirname(__FILE__)

  从来不要在方法名和(参数)开括号之间使用空格。

  # bad
  f (3+2) + 1

  # good
  f(3 + 2) +1

    如果方法的第一个参数以开括号开始,通常使用括号把它们全部括起来。例如f((3 + 2) + 1)。

    通常使用 -w 选项运行 Ruby 解释器,在你忘记上面所诉规则,ruby 将会提示你。

    定义单行块使用新的 lambda 语法。定义多行块中使用 lambda 方法。