« The secret santas on rails | Main | Flog Score »

Noch viel zu lernen?!?

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?

About

DanielHi. I'm Daniel Pietzsch and this is my innoQ-Blog. I'm a 26y old student at FH Bochum and working student at innoQ.
In this blog I mainly write about the progress concerning my diploma thesis which will be an in-house application for innoQ based on Ruby on Rails, but some other (geek) stuff might appear here, too.

daniel [dot] pietzsch [alt-L] innoq [dot] com

I recommend

Categories

Recent Comments

License

Creative Commons License This weblog is licensed under a Creative Commons License.
Powered by
Movable Type 3.31