Substitua condicional por objeto nulo

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