Ruby:◇case と when ・・・ 【Ruby:6.5歩目】
◇case と when
私は 条件式は つい if文のみで記述することが多いのだが
(php,perl,vb,c, ・・・ なんでも)
やはり、
改めて case文を学んでおこう
if文よりもきれいにまとまることが多いようだ
Ruby では
case 条件となる値や式
when 値そのもの1
puts 実行内容1
when 値そのもの2
puts 実行内容2
when 値そのもの3
puts 実行内容3
end
のような書き方になり、前に指南書から確認した
「じゃんけんロボット」は
sleep 1 # 1秒プログラム停止し
r = rand(3) + 1 # 0 以上 3 未満の範囲の整数の乱数を発生
case r
when 1
puts "グー"
when 2
puts "チョキ"
when 3
puts "パー"
end
と書き直すことができる
ちなみに if文だと
sleep 1 # 1秒プログラム停止し
r = rand(3) + 1 # 0 以上 3 未満の範囲の整数の乱数を発生
if r == 1
puts "グー"
elsif r == 2
puts "チョキ"
elsif r == 3
puts "パー"
end
となり 確かに見た目はすっきりするなぁ。
(PHPでは?)
・switch (式) を用いるね
switch (式) {
case 値1:
break;
case 値2:
break;
default:
}
という構文で利用される
break; がないと続けて
次の条件を判定してしまうのがミソだなぁ。
・・・これをよく忘れるため
if文だけで構成することが多いのだけれど。
なお、
Ruby:case文において
判定する値に 複数の値を設定できるのは
他の言語と同じだ
(例)
case hour # 値を判定
when 15
puts "何か食べようか?おやつ?"
when 8,12,19
puts "食事にしよう"
end
※確かにこれを if文で書くとややこしくなりそうだな
( if hour == 8 or hour == 12 or hour == 19 ・・・)



▼
when の後の値の書き方だが
範囲を示す場合
when 0..5
などして
case nenrei # 値を判定
when 0..6
puts "幼児だね"
when 7..15
puts "児童だね"
when 16..19
puts "未成年だね"
when 20..99
puts "大人だね"
end
と利用する
・この場合、未成年だね と表示される
値で条件式を展開することもでき
case nenrei # 値を判定
when nenrei >= 0 and nenrei <= 6
とできることや
when 節の最後の式に * を前置すればその式は配列展開され
tempArray = [1,2,3]
case v
when *tempArray
..
end
は、つまり
tempArray = [1,2,3]
case v
when 1,2,3
..
end
と同じであること
このあたりは覚えておかなければな。



