Refactoring: Query Methode

Temporäre Variablen neigen dazu ein code smell zu sein. Sie machen Methoden länger und schwieriger zu analysieren. Schließlich enthalten sie Logik die, für das Verständnis der Methode selber nur sekundär ist. Auch für weitere Refactoring Schritte (z.B. Extract Method) sind temporäre Variablen eher hinderlich.
So zum Beispiel enthält die Klasse Person eine öffentliche Methode adult? , die berechnet, ob die Person schon erwachsen ist oder nicht:

class Person
  attr_accessor :birthday

  ADULT_AGE = 18 

  def adult?
    return false if birthday.nil?
    years_since_birthday = Date.today.year - birthday.year
    years_since_birthday >= ADULT_AGE
  end
end

Ein Extrahieren der temporären Variable years_since_birthday in eine eigenständige Methode macht absolut Sinn. Die Methode adult? wird prägnanter. Ein weiterer Mehrwert ist, dass die extrahierte Methode auch sehr einfach in einem anderen Kontext wiederverwendet werden kann:

class Person
  attr_accessor :birthday

  ADULT_AGE = 18 

  def adult?
    return false if birthday.nil?
    years_since_birthday >= ADULT_AGE
  end

  private

  def years_since_birthday
    Date.today - birthday.year
  end
end

Allerdings sollte der Query Method Ansatz nicht um jeden Preis angewendet werden. Temporäre Variablen machen zumindest dann Sinn, wenn deren Logik mehrfach in der selben Methoden Anwendung findet und eine wiederholte Berechnung zu einer geringeren Performance führen würde.