Mam na myśli najlepsze praktyki kontroli przepływu. Którą drogą mam iść?Sterowanie przepływem ruby: wyrzuć wyjątek, wróć do zera lub pozwól mu zawieść?
1) Nie zaznaczaj niczego i niech program nie (czystsze kod, naturalne komunikaty o błędach):
def self.fetch(feed_id)
feed = Feed.find(feed_id)
feed.fetch
end
2) Fail cicho wracając nil (jednak "Clean Code", mówi, że ciebie nigdy nie powinien powrócić null):
def self.fetch(feed_id)
return unless feed_id
feed = Feed.find(feed_id)
return unless feed
feed.fetch
end
3) generują wyjątki (bo to wyjątkowy nie znaleźć paszę przez 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
Innymi słowy: czy powinienem aktywnie korzystać z warunków ochronnych, czy lepiej polegać na metodach Ruby/Rails i pozwolić im rzucić wyjątek, jeśli coś złego się dzieje?
jeśli to ActiveRecord, 'find' będzie dmuchać, jeśli' id' nie istnieje, 'find_by_id' nie wieje. – tokland