【第6回】 【micro:bit講座 第6回】条件分岐の基本:IF文で「もし〜なら」をプログラミングしよう!

MakeCode × micro:bit編

第6回となる今回のテーマは、「りんごの在庫を自動で守る!条件分岐の基本」。 前回、家族全員分のりんごを管理するプログラムを作りましたが、操作ミスをすると「りんごがマイナスになる」という不思議な現象(バグ)に直面したはずです。

【第6回】では、その問題を根本から解決するプログラミングの最強の魔法、「条件分岐(IF文)」を学んでいきます。 「もし〇〇なら、△△する」という論理をmicro:bitに教えることで、どんな操作をしても間違えない、賢い「自動在庫管理システム」へとプログラムを劇的に進化させます。

さあ、これまで「ただ計算するだけ」だったプログラムを、「自分で状況を判断して動く」賢いロボットに変身させましょう!

前回の宿題:答え合わせ

本題に入る前に、前回の宿題を覚えていますか?

「お母さんのりんご配りゲーム」として、りんごの在庫管理に挑戦してもらいましたね。

<宿題の内容>

  1. りんごを配る前に、Aボタンで「残数」を確認する。
  2. 3個以上あればBボタンで配る。
  3. 足りなければA+Bボタンで補充する。
MakeCode画面。お母さんのりんごを管理する宿題の解答例。Aボタンで残数表示、Bボタンで減算、A+Bボタンで加算を行うシンプルなプログラム。
図1:宿題の解答例「お母さんのりんご配りゲーム」。A/B/A+Bの各ボタンに「確認」「配る」「補充」の役割を割り当てています。実際に操作して、マイナスになる瞬間を体験してみましょう。

実際にやってみて、どうでしたか? 「ついBボタンを連打してしまって、りんごがマイナスになった!」 「操作を間違えて、在庫がすぐに0以下になってしまった……」 そんな「悔しい体験」をした人も多いはずです。

実は、それこそが今回の最大のヒントなんです。 人間が一生懸命ルールを守ろうとしても、うっかりミスは誰にでも起きてしまいますよね。今回のような「りんごの数」ならやり直しもききますが、もしこれが「ロケットの燃料」や「銀行の預金残高」だったらどうでしょう? 確認を忘れてボタンを一つ押しただけで、大爆発や大損害なんてことになるかもしれません。

だからこそ、私たちはプログラミングを使います。 どんなに人間がうっかりしていても、コンピューターが「ルールを守れないなら、そもそも計算をさせない」というガードを固めてくれる。この「絶対にマイナスにさせない」自動化こそが、プログラミングの真骨頂なのです。

さあ、これまでの「人間頼みのルール」を卒業して、micro:bit自身に賢い判断(IF文)をさせてみましょう!

今日のミッション:りんごがマイナス!? まちがいをなおそう!

今回も前回の「プログラム4」の続きから作ります。「複製(コピー)」というテクニックを使って「プログラム6」を準備をしましょう。

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

「ぼくのりんご」「あにのりんご」がマイナス?

前回、お母さんのりんご管理で「マイナスになるバグ」を見つけましたが、実は第4回で作ったプログラムにも同じバグが潜んでいたことに気づきましたか?

私たちが作った「ぼく」や「兄」が「妹」にりんごをあげるプログラム。 あれも実は、手元にりんごが1個もないのにボタンを押すと、持ち数が「-1」「-2」……と、現実ではありえない数字に減り続けてしまうのです。

まずは、第4回で作ったプログラムを振り返ってみましょう。

MakeCode画面。第4回で作成した「ぼく」「あに」「いもうと」のりんご管理プログラム。Aボタンで「ぼく」、Bボタンで「あに」の数を表示し、A+Bボタンでりんごを移動させる計算処理が含まれている。
図2:第4回で作成したプログラム。「ぼく」や「兄」から「妹」へりんごを配る計算ロジックです。一見完璧に見えますが、実はここに「りんごがマイナスになっても配り続けてしまう」というバグが潜んでいます。

A+Bボタンを押すと、それぞれの変数からりんごが引かれ、妹に足されますよね。でも、もし「ぼくのりんご」が0個のときにA+Bボタンを連打したらどうなるでしょうか?
コンピューターは計算を止めてくれないので、持ち数はどんどんマイナスになってしまいます。これが「バグ」です。さあ、この問題を解決して、プログラムを「バグ知らず」にしていきましょう!

なぜバグを放置してはいけないのか?

プログラミングの世界では、「小さなバグを見過ごすと、あとで取り返しがつかなくなる」という鉄則があります。 もしこれが本物の在庫管理システムだったら、マイナスのりんごを配送しようとしてトラックが空っぽで届く……なんていう大惨事になっていたかもしれません。

今回は、「IF文(条件分岐)」を使って、「ぼく」も「兄」も、全員が正しい在庫管理ができる「完璧な家族りんご管理システム」へと進化させましょう!

