吉祥寺には数多のお店があるわけでございますが、どうしても毎回同じような店に行ってしまうことを悩みながら、本日もまたチェーン店に行ってしまったさばとでございます。
今回の内容は、Scratchのエラー(間違い)を探せ! でございます(第1回)。プログラミングにおいては正しく命令を組み立てることができないと、正しく実行することができません。意図通りに実行できないことをバグがあるというふうに申しますが、今回はScratchでのよくある間違いについて見ていきましょう。
今回の問題
変数に60を代入しています。その後で、変数が40より大きく、50より小さいかどうかを判定しているプログラムです。
本来であれば60は変数が40より大きく、50より小さいわけではないので、falseが返ってくるはずですね。
ですが、Scratch Catはtrueと言っています。
……
なぜでしょうか。
結論から言うと、2つ以上の条件を比べるときには「かつ」や「または」が必要だということです。
問題を読み解く
計算の過程を見てみましょう。
((40 < 変数) < 50) このような形になっています。
まず中の括弧の中を計算してみましょう。40 < 60なので答えはtrueですね。
(true < 50)
こうなりました。大体のプログラミング言語においてtrueは1として扱われます。ですので、
(1 < 50)
となります。1 < 50なので答えはtrueですね。この段階になると変数の値については大きく影響しなくなってしまいました。
どのように書けばよかったのでしょうか。
バグの修正
条件を2つ以上連結させるときには「かつ」や「または」を使う必要があります。このようにすることで、それぞれの条件を別々に判定した後に評価が行われます。
まとめ
条件式の記述には注意が必要です。
特に、複数の条件を連結する際には「かつ」や「または」を明示するようにしましょう。また、Pythonのように40 < 変数 < 50
をそのまま評価可能な例外的な言語も存在するので、それぞれの言語仕様を確認して使うようにしていきましょう。