May 29, 2017
Rubyists often write a block of code that is similar to the one below.
account = Account.new
account.balance = 5_000
if account.balance > 2_000
account.buy_television!
end
This is a code smell. Here’s a better way to do it.
account = Account.new
account.buy_television!
The above example is more direct. It doesn’t ask. It tells object what to do.
Another bad example.
cards = get_credit_cards_for(customer)
if cards.all?(&:active)
PurchaseOrder.create(customer)
end
The better version.
class PurchaseOrder
def self.create(customer)
create_transaction if customer.all_cards_active?
end
end
PurchaseOrder.create(customer)
In OOP, we want to tell objects what needs to be done, not ask them first.