ミッション1:どうなればいいのか?

今回のゴールは、誰もが納得できる「完璧な家族りんご管理システム」を作ることです。 具体的には、以下の2つのルールをプログラムに守らせます。

  1. ぼくのりんごが1個以上あるなら:妹に1個りんごをあげる(そうでなければ何もしない)
  2. 兄のりんごが1個以上あるなら:妹に1個りんごをあげる(そうでなければ何もしない)

このように、「ある条件が満たされたときだけ、特定の動きをする」という仕組みを、プログラミングの世界では「条件分岐(じょうけんぶんき)」と呼びます。

そして、そのための命令ブロックが 「IF文(イフぶん)」 です。 この「IF文」こそが、今までただ計算するだけだったmicro:bitに「判断力」を与える、プログラミングにおける最強の魔法なのです。

【解説】IF文(条件分岐)という最強の門番

プログラムに「もし〜なら」を教えるのが IF文(イフぶん) です。 これまでのプログラムは、命令されたら中身を考えずに実行する「ロボット」のようなものでした。でも、IF文を使うと、「計算をする前に、自分で条件を確認する」という賢い判断ができるようになります。

IF文の基本的な構造

MakeCodeの「論理」カテゴリーにあるこのブロックを見てみましょう。

このブロックは、大きく分けて2つのエリアでできています。

  1. 「もし(条件)」のエリア: ここには「ぼくのりんごは1個以上かな?」といった、「イエスかノーで答えられる質問」を入れます。
  2. 「なら(実行)」のエリア: ここには、条件が「イエス(正しい)」だったときにだけやってほしい仕事を入れます。

IFブロックの正体

論理カテゴリーにある「もし~なら」ブロックは、そのままでは何もしてくれません。この中に「比較ブロック(=や≧など)」を組み合わせることで、初めて「在庫が1個以上あるかな?」という質問ができるようになります。

MakeCodeのIF文ブロックの構造。左側は「もし(条件)なら(実行)」というIFブロック、右側は「論理」カテゴリーから選んだ比較用ブロック「= 0」を組み合わせた様子。
図3:IFブロックの構造。「もし〜なら」ブロックの中に、条件チェックを行う比較ブロック(=や≧など)を組み合わせることで、コンピューターに「判断力」を与えることができます。

「ぼくのりんご ≧ 1」といった式を、パズルのようにカチッとはめ込んでみてください。これができれば、あとはそれを「ボタンを押したとき」ブロックの中に入れるだけです!

コンピューターの思考回路

IF文を設置すると、プログラムは以下のような思考回路で動くようになります。

  • ステップ1(質問): 「今、ぼくのりんごは1個以上あるかな?」
  • ステップ2(判断):
    • イエス(1以上ある): 「よし、妹に1個あげよう!(計算実行)」
    • ノー(0個以下だ): 「おっと、これ以上は無理だ。何もしないでおこう!(計算スキップ)」

このように、「ダメなときは何もしない」という判断が加わることで、マイナスというバグが物理的に発生しなくなるのです。

IF文の動作比較図。左側は「条件成立:りんごがある」場合で、門番が道を開き計算が実行される様子。右側は「条件不成立:りんごがない」場合で、門番が通行止めにして計算がスキップされる様子。micro:bitのブロック構造を用いて解説している。
図4:IF文(条件分岐)の動作比較。条件が満たされると門番が道を開けて計算が実行されますが、条件を満たさない場合は通行止めとなり、バグの原因となる計算をスキップします。これが「絶対にマイナスにさせない」ための賢い判断の仕組みです。

「なぜマイナスにならないの?」への答え

多くの人が「計算式を書いていないのに、どうやって減らないようにするの?」と不思議に思います。 でもこの図を見てください。右側の「条件不成立」のルートに進んだとき、そもそも「計算ブロック(減算)」を通っていないですよね?

「計算そのものを実行させない」。これこそが、バグを物理的に防ぐためのエンジニアの知恵なのです。

ミッション2:門番(IF文)を設置せよ!

今回は以下の2箇所に「門番(IF文)」を設置します。

  1. ぼくが妹にりんごをあげる処理(条件:ぼくのりんごが1個以上あるなら)
  2. 兄が妹にりんごをあげる処理(条件:兄のりんごが1個以上あるなら)

これらすべてに「もし〜なら」という判断基準を組み込むことで、どんなにボタンを連打しても、絶対にマイナスにならない「最強のプログラム」が完成します。

さあ、皆さんのmicro:bitを、バグ知らずの堅牢(けんろう)なシステムに改造してみましょう!

今までのプログラムに「IF文」という門番を設置して、バグを根こそぎ駆除していきましょう。

ミッション3:バグを徹底的に駆除せよ!

さあ、いよいよ実践です! 今までのプログラムに「IF文」という門番を設置して、バグを根こそぎ駆除していきましょう。

