s4na's blog

s4naのテックブログ

ファーストペンギン

Sendagaya.rbで、RubyKaigi2020で頂いたりんごジュースを決めるためのくじ引きを作りました

所要時間10分で、Sendagaya.rbのメンバーそれぞれ書きました。

書いた後、「あれ、どのメンバーのコードを使ってくじをするのか決めるためのくじも必要だな」と思ったのですが、それはまた別の機会に書きます。

私のコード

class Amida
  def initialize(members)
    @members = members.split(' ')
  end

  def result()
    p "参加者:#{members}"
    p "参加人数:#{num}"
    p "当選者:#{winner}"
  end

  def members
    @members
  end

  def num
    members.size
  end

  def winner
    @winner ||= members[rand(num)]
  end
end

Amida.new('Asan Bsan Csan').result

ポイントは、 #winner||= で書かれていることで、インスタンス変数に格納されるので、 winner を呼び出す度に結果が変わりません。