見出し画像

【Robo Blocksの使い方】もし〜ならなど条件で分岐するブロック_その1 基本的な使い方

ソフトバンクロボティクスでPepperを使ったプログラミング教育を担当してる佐藤です!
今回は他の記事でも頻出の条件で分岐するブロックについて、改めて使い方を確認したいと思います!


制御ブロック

もし〜ならをはじめとする黄色いブロックは「制御ブロック」、またはその形から「C型ブロック」と呼ばれます。基本的にはこちらの記事で紹介した真偽ブロックと組み合わせて使用します。

もし〜ならブロック

制御ブロックの中で最もシンプルなブロックが、もし〜ならブロックです
〜に入れた真偽ブロックの値が真(true)になったとき、間に挟まれたブロックが動きます。

もし〜ならブロック

制御ブロックは動き始めに1度だけ条件を判定します。動き始めのその瞬間の真偽値で判断されるため、例えば以下のように動作中に値が変わったとしても途中で処理が止まるようなことはありません。
例えば以下のように"変数=1"を条件に分岐させた後の処理で変数の値が変わっても、処理は止まらず「変数に1が足されました」は発話されます。

判定は動き始めるとき1回だけなので、処理中に条件を満たさなくなっても動きは止まらない

よくある間違いとして、ディスプレイをタッチして進めるプログラムをでタッチ1回目と2回目で動きを変えたいときに、1回目のタッチで2回目のタッチで動いて欲しいプログラムが動いてしまうというものがあります。
以下のようなプログラムで起こります。

タッチ回数の処理を誤ってしまっているプログラム

もし〜ならブロックを繋げると、大きなもし〜ならブロックに見え、1の時は1、2の時は2が動いてくれるような感覚になってしまうのですが、プログラムは上から順次動いて行きます。
この例ですと1回目の時タッチ回数は1ですから「1回目です」と発話します。その後その処理の中でタッチ回数を増やしてしまっているので、次のもし〜ならブロックが動く時にはタッチ回数が2になってしまい、2回目も動いてしまいます。

制御に使用する変数を増やしたり減らしたりする箇所は、回数の処理とは分離して外に出しておく方が間違いが起きにくくなります。例のプログラムを修正すると以下のようになります。

タッチ回数は一通りの処理が終わった後に変える例

この例でも正しく動きますが、これだと1回目のタッチを行った時に変数:タッチ回数が2になるのがなんとなく気持ち悪い気がします。
そこで変数を0から始めて以下のように修正することもできます。

変数を増やすブロックを上に持っていき、タッチ回数と変数が一致するようにした例

この方法だと実際のタッチ回数と変数の値を一致させることができました。
(見た目の動きは変わりませんのでお好みではあります。)

まとめ

今回は制御ブロックの中でも最も基本的な動きをするもし〜ならブロックを紹介しました。
プログラムにおいて条件分岐(if文)は非常に使い所の多い処理で、これをマスターするとプログラムできる処理が一気に広がります。
是非どんどん使ってマスターしてみてください!

次回は残りの3つのブロックについて見ていきたいと思います!