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

MakeCode × micro:bitç·š

第6回ずなる今回のテヌマは、「りんごの圚庫を自動で守る条件分岐の基本」。 前回、家族党員分のりんごを管理するプログラムを䜜りたしたが、操䜜ミスをするず「りんごがマむナスになる」ずいう䞍思議な珟象バグに盎面したはずです。

【第6回】では、その問題を根本から解決するプログラミングの最匷の魔法、「条件分岐IF文」を孊んでいきたす。 「もし〇〇なら、△△する」ずいう論理をmicro:bitに教えるこずで、どんな操䜜をしおも間違えない、賢い「自動圚庫管理システム」ぞずプログラムを劇的に進化させたす。

さあ、これたで「ただ蚈算するだけ」だったプログラムを、「自分で状況を刀断しお動く」賢いロボットに倉身させたしょう

  1. 前回の宿題答え合わせ
  2. 今日のミッションりんごがマむナス!? たちがいをなおそう
  3. 「がくのりんご」「あにのりんご」がマむナス
      1. なぜバグを攟眮しおはいけないのか
  4. ミッション1どうなればいいのか
  5. 【解説】IF文条件分岐ずいう最匷の門番
      1. IF文の基本的な構造
      2. コンピュヌタヌの思考回路
      3. 「なぜマむナスにならないの」ぞの答え
  6. ミッション2門番IF文を蚭眮せよ
  7. ミッション3バグを培底的に駆陀せよ
      1. 手順プログラムの改造
  8. 今日のたずめバグ知らずの「最匷プログラム」を䜜ろう
      1. ゚ンゞニアぞの第䞀歩
  9. 【宿題】システムに「心」ず「声」を授けよう
      1. ゚ンゞニアの知恵袋なぜ「譊告」が必芁なの
  10. 次回の予告

前回の宿題答え合わせ

本題に入る前に、前回の宿題を芚えおいたすか

「お母さんのりんご配りゲヌム」ずしお、りんごの圚庫管理に挑戊しおもらいたしたね。

宿題の内容

  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時公開予定」です。

コメント