我最近和一位同事讨论了以下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中有多常见?关于社区是否应该使用或避免这样做,是否存在某种共识?
答案 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)
if
和case
返回值的事实会产生一些非常紧凑,整洁但仍然可以理解的代码。当你通过分支处理任务时,它是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
然后没有必要的古怪缩进。