もしも、の文法
あなたは毎日、場合分けしている
「もし雨が降っていたら、傘を持っていく」。「もし売り切れていたら、別の店に行く」。あなたは今日だけでも、この形の文を数えきれないほど生きています。
人間は、場合分けの名人です。プログラミングの「もし」は新しい難しい概念ではなく、この毎日の場合分けを、察しない読み手にも通じる形にしたものです。前のレッスンの終わりに予告した道具を、ここで手に入れます。
ほんとうと、うそ
「もし」を書く前に、ひとつ確かめたいことがあります。下を実行してください。
3 が 2 より おおきい と いう 3 が 5 より おおきい と いう 「はれ」 が 「はれ」 と おなじ と いう
Ctrl+Enter でも実行できます
「3 が 2 より おおきい」という文に、コンピュータは「ほんとう」と答えました。3 + 2 が 5 という値になるのと同じように、条件は「ほんとう」か「うそ」、どちらかの値になります。条件とは、答えのちゃんと出る問いのことです。
にわ語のくらべ方は3つです。A が B より おおきい / A が B より ちいさい / A が B と おなじ——3つめは、数どうしのほか文字列どうしも比べられます。
日本語の「もし」はもっと寛大で、「もし寒そうなら」のような曖昧な条件も受け取ってくれます。でも、にわ語の読み手は察しないのでした。受け取れるのは、ほんとうかうそかがはっきり決まる問いだけです。
⟡ よりみち:「ほんとう/うそ」の発明者
条件が値になる、という考えには発明者がいます。19世紀の数学者ジョージ・ブールは、「真か偽か」を数のように計算できることを示しました(1854年『思考の法則』)。世界中のプログラミング言語が真偽の値を boolean(ブーリアン)と呼ぶのは、ほぼ独学で数学者になったこの人の名前の記念です。
もし、ならば
条件という部品がそろえば、「もし」の文が書けます。
30 を きおん とよぶ
もし きおん が 25 より おおきい ならば {
「きょうは あつい」 と いう
}Ctrl+Enter でも実行できます
条件がほんとうのとき、{ } の中が実行されます。では、1行目の 30 を 10 に変えて実行してみてください。今度は、何も言いません。
条件がうそのとき、{ } の中は読み飛ばされます。書いた文が、読まれないことがある——レッスン1で「コンピュータは上から順番に読む」と言いましたが、ここで初めて、プログラムは道を選びはじめました。
ちがえば、の側
うその場合に黙っているだけでは、半分です。ちがえば を足すと、うそのときの行き先を書けます。
30 を きおん とよぶ
もし きおん が 25 より おおきい ならば {
いろ を あか にする
}
ちがえば {
いろ を そら にする
}
まる を かくここに絵があらわれます
Ctrl+Enter でも実行できます
まず予想してください——1行目が 30 のとき、まるは何色になるか。実行して確かめたら、30 を 20 に変えてもう一度。
1行目の数を変えただけで、ちがう絵が出てきます。プログラムがはじめて、状況に応じてふるまいを変えました。そして道は、かならずどちらか片方だけを通ります。両方は通りません。
もしの中の、もし
ちがえば の { } の中には、どんな文でも入ります。くりかえしのときと同じで——「もし」自身も入ります。先に言っておきます。ここは多くの人がつまずきます。つまずくのが普通です。
15 を きおん とよぶ
もし きおん が 25 より おおきい ならば {
いろ を あか にする
「なつの まる」 と いう
}
ちがえば {
もし きおん が 10 より おおきい ならば {
いろ を みどり にする
「はるの まる」 と いう
}
ちがえば {
いろ を そら にする
「ふゆの まる」 と いう
}
}
まる を かくここに絵があらわれます
Ctrl+Enter でも実行できます
読み方は、外側からです。まず「25より大きいか」。ほんとうなら夏で、おしまい。ちがえば、次の問い「10より大きいか」へ。日本語の「暑ければ夏、そうでなくて暖かければ春、そうでもなければ冬」と同じ連鎖です。
1行目の 15 を 30 や 5 に変えて、3つの道をぜんぶ通ってみてください。
ところで、3つの枝をよく見てください。どれも「色を変えて、ひとこと言う」という、同じ形の2行です。よく似たまとまりを3回書いた——「またこれか」の感覚を覚えていますか。この感覚の行き先は、今度はくりかえしではありません。次のレッスンで分かります。
✎ 演習:分岐する物語
下のプログラムは、2通りにしか分かれない小さな物語です。ちがえば の中に「もし」を足して、ぶんきてん が 1・2・それ以外の3通りに分かれる物語に育ててください。できたら、分岐のあとに、どの道を通っても語られる結びの一文を足してみてください。
1 を ぶんきてん とよぶ
「よるの としょかんで、しらない ほんが ひかっていた」 と いう
もし ぶんきてん が 1 と おなじ ならば {
「ひらいてみると、しろい とりが とびだした」 と いう
}
ちがえば {
「みなかったことに して、いえに かえった」 と いう
}Ctrl+Enter でも実行できます
ヒント1(考え方)
3通りに分けるとは、「1か? ちがえば——2か? ちがえば——それ以外」という問いの連鎖です。気温で3つの色に分けた例と、骨組みは同じです。
ヒント2(かたち)
いまの ちがえば { … } の中身を、まるごと もし ぶんきてん が 2 と おなじ ならば { … } ちがえば { … } に置きかえます。結びの一文は、いちばん外側の } のあと、つまり分岐の外に書きます。
こたえ(の一例)
ちがえば の中を もし ぶんきてん が 2 と おなじ ならば { 「そっと たなに もどして、なまえだけ ひかえた」 と いう } ちがえば { 「みなかったことに して、いえに かえった」 と いう } に置きかえ、最後の行に 「つぎの あさも、ほんは そこに ひかっていた」 と いう を足します。1行目を 1、2、3 にして、物語が3通りに変わること、結びだけはいつも語られることを確かめてください。
あなたの物語がこれとぜんぜん違っても、動いて、3通りに分かれているなら、それが正解です。
このレッスンで分かったこと
- 条件は、「ほんとう」か「うそ」という値になる問いである
- 書き方:
もし 条件 ならば { … } ちがえば { … }——道は片方だけを通る - 条件がうそのとき、
{ }の中は読み飛ばされる。プログラムは道を選べる - 「もし」は入れ子にできる。「そうでなければ、次の問い」の連鎖で、何通りにも分かれる