Я читаю Agile Web Development с Rails (4-е изд.), и я нашел следующий код
class ApplicationController < ActionController::Base
protect_from_forgery
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
end
Поскольку я разработчик Java, мое понимание этой части кода более или менее следующее:
private Cart currentCard(){
try{
return CartManager.get_cart_from_session(cartId)
}catch(RecordNotFoundEx e){
Cart c = CartManager.create_cart_and_add_to_session(new Cart())
return c;
}
}
Что меня поражает, так это то, что обработка исключений используется для управления нормальным потоком приложений (отсутствие Корзины абсолютно нормальное поведение, когда пользователь впервые посещает приложение Depot).
Если взять какую-либо книгу Java, они говорят, что это очень плохо, и по уважительной причине: обработка ошибок не должна использоваться в качестве замены для управляющих операторов, она вводит в заблуждение для тех, кто читает код.
Есть ли веская причина, почему такая практика оправдана в Ruby (Rails)? Это обычная практика в Ruby?