もしも、の文法

よみもの+手を動かす時間:およそ25分

あなたは毎日、場合分けしている

「もし雨が降っていたら、傘を持っていく」。「もし売り切れていたら、別の店に行く」。あなたは今日だけでも、この形の文を数えきれないほど生きています。

人間は、場合分けの名人です。プログラミングの「もし」は新しい難しい概念ではなく、この毎日の場合分けを、察しない読み手にも通じる形にしたものです。前のレッスンの終わりに予告した道具を、ここで手に入れます。

ほんとうと、うそ

「もし」を書く前に、ひとつ確かめたいことがあります。下を実行してください。

にわ語
3 が 2 より おおきい と いう
3 が 5 より おおきい と いう
「はれ」 が 「はれ」 と おなじ と いう

Ctrl+Enter でも実行できます

「3 が 2 より おおきい」という文に、コンピュータは「ほんとう」と答えました。3 + 25 という値になるのと同じように、条件は「ほんとう」か「うそ」、どちらかの値になります。条件とは、答えのちゃんと出る問いのことです。

にわ語のくらべ方は3つです。A が B より おおきいA が B より ちいさいA が B と おなじ——3つめは、数どうしのほか文字列どうしも比べられます。

日本語の「もし」はもっと寛大で、「もし寒そうなら」のような曖昧な条件も受け取ってくれます。でも、にわ語の読み手は察しないのでした。受け取れるのは、ほんとうかうそかがはっきり決まる問いだけです。

よりみち:「ほんとう/うそ」の発明者

条件が値になる、という考えには発明者がいます。19世紀の数学者ジョージ・ブールは、「真か偽か」を数のように計算できることを示しました(1854年『思考の法則』)。世界中のプログラミング言語が真偽の値を boolean(ブーリアン)と呼ぶのは、ほぼ独学で数学者になったこの人の名前の記念です。

もし、ならば

条件という部品がそろえば、「もし」の文が書けます。

にわ語
30 を きおん とよぶ
もし きおん が 25 より おおきい ならば {
  「きょうは あつい」 と いう
}

Ctrl+Enter でも実行できます

条件がほんとうのとき、{ } の中が実行されます。では、1行目の 3010 に変えて実行してみてください。今度は、何も言いません。

条件がうそのとき、{ } の中は読み飛ばされます。書いた文が、読まれないことがある——レッスン1で「コンピュータは上から順番に読む」と言いましたが、ここで初めて、プログラムは道を選びはじめました。

ちがえば、の側

うその場合に黙っているだけでは、半分です。ちがえば を足すと、うそのときの行き先を書けます。

にわ語
30 を きおん とよぶ
もし きおん が 25 より おおきい ならば {
  いろ を あか にする
}
ちがえば {
  いろ を そら にする
}
まる を かく

ここに絵があらわれます

Ctrl+Enter でも実行できます

まず予想してください——1行目が 30 のとき、まるは何色になるか。実行して確かめたら、3020 に変えてもう一度。

1行目の数を変えただけで、ちがう絵が出てきます。プログラムがはじめて、状況に応じてふるまいを変えました。そして道は、かならずどちらか片方だけを通ります。両方は通りません。

もしの中の、もし

ちがえば{ } の中には、どんな文でも入ります。くりかえしのときと同じで——「もし」自身も入ります。先に言っておきます。ここは多くの人がつまずきます。つまずくのが普通です。

にわ語
15 を きおん とよぶ
もし きおん が 25 より おおきい ならば {
  いろ を あか にする
  「なつの まる」 と いう
}
ちがえば {
  もし きおん が 10 より おおきい ならば {
    いろ を みどり にする
    「はるの まる」 と いう
  }
  ちがえば {
    いろ を そら にする
    「ふゆの まる」 と いう
  }
}
まる を かく

ここに絵があらわれます

Ctrl+Enter でも実行できます

読み方は、外側からです。まず「25より大きいか」。ほんとうなら夏で、おしまい。ちがえば、次の問い「10より大きいか」へ。日本語の「暑ければ夏、そうでなくて暖かければ春、そうでもなければ冬」と同じ連鎖です。

1行目の 15305 に変えて、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通りに分かれているなら、それが正解です。

このレッスンで分かったこと

  • 条件は、「ほんとう」か「うそ」という値になる問いである
  • 書き方:もし 条件 ならば { … } ちがえば { … }——道は片方だけを通る
  • 条件がうそのとき、{ } の中は読み飛ばされる。プログラムは道を選べる
  • 「もし」は入れ子にできる。「そうでなければ、次の問い」の連鎖で、何通りにも分かれる