~each(イーチ)でくりかえしをやってみよう~
前回は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 にいれたのと同じ音の高さと長さが出ることを確かめましょう。
おわり