Ruby on Rails では、これを記述するより良い方法はありますか。
qty = 2
avg_price = room["price"].to_f if room["price"].present?
total_price = (avg_price * qty) if avg_price.present?
特に2行目と3行目。if-else 条件を頻繁に使用していることに気づきました。ありがとう。
Ruby on Rails では、これを記述するより良い方法はありますか。
qty = 2
avg_price = room["price"].to_f if room["price"].present?
total_price = (avg_price * qty) if avg_price.present?
特に2行目と3行目。if-else 条件を頻繁に使用していることに気づきました。ありがとう。
ヘルパー メソッドを定義して、ハッシュから float を直接抽出できるようにするにはどうすればよいでしょうか。
class Hash
def get_f key; fetch(key).to_f if key?(key) end # Or `if self[key].present?`
end
そして、次のようにします。
qty = 2
avg_price = room.get_f("price")
total_price = avg_price * qty if avg_price
おそらく、よりオブジェクト指向のアプローチでしょうか?このアプローチにより、コードのテストが容易になり、再利用できる可能性があります。
class PriceCalculator
def init(quantity, price)
@quantity = quantity
@price = price.presence && price.to_f
end
def total
@price * @quantity if @price
end
end
total_price = PriceCalculator.new(2, room["price"]).total
これを短くするのは難しいです。
qty, avg_price, total_price = 2, nil, nil
if room["price"]
avg_price = Float(room["price"])
total_price = avg_price * qty
end