「もし〜なら」と「もし〜なら、でなければ」ブロックの使い分け

ブロックの応用テクニック
Screenshot
Scratch星人
Scratch星人

「もし〜なら」と「もし〜なら、でなければ」のブロックを正しく使い分ける事が出来ていますか?

この記事は、「ちょっとよく分からない」人や、「分かっているはずだけど少し不安」という人のために、ブロックの意味や使い分け方、注意点などを解説したいと思います。

ぜひ、最後まで読んで理解してください!

「もし〜なら」の基本的な使い方

Screenshot

「もし〜なら」のブロックは、ある条件が満たされたとき(今回の場合はスペースキーが押されたとき)に何かしらの処理を実行したいという場合に使うことが出来ます。

この使い方は、ほとんどの人が分かっていると思います。

後で、使い方の注意を解説するので、まずは、ふーんという感じで先に進んでみてください。

「もし〜なら、でなければ」の基本的な使い方

Screenshot

例えば、「1」もしくは「2」で回答する問題があるとします。
(今回は正解が「1」でハズレを「2」とします)

上の画像のように「もし〜なら」を2つ使うことで、「正解!」や「ハズレ!」ということなる結果(言葉)を表示することが出来ます。

しかし、ここには大きな落とし穴があります。
・・・誰もが「1」か「2」だけを素直に入力してくれるとは限りません

試しに、違う数字や言葉など、なんでも良いので入力してみてください。

どうでしょう?
「正解!」とも「ハズレ!」ともいうことなく、処理が終わってしまいました

これはプログラミングとしては、あまりいい状態(いいコード)とは言えません
そこで、「もし〜なら、でなければ」を使ってみます。

Screenshot

実行して試してみてください。

1と入力すると「正解!」と表示され、2やそれ以外の言葉を入力すると「ハズレ!」と表示されると思います。

このように、「でなければ」は、「もし〜なら」の条件に当てはまらなかったもの全てという意味になり、処理が実行されます。

Screenshot

こちらは、「でなければ」の中にもう一つ「もし〜なら、でなければ」のブロックを入れて、より完全なプログラムに修正したものです。

「1」と「2」以外の入力に対しては「1か2で答えてください」と警告文を表示するようにしました。

Scratch星人
Scratch星人

「もし〜なら」と「もし〜なら、でなければ」の基本的な使い方を紹介しました。

では、どちらを使うのが正しいのでしょうか?

正解は「状況によってどちらも使います」です。

ただし、使い方に慣れるまでは「もし〜なら、でなければ」を使うことをおすすめします。

ここからは「もし〜なら」を使った時の思わぬトラブルを紹介し、解決法を解説します。

「変数」と「コスチューム」の関係で「もし〜なら」を使ってみる

Screenshot

少し見づらいかもしれませんが、赤・黄・青のりんごのコスチュームを用意した後に、上のコードを作成してみてください。
(左が1のコード、真ん中が2のコード、右が3のコードと呼ぶことにします)

プログラムでは、以下のようなことを実現したいと思っています。

  • 気温が21〜40:赤いりんご
  • 気温が1〜20:黄色いりんご
  • 気温が-20〜0:青いりんご

実行してみると3のコードは、正しくコスチュームが変わる動作をすることが確認出来ます。

「もし〜なら、でなければ」ブロックは、条件が一致した時点で、処理が実行され、終了する

正しく動作する理由は上記の通りなのですが、少し分かりづらいかもしれないので、まずは、そのまま読み進めてください。

2のコードは明らかに動作がおかしいです。

Screenshot

この場合、気温が39なので、正しくは赤いりんごにならなければいけません。

どのようなことが起こっているのでしょうか?

「もし〜なら」ブロックは、条件に関わらず、ひとつずつ必ず実行される

「気温=39」ということは、上から「気温>20」「気温>0」「気温>-21」全ての条件を満たしています。

そのため、りんごは、目に見えない一瞬で「赤→黄→青」と変わったのです。

これで2のコードがおかしい理由は分かりましたが、1のコードは正しく動作しているように見えます。

その理由は、変化が一瞬で目に見えないからです。
次の解説では、目に見える形でコードの問題点を説明します。

「変数」と「評価(言う)」の関係で「もし〜なら」を使ってみる

Screenshot

4〜6のコードをそれぞれ作成してみましょう。

まず6のコードは、もし、得点が100だった場合、初めの条件「得点=100」が一致するので、「満点です!」と2秒表示され、処理が終了します。

それ以降の「得点>80」や「得点>60」にも条件は一致しますが、「満点です!」と表示された時点で処理が終了するのが、「もし〜なら、でなければ」の特徴です。

反対に「もし〜なら」は、必ず実行されることを確認するために、4のコードと5のコードをそれぞれ試してみてください。

得点が75の場合

  • 4のコード:不合格です→合格です!
  • 5のコード:合格です!→不合格です

上記のように表示されるため、5のコードは明らかにおかしいと言えます。

4のコードは、コスチュームの時は、正しいように見えましたが、「2秒言う」をいれたことで、挙動が正しくないと言うことが理解できたと思います。

まとめ

「もし〜なら」と「もし〜なら、でなければ」ブロックの使い分けについて解説しました。

「もし〜なら」は、思わぬ落とし穴があり、初心者にとっては、何が起きているか分かりづらい現象が発生します。

そのため、途中でも言いましたが、慣れるまでは「もし〜なら、でなければ」を使うことをおすすめします。

今回の記事は、今までなんとなくブロックを使っていたという人にとっても、勉強になる内容だったのではないでしょうか?

プログラムにバグはつきものです。
しかし、事前にブロックの意味を正しく理解していれば、防げるバグもあります。

これからも楽しいスクラッチライフを送っていきましょうΣ੧(❛□❛✿)

コメント

タイトルとURLをコピーしました