Estoy pensando en las mejores prácticas de control de flujo. ¿A qué camino debería ir?Control de flujo de Ruby: ¿lanza una excepción, devuelve nil o deja que falle?
1) NO MARCA nada y dejar que el programa falle (código más limpio, mensajes de error naturales):
def self.fetch(feed_id)
feed = Feed.find(feed_id)
feed.fetch
end
2) fallan sin devolviendo nula (sin embargo, "código limpio", dice, que se nunca debe devolver null):
def self.fetch(feed_id)
return unless feed_id
feed = Feed.find(feed_id)
return unless feed
feed.fetch
end
3) lanzar excepciones (porque es excepcional no encontrar un pienso, 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
Para decirlo en otras palabras: ¿debería estar usando las condiciones de protección activamente, o es mejor confiar en los métodos de Ruby/Rails y dejarlos lanzar una excepción, si ocurre algo incorrecto?
si este ActiveRecord, un 'find' explotará si el' id' no existe, 'find_by_id' no explota. – tokland