【第8回】 【micro:bit講座 第8回】論理演算(AND / OR / NOT):複数の条件をスマートにまとめよう!

MakeCode × micro:bit編

第7回では「IF文のネスト(入れ子)」を学び、条件の中に条件を重ねることで、二重・三重の門番を設置する方法をマスターしましたね。

おかげで、私たちの「りんご管理システム」は、複雑なルールも完璧に守れる「鉄壁のシステム」へと進化しました。

しかし、ここで一つ疑問が浮かびませんか?

「条件が増えるたびに、門番をどんどん入れ子にしていくと、プログラムがどんどん下に伸びていって、画面から見えなくなってしまう……」

そう、ネストは強力ですが、使いすぎるとコードが縦に長くなりすぎてしまい、全体の流れを把握するのが難しくなるという弱点があります。

そこで登場するのが、複数の条件を「合体」させたり、ひっくり返したりする魔法の演算子、「論理演算(AND / OR / NOT)」です!

この魔法を覚えれば、長かったネスト構造が一気にスッキリし、プログラムがよりスマートで読みやすくなります。

さあ、思考を整理する新しい武器を手にしましょう!

前回の宿題:答え合わせ

まずは、前回皆さんに出した「比較演算子のナゾ」を解き明かしましょう。

シミュレーターで実験して、門番たちの反応は確認できましたか?

第1の門番「在庫チェック」の書き換え

「ぼくのりんご > 0」を「≧」を使って書き換え

リンゴの在庫が0個の状態で、「≧0」の条件なら通過し、「≧1」の条件ならブロックされる様子を比較したイラスト。ロボットの門番とコード例が併記されている。
図1:第1の門番(在庫チェック)。左は「0個以上」なので、リンゴが0個(空のカゴ)でも通過できます。右は「1個以上」なので、0個の場合は門番に止められます。この「0を含むか、含まないか」が最初の関門です。

「ぼくのりんご ≧ 0」とすると「0個以上」となるため、在庫が0でも門が開いてしまいます。

エラーを出したい「0」を通過させてしまうため、在庫管理には 「≧ 1」 が正解です。

「ぼくのりんご > 0」を「=」を使って書き換え

「=(等しい)」を使う場合:まずはエラーを弾く

「=」を使うときは、「何がOKか」ではなく「何がNGか」を最初に決めるのがコツです。

もし『ぼくのりんご = 0』なら、まずはエラーを表示する!

それ以外の『でなければ(=りんごが1個以上ある状態)』のときだけ、次の第2の門番へ進ませよう。

このように、エラーを最初に処理してしまうことで、残りのプログラムが確実に安全な状態であることを保証する「門番のガード」が作れます。

「ぼくのりんご > 0」を「≠」を使って書き換え

「≠(等しくない)」を使う場合:OKな道だけ通す

「≠」は「0以外ならOK」という考え方なので、0個という例外だけを別のルートに流します。

もし『ぼくのりんご ≠ 0』なら、0個ではないので、そのまま第2の門番へ進んでよし!

それ以外の『でなければ(=0個の時)』は、エラーを表示して門を閉ざそう。

この場合、0個という「NGの状態」を「でなければ」の場所でキャッチしています。

ただし、マイナスの数値を扱うシステムの場合は「0より小さい数も『0ではない』から通ってしまう」という点に注意が必要です。

第3の門番「容量チェック」の書き換え

「いもうとのりんご < 5」を「≦」を使って書き換え

カゴに入るリンゴの数が限界に達した時、「≦ 5」なら5個目を入れてあふれてしまい、「≦ 4」なら4個で止めて安全を保つ様子を比較したイラスト。ロボットの門番とコード例が併記されている。
図2:第3の門番(容量チェック)。カゴのリンゴが限界の5個に達した時、左の「≦ 5」は5個目を受け入れますが、右の「≦ 4」はパンクを防ぐために4個目で止めます。「限界の1つ手前で止める」という安全策の考え方です。

「≦ 5」とすると「5個の時もOK」となり、袋がパンクしてしまいます。

妹の袋をあふれさせないためには、 「≦ 4」 が正解です!

境界線を1つ間違えるだけで、袋がパンクしたり在庫が暴走したり……。

演算子の違いを体感できたなら、君の「エンジニアの目」はかなり鋭くなっていますよ!

今日のミッション:ネストを卒業してスマートに書こう!

例えば、前回のシステムでは「在庫がある(>0)」かつ「容量に空きがある(<5)」という判定をするために、IF文を2つ重ねていましたね。

これでも動きますが、もし「あにの協力」「いもうとの機嫌」など条件が10個増えたらどうなるでしょう?

画面は下へ下へと門番だらけになってしまいます。

論理演算(AND / OR / NOT)を使うと、これらを「一つのIF文」の中に論理的に組み込むことができます。

論理演算「AND / OR / NOT」とは?

