「もし〜なら」と「もし〜なら、でなければ」のブロックを正しく使い分ける事が出来ていますか?
この記事は、「ちょっとよく分からない」人や、「分かっているはずだけど少し不安」という人のために、ブロックの意味や使い分け方、注意点などを解説したいと思います。
ぜひ、最後まで読んで理解してください!
「もし〜なら」の基本的な使い方
「もし〜なら」のブロックは、ある条件が満たされたとき(今回の場合はスペースキーが押されたとき)に何かしらの処理を実行したいという場合に使うことが出来ます。
この使い方は、ほとんどの人が分かっていると思います。
後で、使い方の注意を解説するので、まずは、ふーんという感じで先に進んでみてください。
「もし〜なら、でなければ」の基本的な使い方
例えば、「1」もしくは「2」で回答する問題があるとします。
(今回は正解が「1」でハズレを「2」とします)
上の画像のように「もし〜なら」を2つ使うことで、「正解!」や「ハズレ!」ということなる結果(言葉)を表示することが出来ます。
しかし、ここには大きな落とし穴があります。
・・・誰もが「1」か「2」だけを素直に入力してくれるとは限りません。
試しに、違う数字や言葉など、なんでも良いので入力してみてください。
どうでしょう?
「正解!」とも「ハズレ!」ともいうことなく、処理が終わってしまいました。
これはプログラミングとしては、あまりいい状態(いいコード)とは言えません。
そこで、「もし〜なら、でなければ」を使ってみます。
実行して試してみてください。
1と入力すると「正解!」と表示され、2やそれ以外の言葉を入力すると「ハズレ!」と表示されると思います。
このように、「でなければ」は、「もし〜なら」の条件に当てはまらなかったもの全てという意味になり、処理が実行されます。
こちらは、「でなければ」の中にもう一つ「もし〜なら、でなければ」のブロックを入れて、より完全なプログラムに修正したものです。
「1」と「2」以外の入力に対しては「1か2で答えてください」と警告文を表示するようにしました。
「もし〜なら」と「もし〜なら、でなければ」の基本的な使い方を紹介しました。
では、どちらを使うのが正しいのでしょうか?
正解は「状況によってどちらも使います」です。
ただし、使い方に慣れるまでは「もし〜なら、でなければ」を使うことをおすすめします。
ここからは「もし〜なら」を使った時の思わぬトラブルを紹介し、解決法を解説します。
「変数」と「コスチューム」の関係で「もし〜なら」を使ってみる
少し見づらいかもしれませんが、赤・黄・青のりんごのコスチュームを用意した後に、上のコードを作成してみてください。
(左が1のコード、真ん中が2のコード、右が3のコードと呼ぶことにします)
プログラムでは、以下のようなことを実現したいと思っています。
- 気温が21〜40:赤いりんご
- 気温が1〜20:黄色いりんご
- 気温が-20〜0:青いりんご
実行してみると3のコードは、正しくコスチュームが変わる動作をすることが確認出来ます。
正しく動作する理由は上記の通りなのですが、少し分かりづらいかもしれないので、まずは、そのまま読み進めてください。
2のコードは明らかに動作がおかしいです。
この場合、気温が39なので、正しくは赤いりんごにならなければいけません。
どのようなことが起こっているのでしょうか?
「気温=39」ということは、上から「気温>20」「気温>0」「気温>-21」全ての条件を満たしています。
そのため、りんごは、目に見えない一瞬で「赤→黄→青」と変わったのです。
これで2のコードがおかしい理由は分かりましたが、1のコードは正しく動作しているように見えます。
その理由は、変化が一瞬で目に見えないからです。
次の解説では、目に見える形でコードの問題点を説明します。
「変数」と「評価(言う)」の関係で「もし〜なら」を使ってみる
4〜6のコードをそれぞれ作成してみましょう。
まず6のコードは、もし、得点が100だった場合、初めの条件「得点=100」が一致するので、「満点です!」と2秒表示され、処理が終了します。
それ以降の「得点>80」や「得点>60」にも条件は一致しますが、「満点です!」と表示された時点で処理が終了するのが、「もし〜なら、でなければ」の特徴です。
反対に「もし〜なら」は、必ず実行されることを確認するために、4のコードと5のコードをそれぞれ試してみてください。
得点が75の場合
- 4のコード:不合格です→合格です!
- 5のコード:合格です!→不合格です
上記のように表示されるため、5のコードは明らかにおかしいと言えます。
4のコードは、コスチュームの時は、正しいように見えましたが、「2秒言う」をいれたことで、挙動が正しくないと言うことが理解できたと思います。
まとめ
「もし〜なら」と「もし〜なら、でなければ」ブロックの使い分けについて解説しました。
「もし〜なら」は、思わぬ落とし穴があり、初心者にとっては、何が起きているか分かりづらい現象が発生します。
そのため、途中でも言いましたが、慣れるまでは「もし〜なら、でなければ」を使うことをおすすめします。
今回の記事は、今までなんとなくブロックを使っていたという人にとっても、勉強になる内容だったのではないでしょうか?
プログラムにバグはつきものです。
しかし、事前にブロックの意味を正しく理解していれば、防げるバグもあります。
これからも楽しいスクラッチライフを送っていきましょうΣ੧(❛□❛✿)
コメント