Positiver Programmierstil

Das Leben ist einfacher, wenn man die Dinge positiv betrachtet. Wenn das Glas halbvoll ist.
Aber auch der Programmierstil kann positiv sein und dadurch leichter verständlich werden. Negationen bedeuten für das Gehirn zusätzlichen Aufwand beim Lesen von Code und sollten daher vermieden werden. Das betrifft nicht nur Negationen in conditions (unless oder if !):

# bad
return if !bank_account.empty?
# also bad
return unless bank_account.empty?

sondern auch Negationen in Benennungen (Methodennamen mit non oder not):

# bad again
return if bank_account.not_empty?

Daher sollten conditions als auch Namen positiv sein. Negationen können oft wegabstrahiert werden.

Ruby macht es vor

In Ruby wurden für einige Methoden positive Pendants implementiert. Zum Beispiel Enumerable:

numbers = [1, 2, 3]
# bad
puts "bad" unless numbers.empty?
# good
puts "good" if numbers.any?

Rails macht es nach

Auch in Rails wurden Ruby core Klassen erweitert, um eine möglichst positive Implementierung zu ermöglichen:

object = Object.new
# bad
puts "Object present" unless object.nil?

Stattdessen:

# good
puts "Object present" if object.present?

Positiv!

Ein imaginäres Beispiel könnte auch eine Person sein, die Krankheiten haben kann:

class Person < ActiveRecord::Base
  has_many :diseases

  def has_diseases?
    diseases.any?
  end
end

Wenn nun abgefragt werden soll, ob die Person gesund ist:

# bad
puts 'healthy' unless person.has_diseases?
puts 'healthy' if !person.has_diseases?

bedeutet die Negation immer einen zusätzlichen Gedankenschritt beim Lesen des Codes.
Die Negation kann aber auch in einer Methode wegabstrahiert werden. Allerdings bringt das wenig, wenn der Methodenname unglücklich ist:

# bad
puts 'healthy' if person.has_not_diseases?

Besser ist:

# good
puts 'healthy' if person.healthy?