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?
Recent Comments