プログラムの世界には「正しい」ことを真(しん/true)、「間違い」であることを偽(ぎ/false)と呼ぶルールがあります。

  • AND(かつ): 両方の条件が「真(true)」のときだけ、門が開く!
  • OR(または): どちらか片方でも「真(true)」なら、門が開く!
  • NOT(ではない): 「真(true)」を「偽(false)」に、「偽(false)」を「真(true)」にひっくり返す!

ミッション1:AND・OR演算子で門番をスッキリさせる

さあ、実際にプログラムをスマートに改造してみましょう!

まずは、前回作った「プログラム7」をベースに準備をします。「複製(コピー)」というテクニックを使って「プログラム8」を準備をしましょう。

プロジェクトを複製する手順は、【第4回】 【micro:bit講座 第4回】変数の応用:計算でりんごの数を変えてみよう!を参考にしてください。

  1. MakeCodeの「論理」ブロックから「かつ(AND)」や「または(OR)」を持ってきます。
  2. 「もし~なら」の条件部分に、このブロックをはめ込みます。
  3. 条件を左右にはめ込むだけで、長いネストが1行のIF文に大変身します!

比較してみよう:ネスト vs 論理演算

Before:ネスト(入れ子)の門番たち
画面がどんどん下に伸びてしまって、全体像が見えにくい……。

図3:これが前回の『門番の重ね着』スタイル。条件が増えるたびに、どんどん下にズレていっちゃうよね……。

After:論理演算でスマートに合体!
「かつ」を使うことで、たった1行の門番で済むようになったよ!

図4:どう! 論理演算ブロックを使うと、こんなにスッキリ! 門番がたった一人になって、プログラムの全体像がパッと見て分かるようになったね。

どう?

画面の使い方が全然違うよね!

「かつ(AND)」を使えば、全ての条件を満たした時だけ門が開く、厳しい門番が作れるし、「または(OR)」を使えば、どちらか片方でもOKという優しい門番を作ることができるんだ。

「かつ」は英語の「AND(結びつける)」、

「または」は英語の「OR(選択する)」という意味だよ。

この先プロになっても毎日使う「合言葉」だから、今のうちに覚えておこう!いろいろ試して、門番を自由に操ってみてね。

【コラム】スマートさの代償? 「エラーの理由」を見失うな!

論理演算を使って条件を1行にまとめると、プログラムはとてもスッキリします。

しかし、エンジニアとして一つだけ注意しておかなければならないことがあります。

それは、「どの条件で門番に止められたのかが分からなくなる」という不自由さです。

ネスト構造の場合:

もし「在庫>0」なら
  もし「空き<5」なら
    ……
  でなければ「容量オーバーです!」と教えられる
でなければ「在庫がありません!」と教えられる

これなら、どこで止められたか具体的に教えてあげられます。

論理演算で1行にした場合:

もし「(在庫>0) かつ (空き<5)」なら
  ……
でなければ「エラーです!」

これだと、「在庫がないからダメだったのか?

それとも容量が足りないからダメだったのか?」が、コンピュータには分かりません。

全部まとめて「エラー」になってしまいます。

エンジニアの知恵:使い分けが大事!

「スッキリ書くこと」だけが目的ではありません。

「ユーザーに親切なエラーを返したいときはネストにする」「動作をシンプルにしたいときは論理演算を使う」というように、目的に合わせて門番の書き方を選ぶのが、プロのエンジニアの腕の見せ所です。

プログラムをスマートにすることと、エラーを親切に教えること。

どっちが大事だと思う? 実は、どちらか一方だけが正解じゃないんだ。 プロのエンジニアは、場面に合わせてこの2つを使い分けているよ。

ミッション2:「NOT(ではない)」で条件をひっくり返す

「NOT」はちょっとひねくれ者の門番です。

「≠(等しくない)」と似ていますが、使い方が違います。

  • 「≠(等しくない)」は、値のチェックに使う: 「在庫=0じゃない」のように、数字を比べるときに使う「盾」のような存在です。
  • 「NOT(ではない)」は、条件を反転させる魔法の鏡: 複雑な条件式そのものをまるごと否定したいときに使います。

「……ではない」という言葉が含まれるルールも、NOTブロックを使えばどんな条件も一瞬でひっくり返せます!

【例】「NOT」の魔法を試してみよう!

例えば、「もし、りんごが5個以上なら」という条件があったとします。

これに「NOT」をはめ込むとどうなるでしょう?

もし「NOT (りんご ≧ 5)」なら りんごが5個以上ではない(=つまり、4個以下だね!)

こうして条件を否定することで、「もし空きがあるなら(=満タンではないなら)」といった、「〇〇じゃない状態」を判定したいときに大活躍します。

MakeCodeでNOT演算子を使用したプログラムの例。ぼくのりんごの数が5以上ではない場合を判定し、条件によって表示を変えるブロック構成。
図5:「NOT(ではない)」を使った条件の反転。「ぼくのりんご ≧ 5」という条件を「ではない」で包むことで、「5個以上ではない(=4個以下)」という逆の状況を判定しています。NOTを使うと、条件式をひっくり返す魔法が使えるようになります。

