~プログラムの流れを変えてみよう 2~(case)
前回の講座ではelsif(エルスイフ)を使って、条件(じょうけん)によってプログラムの流れを変えるやり方をおぼえました。流れを変える方法はほかにもあって、その中のひとつにcase(ケース)があります。今回はcaseの使い方をみてみましょう。
エディタに下の命令を入れて「動かす」ボタンを押してみてください。
t = Time.now.hour case t when 4,5,6,7,8,9 puts "おはよう" when 10..16 puts "こんにちは" when 17..21 puts "こんばんは" else puts "寝る時間ですよ" end
朝なら「おはよう」、昼なら「こんにちは」、夜なら「こんばんは」と表示されるはずです。
プログラムのせつめい
1行目
Time.nowをおぼえていますか?ジャストタイムゲームで使いましたよね。Time.now.hourは、現在の時刻(じこく)を時間単位(たんい)で調べます。
時間を調べて、tという名前のついた箱に入れなさい。
3行目
tという名前のついた箱に入っている数が、つぎの条件と合うか調べなさいという命令。
5行目
when(ウェン|~のとき)は、あとにつづく値(あたい)に一致するならば、次の行に進みなさいという命令。この場合は、カンマ(,)で区切った 4,5,6,7,8,9 のいずれかと一致するなら、ということ。一致しないときは、つぎのwhenに進みます。
6行目
「a..b」は、「aからbまで」という意味。10..16は、10から16まで(午前10時から午後4時まで)。tに入っている数が10から16までなら、つぎの行に進みなさい。いずれにも一致しないときは、つぎのwhenに進みます。
9行目
同じく、17から21までなら。
いずれにも当てはまらなければ、elseに進みます。
ロボットを使って確かめよう
数字を入れるだけで、あらかじめ決められた動きをさせるプログラムを書いてみましょう。askとcaseを使うとできるよ。
require "mi100" robo = Mi100.new "COM3" puts "何する?番号をえらんで" kotae = ask "1:回る 2:前に進む 3:いろいろ" case kotae when 1 robo.spin "right",1000 when 2 robo.move "forward",1000 when 3 robo.good robo.spin "right",500 robo.move "forward",500 robo.move "backward",500 robo.blink else robo.bad end robo.close
プログラムのせつめい
1~3行目
ロボットを無線で動かせるようにするための、いつものステップですね。
5行目
出力タブに、「何する?番号をえらんで」と表示しなさい。
7行目
「1:回る 2:前に進む 3:いろいろ」と書いてある四角い箱を表示し、入れた数をkotaeという名前のついた箱に入れなさい。
9行目
kotaeに入っている数が、次の条件と一致するか調べなさい。
11行目
kotaeに入っている数が1なら、つぎの行に進みなさい。そうでないなら、つぎのwhenに進みなさい。
14行目
kotaeに入っている数が2なら、つぎの行に進みなさい。そうでないなら、つぎのwhenに進みなさい。
17行目
kotaeに入っている数が3なら、つぎの行に進みなさい。そうでないなら、elseに進みなさい。
おわり