Da bin ich grade über folgenden Ruby-Code zum Thema "Secret Santas" gestoßen und war recht beeindruckt, wie kurz dieser ist:
class Array
def shuffle!
replace sort_by { rand }
end
end
class SecretSanta
include Enumerable
def initialize(people)
@from, @to = people.dup.shuffle!, people.dup
assign!
end
def assign!
@to.shuffle! until no_two_indices_are_alike
end
def each(&block)
@from.zip(@to).each &block
end
private
def no_two_indices_are_alike
all? { |a, b| a != b }
end
end
s = SecretSanta.new(Person.find(:all))
# Print Secret Santa pairings
pp Hash[*s.to_a.flatten.map {|person| person.name}]
Nur verstehen tue ich bis jetzt wenig. Mal sehen, ob sich das in nächste Zeit ändert, aber abgesehen davon, bin ich kein Fan von solchem sehr kompakten Code. Ich weiss ja nicht ob Ruby-Spezialisten sowas auf anhieb lesen können (auch, wenn sie nicht wissen, welches Problem gelöst werden soll), aber ich könnte es nicht. IMHO ist lesbarer Code wesentlich besser, vor allem, was die Wartbarkeit angeht. Und wenn man dafür die doppelte Anzahl Codezeilen benötigt...
Oder ist ultrakompakter Quellcode erstrebenswert?
Hi. I'm Daniel Pietzsch and this is my innoQ-Blog. I'm a 26y old student at 
Recent Comments