フロー制御のベストプラクティスを考えています。どちらに行けばいいですか?
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 でフィードが見つからないのは例外的であるため):
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 メソッドに依存して例外をスローさせる方がよいでしょうか?