Управление потоком Ruby: выдать исключение, вернуть nil или оставить ошибку?

Я думаю о лучших методах управления потоком. Куда мне идти?

1) Ничего не проверяйте и дайте программе завершиться ошибкой (более чистый код, естественные сообщения об ошибках):

  def self.fetch(feed_id)
    feed = Feed.find(feed_id)
    feed.fetch
  end

2) Произойдет ошибка, возвращающая nil (однако, "Чистый код" говорит, что вы никогда не должны возвращать 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 и пусть они выдают исключение, если что-то не так?

5
задан krn 2 June 2012 в 12:25
поделиться