子どもRubyプログラミング講座「ロボット編」第6回

2014/02/20

~each(イーチ)でくりかえしをやってみよう~

piroko_jaran_ss前回はsound(サウンド)を使ってメロディを鳴らしてみました。今回はくりかえしの命令、each(イーチ ~ごとに)を使って『きらきら星』を鳴らしてみましょう。

『きらきら星』の出だしのぶぶん、「どどそそららそ~」をプログラムで書くと、次のようになりましたね。

robo.sound "do",250
robo.sound "do",250
robo.sound "so",250
robo.sound "so",250
robo.sound "la",250
robo.sound "la",250
robo.sound "so",500

でも robo.sound を何度も書くのは、めんどうですよね。もっと楽にプログラミングするには どうすれば よいでしょう。

そこでeach(イーチ) のとうじょうです。英語のeach には、「~ごとに」という意味があります。each を使えば、上のプログラムを、「音の高さと長さ」の集まりの部分(ぶぶん)と、「それぞれの音を鳴らす」という部分にわけて書くことができます。

「音の高さと長さ」の集まりの部分をプログラムで書くとこうなります。


kirakira=[["do",250],["do",250],["so",250],["so",250],["la",250],["la",250],["so",500]]

[  ]で囲(かこ)まれた部分を配列(はいれつ)といいます。順番(じゅんばん)に並べられたメモ紙のようなものとおぼえましょう。この命令は、kirakira(きらきら)という名前のついた箱に、音の高さと長さを書いたメモ紙を入れておくのに たとえることが できます。外側(そとがわ)の[  ]が箱、中に入っているたくさんの[  ]がメモ紙に見えませんか。

* 箱には ongaku や hosi など、好きな名前をつけることができます。

「それぞれの音を鳴らして」の命令をプログラムで書くと次のようになります。


kirakira.each do |ontei, nagasa|
robo.sound ontei, nagasa
end

こうすると、kirakira(きらきら)の箱に入っているメモ1枚ごとに、順に do(ドゥ)から end(エンド)までの命令をやってくれます。

eachでロボットに演奏させてみよう

次のプログラムを試してみよう。COM3の部分はペアリングの手順で調べた番号に変えてください。


require "mi100"

robo = Mi100.new "COM3"

kirakira=[["do",250],["do",250],["so",250],["so",250],["la",250],["la",250],["so",500]]

kirakira.each do |ontei, nagasa|
 puts ontei
 puts nagasa
 robo.sound ontei, nagasa
end

KidsRuby の出力タブに、 kirakira にいれたのと同じ音の高さと長さが出ることを確かめましょう。

おわり