我正在考虑流程控制的最佳实践。我应该采取哪种方法?
1)不检查任何内容,让程序失败(代码更简洁,自然的错误信息):
def self.fetch(feed_id)
feed = Feed.find(feed_id)
feed.fetch
end
2) 返回nil以默默失败 (然而,“Clean Code”认为,您永远不应该返回null):
def self.fetch(feed_id)
return unless feed_id
feed = Feed.find(feed_id)
return unless feed
feed.fetch
end
3) 抛出异常(因为按id查找Feed不成功是个例外情况):
def self.fetch(feed_id)
raise ArgumentError.new unless feed_id
feed = Feed.find(feed_id)
raise ArgumentError.new unless feed
feed.fetch
end
换句话说,我应该积极使用守卫条件,还是更好地依赖于Ruby / Rails方法,让它们在出现问题时抛出异常?
find
会在id
不存在时报错,而find_by_id
不会报错。 - tokland