プログラムの基本構造 ― 順次・分岐・反復
Three Structures前回のレッスンで見たアルゴリズムは、実際には3つの基本構造の組み合わせで組み立てられています。それが順次構造・分岐構造・反復構造です。ここでは、Scratchで実際に組んだプログラムの例を見ながら、それぞれの考え方を押さえていきます。実際にブロックを操作する実習は、講座の中でScratchを使って行いますので、ここでは理屈だけを簡潔に確認しておきましょう。
順次構造 ― 上から順に実行する
順次構造は、書かれた命令を上から順番に、ひとつずつ実行していく、もっとも基本的な構造です。次の例は、セルA2・A3・A4の値をひとつずつ変数に入れ、合計を求めるプログラムの考え方です。
「合計を0にする」→「A2を加算する」→「A3を加算する」→「A4を加算する」という手順を、書かれた順番通りに、上から下へひとつずつ実行していく。これが順次構造です。
分岐構造 ― もし〜なら
分岐構造は、条件によって処理を枝分かれさせる構造です。「もし〜なら、こうする」という考え方で、条件を満たすかどうかによって、実行する内容が変わります。
反復構造 ― ずっと/◯回繰り返す
反復構造は、同じ処理を繰り返し実行する構造です。「ずっと」(条件が変わるまで永遠に繰り返す)や「◯回繰り返す」(決まった回数だけ繰り返す)という形で使われます。次の例は、反復構造の中に分岐構造が組み込まれたプログラムです。
「ずっと」という反復構造の中に、「もし端に触れたなら、跳ね返る」という分岐構造が組み込まれています。反復と分岐は、このように組み合わせて使われることがよくあります。反復構造だけでは同じ動きの繰り返しにしかなりませんが、そこに分岐構造を組み込むことで、状況に応じた柔軟な動きが生まれます。
初期化を忘れない ― お掃除の大切さ
反復構造や順次構造を組むとき、意外と見落としがちなのが初期化(変数を最初の状態、たとえば0に戻しておく処理)です。次の例を見てください。
このプログラムは、「おはよう!」と言ったあと、キャラクターの大きさを200%にして終わります。一見問題なさそうですが、次にこのプログラムを実行する人は、キャラクターがすでに大きくなった状態から始めることになってしまいます。1回目の人と同じ体験を、2回目の人ができないのです。
最初に見たSUM関数の例でも、「合計を0にする」という初期化の処理が入っていなければ、実行するたびに前回の合計が残ったまま、永遠に加算され続けてしまいます。何かをスタートするときは、必ず0の状態から始めること。これはプログラムに限らず、日々のオペレーション(業務の運用)でも同じです。だから、お掃除は重要なんです。
ここからは、基礎の一歩先の話です。初心者の方は読み飛ばして構いません。でも、前回のレッスンで扱った「アルゴリズムの一般性」を思い出したい方には、ちょうどよい実例です。
合計のプログラムを応用すると、平均が出せる
先ほどのSUM関数の例(合計を出すプログラム)は、リストを使う形に少し書き換えるだけで、平均を出すプログラムに応用できます。
合計を出す手順そのものはほとんど変えず、「合計をリストの個数で割る」という一手間を加えるだけで、まったく別の指標(平均)を求めるプログラムになります。これはまさに、前回のレッスンで見たアルゴリズムの一般性(同じ手順の一部を書き換えると、他の目的にも応用できること)の実例です。
教室のひとこま
最後に、このテーマを教えるとき、教室でよく交わされるやりとりを。
講師順次・分岐・反復の3つは、言葉で説明するよりも、実際にScratchでキャラクターを動かしてもらったほうが圧倒的に理解が早い単元です。この回のWebページはあくまで理屈の下地で、本番は講座内の実習で体で覚えてもらっています。