このプログラムを動かして、ボタンAを押してみて!

ぼくのりんごが10個(5以上)のときは『うれしい顔』、3個(5未満)のときは『かなしい顔』が表示されたかな?

NOT演算子が条件をひっくり返すから、ふだんの『もし~なら』とは逆の結果になるのがポイントだよ!

【コラム】エンジニアのデバッグ術:trueとfalseの魔法

プログラムが思い通りに動かない時、プロのエンジニアは「この条件式、今本当に真(true)になっている?」と疑って実験します。

そんな時に役立つのが「論理」ブロックの中にある論理値「真(true)」「偽(false)」という2つの魔法のブロックです。

「真・偽」はスイッチのON/OFF

この2つは、プログラムの中で「いま条件が成り立っているか」をはっきりさせるスイッチのようなものです。

  • 「真(true)」:スイッチON(その通り!)
  • 「偽(false)」:スイッチOFF(違う!)

強制的に動かして実験しよう!

「なぜか動かない!」という時は、条件式をわざと「真(true)」や「偽(false)」に書き換えてみてください。

  • 強制的にONにする: [もし] (真) [なら] と書けば、条件式に関係なく「門番」は必ず開きます。これで「門の中の処理」が正しいか確認できます。
  • 強制的にOFFにする: [もし] (偽) [なら] と書けば、門番は絶対に開きません。これで「でなければ」の処理が正しく動くか確認できます。

「プログラムが動かない=自分が悪い」と落ち込む必要はありません。

エンジニアはこうして、わざと条件を操作して「どこで止まっているのか?」という境界線を一つずつ探し出しているのです。

まずは難しく考えず、truefalse を門番の条件にはめ込んで、プログラムの挙動を実験してみてください。

そうすれば、きっと迷路を解くような感覚でバグを見つけられるはずですよ!

今日のまとめ:論理演算でプログラムをシンプルに!

今日学んだ、プログラミングをスマートにするための大切なポイントをおさらいしましょう!

  • ネストから論理演算へ: 複雑な入れ子構造を、「AND(かつ)」や「OR(または)」で「合体」させることで、プログラムをシンプルで読みやすく保てます。
  • NOTの力: 「〜ではない」という否定の条件も、NOTの魔法の鏡を使えば一瞬でひっくり返せます。
  • true / false のデバッグ: プログラムが思い通りに動かない時は、条件を truefalse に書き換えて、門番を強制操作してみてください。どこで止まっているのか、原因を素早く突き止めることができます。

論理演算は、プログラムという「門」の開け方を決める重要な鍵です。

今日学んだことを使って、ぜひ自分だけの自由なルールをたくさん作ってみてください。

【宿題】論理演算で最強の門番を作ろう!

さて、今日の内容は理解できたかな?

ここからは、みんな自身の手で「門番」を改造する時間だ!

プログラムは、ただ動かすだけじゃなくて、自分で工夫してルールを変えるのが一番の醍醐味だよ。

用意された条件式をヒントに、自分だけのルールを作ってみよう!

宿題ミッション:
  1. ANDのミッション: 「ぼくのりんご > 0」かつ「いもうとのりんご < 5」のときだけ配るプログラムを作ろう。
  2. NOTのミッション: 「ぼくのりんご = 0」という条件にNOTをつけて、「在庫が0ではないとき」だけ動くIF文を作ってみよう。
  3. 【実験】: if (true)if (false) を実際に書いて、どちらが「必ず動く門番」で、どちらが「絶対に動かない門番」か確かめてみよう!

プログラミングのコードは、コンピュータに対する君たちの「命令」であり、同時に「君たちの考え方」そのものです。

「AND」「OR」「NOT」を使いこなせるようになると、これまでよりもずっと賢いプログラムが書けるようになるよ。

さあ、今日学んだ魔法を使って、どんな面白い動きを作る?

失敗を恐れず、たくさん実験して「プロのエンジニア」の第一歩を歩み出そう!

どんな変数を使って門番を作ったか、あるいは「実験」でどんな不思議な挙動を見つけたか、エラーやバグにぶつかったかな?

ぜひ自分なりのプログラムとして完成させてみてください。

もし、思った通りに動かなくても大丈夫。

エンジニアの仕事の半分は「なぜ動かないのか?」を考えるデバッグの時間です。

今日学んだ「真(true)」と「偽(false)」の実験術を使って、一つひとつ門番の心の中を覗いてみよう!

次回の授業で、みんなの作った「最強の門番」の話を聞けるのを楽しみにしているよ!

次回の予告

次回の第9回テーマは「【第9回】 【micro:bit講座 第9回】配列の基本:変数がいっぱいで大変!「整理棚(配列)」でデータをまとめよう!(7/29 10時公開予定!)」です。

今日のレッスンが役に立った、面白かったという方は、ぜひコメントをお願いします!

あなたの応援が、次のエネルギーになります。

それでは、また次のレッスンでお会いしましょう。

ありがとうございました!

カリキュラム一覧(進捗マップ)

コメント