在Ruby Code中返回早期VS



我看到了两种编写同一件事的样式:

def find_nest(animal)
  return unless animal.bird?
  GPS.find_nest(animal.do_crazy_stuff)
end

vs

def find_nest(animal)
  if animal.bird?
     GPS.find_nest(animal.do_crazy_stuff)
  end
end

哪一个更正确/更可取/以下最佳赛车?还是没关系?

根据红宝石样式指南,

当您可以断言无效的数据时,请选择一个护罩子句。后卫条款是一个有条件的语句尽快。

# bad
def compute_thing(thing)
  if thing[:foo]
    update_with_bar(thing)
    if thing[:foo][:bar]
      partial_compute(thing)
    else
      re_compute(thing)
    end
  end
end
# good
def compute_thing(thing)
  return unless thing[:foo]
  update_with_bar(thing[:foo])
  return re_compute(thing) unless thing[:foo][:bar]
  partial_compute(thing)
end

这显然是个人喜好的问题。但是我更喜欢提早回报。它不仅使代码"扁平"且更易于阅读,而且还可以很好地缩放检查数量。例如:

  def create_terms_of_service_notification
    return if Rails.env.test?
    return if current_user.accepted_tos?
    # imagine 5 more checks here. 
    # Now imagine them as a mess of nested ifs.
    # create the notification
  end

this:}

def find_nest(animal)
  GPS.find_nest(animal.do_crazy_stuff) if animal.bird?
end

相关内容

  • 没有找到相关文章

最新更新