something.each do |x|
#lots of stuff
end if some_condition
我认为最流行的方法是只有当它是一行时才使用语句修饰符。在所有其他情况下,使用C、Java等中流行的普通if样式。
bail_out if reqd_param.nil?
if its_gonna_be_long then
long_exec stmt1
long_exec stmt2
....
end
我个人反对这样做,原因很简单,因为它太容易错过了。即使是缩短的版本,我也花了两次时间才意识到你有
if some_condition
在结束时
我几乎从不使用条件句的修饰符形式,因为我认为这可能会让读者感到困惑。这就像一名军官与下属交谈:
<中士>你的命令是爬上那座山,侦察敌人!<私人>是的,先生*开始往山上跑*<中士>。。但前提是你有双筒望远镜。
我唯一认为可以接受的是,当修改的东西太小,以至于可以清楚地看到条件时,例如
do循环#。。。next-if条件#。。。终止
长代码块本身就是一种糟糕的做法,将其重构为更小的块。
修改后的一个长块是一个地狱的方式。
在我工作的组织中,我们已经开始标记这样的结构以进行重写。
我认为上面的例子在某些情况下非常好,因为它存在于几个嵌套块中。如果上面的代码有4个级别,那么您已经消除了另一个级别。因此,在某些情况下,上述样式实际上可以增加可读性。请注意,我们假设块中的语句不超过20个。