Ruby的最佳实践是在传递给迭代器的长代码块之后回避语句修饰符吗


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个。

最新更新