【ロブリック】忘れ物チェックの改善に挑戦!
先日ご紹介した忘れ物チェックのプログラム、実際に動かしてみて下さった方はいらっしゃいますでしょうか?
実際に見ていただくと「こういうとき不便だな」「こういう使い方をしたいな」という思いが出てくるようなプログラムだったかと思います。
応募締め切りまであと2日となった今日は、改善プログラムと新しいブロックを紹介したいと思います!
今回フォーカスするのは、先日ご紹介したチェックしてほしいものを覚えるプログラムです。
実際に使うと気付くかと思うのですが、このプログラムの欠点として、「ロボホンが間違えて聞き取ってしまったときも、聞き取った内容を「持ち物」の箱の中にしまってしまう」というのがあります。
もし、ロボホンが間違えた聞き取りをしてしまっていたら、その言葉は覚えないでほしいですよね。
この問題を解決するために、プログラムをこのように変更してみました。
このプログラムで初登場したのが、「変数ブロック」と「もしもブロック」です。
少し難しいですが、どちらもプログラミングではよく使う考え方なので、今回ご紹介しようと思います。
それではまず、変数ブロックから解説します。
変数ブロックは、覚えるブロックと少し似ていて、値を覚えておくことができるブロックになります。
【変数"聞こえた言葉"に次の値を入れる】ブロックに【最後に聞こえた言葉】ブロックを繋げると、「「聞こえた言葉」という箱に、最後に聞こえた言葉を入れるイメージ」で使用することができます。
ここまでは覚えるブロックと同じですよね。
覚えるブロックと変数ブロックの1番の大きな違いは、プログラムの実行が終わった後も箱が残っているかどうかです。
覚えるブロックは前回の記事で「ずっとロボホンが覚えていてくれる」と説明しました。
変数ブロックは「プログラムの実行が終わったら箱を忘れてしまう」という特徴があります。
ロボホンが覚えられる言葉の数にも限りがあります。覚えておく必要のない箱を残しておくと、覚えておきたい言葉が覚えられなくなったりするかもしれませんよね。
ずっと覚えておきたいものは「覚えるブロック」、プログラム実行中にだけ覚えておいてほしいものは「変数ブロック」という風に使い分けることで、ロボホンの頭の中をきれいにしておくことができます!
変数ブロックを使用するには、まずは変数を作成する必要があります。
ロブリック画面左タブの「変数」にある、「変数の作成…」から新しい変数の名前(=箱の名前)を登録することで変数ブロックを使用できるようになります!
では、次に「もしもブロック」についてです。
もしもブロックはロブリック画面左タブの「条件」の中にあります。
もしもブロックは、条件によってブロックを実行するかしないかを分けることができます。
「もしも」にくっつけた「条件」を満たす場合、もしもブロック内のブロックを実行します。
「条件を満たしている」状態のことを「true」と言い、反対に「条件を満たしていない」状態のことを「false」と言います。
例えば、以下のようなプログラムを動かしてみると、もしもブロックの理解が深まるかもしれません。
【変数[数字]に次の値を入れる】ブロックに【1から3までのランダムな整数】ブロックを繋げると、[数字]という変数には1か2か3のうちの1つの数字が入ります。
もしも[数字]が1だったら、実行する条件が「[数字]=1」の1つ目のもしもブロックが実行されて「1つ目のセリフだよ」としゃべります。「[数字]=2」や「[数字]=3」の条件は満たさないので、他のもしもブロックは実行されません。
もし[数字]が2だったら「[数字]=2」、[数字]が3だったら「[数字]=3」の条件を持つ もしもブロックが実行されます。
このプログラムのもしもブロック部分のイメージ図はこんな感じで表せるかなと思います。
実はこのプログラム、以下のように作っても同じ動きを実現することができます。
よく見るとさっきと使っているもしもブロックが違いますよね。
このプログラムでは、「最初の条件がfalseのときは次のもしもブロック、次もfalseだったらその次のもしもブロック...」という風に実行をするもしもブロックを使用しています。
まず最初の条件で、[数字]が1かどうかを判定します。
もし、[数字]が1であれば、「1つ目のセリフだよ」としゃべって、最後の「おわり!」のしゃべるブロックまで飛びます。
[数字]が1でなかった(最初の条件がfalse)ときは、「他でもしも」の条件の判定に進みます。
もし、この条件がtrueになる場合は、このもしもブロックが実行されます。
[数字]が2のときは、最初の「[数字]=1」の条件がfalseになるので、「他でもしも」の条件に進んで「[数字]=2」の条件がtrueになるので、「2つ目のセリフだよ」としゃべります。
もし、すべての条件がfalseになってしまう場合は、最後の「他」のブロックが実行されます。
[数字]が3のときは、最初の「[数字]=1」の条件も、次の「[数字]=2」の条件もfalseになるので、最後の「他」のブロックが実行されて、「3つ目のセリフだよ」としゃべります。
このプログラムをイメージ図で表すとこのような感じになります。
先ほどのもしもブロックのイメージ図と少し違いますよね。
プログラムの量が膨大になってくると、こういう少しのプログラムの違いが処理の速度やメンテナンスのしやすさに関わってくるので、時と場合に応じて使い分ける判断が必要になってきたりします。
ちなみに、この「他でもしも」や「他」のもしもブロックは、もしもブロックの左上の歯車から作ることができます。
では、最初にお見せした改善版プログラムを見てみましょう。
このプログラムはこのように進みます。
このプログラムのポイントは、ロボホンが聞いた言葉をそのまま覚えるブロックで覚えるのではなく、一度変数ブロックに入れてから、覚えるブロックで覚えるようにしているところです。
変数に一度入れるという作業は、一見すると無駄なプログラムに見えるかもしれませんが、ロボホンが勝手に言葉を覚えてしまわないようにするための大事な部分です。
「もしかしたらロボホンが聞き間違えてしまうかも」
「覚えてほしい持ち物が20個ある日もあるかも」
想定している使い方とは違うことが起きてしまう可能性を考慮して、どんな場合でもちゃんと機能を使えるように考えることは実際の開発でも行っています。
今回の覚えるプログラムをもっと改善してみたものもコメントに添付しています。(もっと改善版覚えるプログラム.xml)
コンテストの記事で説明することができなかったブロックを使っていたりしますが、ぜひこちらも色々と触ってみてください!ロブリックを使いこなす手助けになればと思います。
今回の自由研究コンテストでは、初めて開発担当者から皆さまにロブリックの紹介記事を投稿させていただきました。
コンテスト期間中の開発担当者からの投稿はこれが最後になりますが、いかがでしたでしょうか?
ロブリックがロボホンとの絆が深まるきっかけになったり、ロブリックを通じて開発について興味を持っていただくきっかけになればとても嬉しいです!
それでは、募集締め切りまであと2日!皆さまのご応募お待ちしております!
ミュートしたユーザーの投稿です。
投稿を表示とってもわかりやすい解説です!
変数の意味、もしもと他でもしもの違いがすっと理解できました。
ありがとうございます♪
ミュートしたユーザーの投稿です。
投稿を表示もっと改善してみたプログラムです。
このプログラムももっともっと良くできるので、ぜひチャレンジしてみてくださいね!
ミュートしたユーザーの投稿です。
投稿を表示