手順:プログラムの改造

MakeCodeのツールボックスから「論理」を開き、[もし < > なら] ブロックを探してください。

  • ヒント: [もし < > なら] ブロックの < > の部分には、「論理」の中にある [ 0 < 0 ] のような比較ブロックを入れます。
    • 「ぼくのりんご」 >= 「1」

このブロックを、「ぼく」が妹にあげる計算処理の外側にカチッとはめ込んでみてください。

【改造のポイント】 もし、これまでのプログラムの構造が複雑でブロックが動かしにくい場合は、一度「妹にりんごをあげる処理」の部分だけを外して、IFブロックの中に入れてから、元の場所に戻すのがコツですよ!

さあ、完成です!

ここまでお疲れ様でした!IF文を正しく設置できれば、あなたのプログラムはこんな形になっているはずです。

IF文を組み込んだ、完成版のりんご管理プログラム全体図。「A+Bが押されたとき」のイベントブロック内に、「もし(ぼくのりんご ≧ 1)なら」と「もし(あにのりんご ≧ 1)なら」という2つのIFブロックが設置されている。
図5:完成した「最強のプログラム」。IF文という門番を設置したことで、りんごの在庫が1個以上あるときだけ計算が実行されるようになりました。これで、どんなにボタンを連打してもマイナスになることはありません!

もし自分の画面と少し違っていても大丈夫です。ブロックの位置を並べ替えて、この画像と同じ構造になるように調整してみてください。それができれば、今日からあなたも「バグを駆除できるエンジニア」の仲間入りです!

今日のまとめ:バグ知らずの「最強プログラム」を作ろう!

今回のレッスンでは、プログラムを賢く進化させるための「IF文」について学びました。

自分で判断して動くプログラム: ただ命令をこなすだけだったmicro:bitが、自分の持っている「りんごの数」に応じて行動を変えられるようになりました。

バグは「失敗」ではなく「進化のチャンス」: 前回発見した「マイナスになる」というバグは、プログラムが「状況を判断できていない」ことで起きていました。失敗を分析することで、プログラムをより頑丈にできることを学びました。

IF文(条件分岐)はプログラムの「門番」: 計算を実行する前に「条件(もし〜なら)」を確認することで、ミスを防ぐ「門番」の仕組みを手に入れました。

「計算スキップ」というエンジニアの知恵:
何でも計算させるのではなく、「条件を満たさない時は何もしない」という判断を取り入れることで、物理的にバグを発生させない「堅牢(けんろう)なシステム」を作ることができました。

エンジニアへの第一歩

今日、あなたがコードに組み込んだ「門番(IF文)」は、プロのエンジニアがどんな大規模なシステムを作るときでも必ず使う、まさに「プログラミングの真髄」です。

今日であなたのプログラムは、人間がうっかりミスをしても絶対に壊れない「最強のシステム」に進化しました。自分で判断し、ルールを守り、正しく動く。この「賢いプログラム」を作る喜びを、ぜひこれからの開発にも活かしていってください!

【宿題】システムに「心」と「声」を授けよう!

今日、「マイナスを発生させない最強の門番(IF文)」をプログラムに導入しました。これでプログラムは絶対に壊れなくなったけれど、これだけだと門番は黙って門を閉ざすだけの「冷たいロボット」かもしれません。

「りんごがないよ!」と教えてくれる親切なシステムに改造して、プログラムに「心」を吹き込みましょう!

宿題ミッション:

警告アラートを実装せよ!

プログラム6を複製して「宿題6」というプロジェクトを作り、以下の改造を行ってください。

[鳴らす] ブロックも追加して、エラー音を鳴らしてみよう。

「でなければ(else)」を呼び出そう

「もし ぼくのりんご ≧ 1 なら」ブロックの左下にある「+」ボタンを押すと、下に「でなければ(else)」という枠が出現します。

「もし あにのりんご ≧ 1 なら」ブロックも同様に改造しましょう。

LEDと音で警告する

「でなければ」の枠の中に、[アイコンを表示] ブロックを入れて悲しい顔(☹)やバツ印(×)を表示させよう。

エンジニアの知恵袋:なぜ「警告」が必要なの?

プログラミングの世界では、これを「ユーザーインターフェース(UI)」の改善と呼びます。 どんなに正しい計算をするプログラムでも、使っている人が「あれ? なんで動かないのかな?」と不安になったら、それは良いシステムとは言えません。

「何が起きたか」を、音や光で正しく伝えること。 それができれば、君のプログラムはもう「ただの計算機」ではなく、誰かの役に立つ「立派な製品」の第一歩になります!

次回の予告

次回の第7回テーマは「【第7回】 【micro:bit講座 第7回】IF文のネスト(入れ子):条件の中に条件を入れ、より緻密な判断をしよう!7/15 10時公開予定!)」です。

コメント