0 ruby if-statement coding-style
编辑:我收到了关于重构三元操作的答案.虽然我知道下面所有语言都可以实现这一点,但这并不一定是关于风格的原始问题.我编辑了这些片段以反映这一点.
我很好奇,如果它是惯用的或者总是else在使用if/ else在方法中时使用.
例如,在JS中,这在风格上是可接受的(有时是首选的)
function jsFunc(x) {
if (x == 0) {
// do a bunch of stuff here
return answer;
}
// do something else
return differentAnswer;
}
Run Code Online (Sandbox Code Playgroud)
我也在Python中看到了类似的风格:
def py_func(x):
if x == 0:
# do a bunch of stuff here
return answer
# do something here
return differentAnswer
Run Code Online (Sandbox Code Playgroud)
但是从我见过的Ruby,它总是:
def ruby_method(x)
if x == 0
# do a bunch of stuff here
answer
else
# do something else
differentAnswer
end
end
Run Code Online (Sandbox Code Playgroud)
我还得到一条评论说,不使用elseRuby中的内容似乎更加混乱.Rubyists更喜欢显式else吗?(也很好奇很多语言是含蓄的.)
这实际上取决于.
Guard子句return实际上经常在Ruby中使用.他们甚至受到广泛接受的风格指南的鼓励.
但是,在角落案件中使用了保护条款.所以你必须问自己,实际的可能值是x多少0?
如果它很少0而且有些特殊,那么return一开始就完全可以接受(并鼓励).
例如,这是阶乘的完全可用(即使不是最佳)实现:
def factorial(n)
return 1 if n.zero?
n * factorial(n.pred)
end
Run Code Online (Sandbox Code Playgroud)
理由是这0绝对是一个极端的案例.
另一方面,如果'Yes'和'No'案例都可能和正常,则应在代码(if- else)中直观地表示这种对称性.
例如,考虑一个机器人决定在红绿灯上做什么:
def take_action(light)
if light.green?
go
elsif light.yellow?
prepare_to_go
elsif light.red?
wait
end
end
Run Code Online (Sandbox Code Playgroud)
你可以用guard子句写它,但听起来很奇怪.所有可能的颜色同样是"主要"颜色.
无论哪种方式,在这种特定情况下,有一个更简洁的替代方案:
x.zero? ? 'Yes' : 'No'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |