Objetos Nulos
Objetos nulos são objetos que definem o comportamento neutro / nulo. Em muitas linguagens orientadas a objetos, as referências podem ser nulas / nulas. Essas referências devem ser verificadas antes de realmente chamar um método porque os métodos geralmente não podem ser chamados em referências nulas.
Objetos nulos são usados para expressar a ausência de um objeto, por exemplo, nenhuma assinatura. Um objeto nulo implementa a interface esperada e o comportamento esperado para a ausência de um objeto de interesse.
Ao retornar um objeto nulo, não há necessidade de verificar as condicionais. Chamar esse método simplesmente não fará nada.
Quando usar:
- quando se nota muita duplicação no código e na lógica. É perceptível quando estamos constantemente verificando se há zero.
Prós:
- Remove a desordem
- Melhora a legibilidade do código
- Remove condicionais
Contras:
- Precisa criar uma classe nula que implemente a interface esperada da classe de interesse
- Mais código = mais manutenção
Sem Objeto Nulo
class User
include ActiveModel::Model
attr_accessor :credit_card, :subscription
def charge
unless subscription.nil?
subscription.charge(credit_card)
end
end
def price
subscription.try(:price) || 0
end
end
Com Objeto Nulo
class NoSubscription
def price
0
end
def charge(credit_card)
end
end
class User
include ActiveModel::Model
attr_accessor :credit_card, :subscription
def subscription
@subscription || NoSubscription.new
end
def charge
subscription.charge(credit_card)
end
def price
subscription.price
end
end