ブログ

読んで思い出す。忘れるために書く

Ruby で表現できる様々な書き方 (おみくじゲーム)

(他の言語でもそうだけど) 「Ruby ならいろいろな方法で書けるよ!」というお話

まとめ

コードは書くばかりではなく 読むことだってある

1ヶ月後の自分だったり 他者が、読んだときにすぐに分かる、わかり易しいコードを書こう

要件

  • 1 から 3 のランダムな値を生成
  • 値をもとに...
    • 1 なら「凶」
    • 2 なら「吉」
    • 3 なら「大吉」

上のような動作をするプログラムを書きたい

色々な書き方

ただパターンを増やしても長くなるだけなので、コメントアウトしたコードでも 別の書き方を紹介する

今回は4パターン、書き方を用意した

1. if== 比較

n = rand(3) + 1 # 1 〜 3 の3種の値を生成
# n = rand(1..3) # Range でも生成範囲を指定できる

# n.eql?(1) とオブジェクトに訊く形でも書ける
if n == 1
  puts ''
elsif n == 2
  puts ''
else
  puts '大吉'
end

次のように if での判定結果を変数に代入してもいい (if のなかで別個のことをするのか しないのか、考えずに読み進められる)

result =
  if n == 1
    ''
  elsif n == 2
    ''
  else
    '大吉'
  end

puts result

2. case...when で比較

case n
when 1
  puts ''
when 2
  puts ''
else
  puts '大吉'
end

(case...when でも同様、先に挙げた if での result 変数... 任意の変数への代入ができる)

3. Hash の対応付けから取り出す

Hash を作ったその場から値を取り出す方法

if どこいった!?

puts({
  1 => '',
  2 => '',
  3 => '大吉',
}[rand(1..3)])

4. 配列に収めて取り出す

今回の例だと実は ifcase...when も、要らなかったりする

puts %w[凶 吉 大吉].sample

最初に挙げた「1 から 3 のランダムな値を生成」や、文字列との対応付けのための数値比較も考える必要がなくなる

Links