if变量赋值后的声明 - 多么常见?

时间:2017-06-09 19:08:09

标签: ruby

我最近和一位同事讨论了以下Ruby语法:

value = if a == 0
          "foo"
        elsif a > 42
          "bar"
        else
          "fizz"
        end

我个人并没有看到这种逻辑,但我的同事指出,它实际上是一种相当常见的Rubyism。我尝试使用谷歌搜索主题,发现没有文章,页面或SO问题讨论它,让我相信它可能是一个非常实际的技术。然而,另一位同事发现语法令人困惑,而是会像上面这样编写上述逻辑:

if a == 0
  value = "foo"
elsif a > 42
  value = "bar"
else
  value = "fizz"
end

如果我们想使用它,那么重复声明value =和丢失隐式else nil的缺点。这也感觉它与Ruby中的许多其他语法糖特征排列在一起。

我的问题是,这种技术在Ruby中有多常见?关于社区是否应该使用或避免这样做,是否存在某种共识?

2 个答案:

答案 0 :(得分:6)

value = if condition
          x
        else
          y
        end

很常见。它有助于清理这种情况:

if condition
  value = x
else
  value = y
end

看看这个Ruby风格指南。它是如何编写Ruby代码的流行指南。

https://github.com/bbatsov/ruby-style-guide#use-if-case-returns

答案 1 :(得分:4)

ifcase返回值的事实会产生一些非常紧凑,整洁但仍然可以理解的代码。当你通过分支处理任务时,它是Ruby中的一种常见模式。

我倾向于对这些格式进行格式化的方法是应用一定程度的缩进来使分配清晰,但不能过度使用#34; push"代码太过分了:

value =
  if a == 0
    "foo"
  elsif a > 42
    "bar"
  else
    "fizz"
  end

或者如果你想要case

value =
  case
  when a == 0
    "foo"
  when a > 42
    "bar"
  else
    "fizz"
  end

在许多情况下,您会看到一个方法,其中if作为正文来确定结果:

def value(a)
  if a == 0
    "foo"
  elsif a > 42
    "bar"
  else
    "fizz"
  end
end

然后没有必要的古怪缩进。