求めよ されば与えられん。
-- マタイの福音書7:7-8
プログラムはプログラミング言語で書きます。自然言語が何千種類もあるのと同様、プログラミング言語にも何百種類もありますが、本書ではJavaScriptというプログラミング言語を使います。ただし、本書はJavaScript入門ではありません。本書は「プログラミングという行為はなんぞや」ということを、プログラミングの経験があまりない人でもわかることを目標としております。
言語は言の葉の集まり
それでは、プログラミング言語を実際に学ぶ前に、日本語の復習を少ししましょう。
まずは以下の文章をご覧下さい。
だんしんだ
いきなり著者を殺してしまいました(笑)が、この短い文章にも、構造があることがすぐにみてとれます。「だ」と「ん」という文字を合わせて「だん」という単語が出来て、それが「主語」。「しんだ」という単語がすぐ後ろにあって、これが「述語」で「動詞」で「過去形」。
プログラミング言語も、この点においては全く変わりません。たとえば以下の「文章」をご覧下さい。
alert('Dan is Dead!');
'a','l','e','r','t'で"alert"という単語で動詞。'Dan is Dead!'というのが名詞。全部あわせると「'Dan is Dead!'とalertしろ」おわかりいただけると思います。alertとは何かですが、これは英語で「警告する」という意味で、JavaScriptではブラウザーが警告メッセージをダイアログボックスに表示します。
名詞があって動詞がある。これが合わさって文になり、文が連なって段落となり、段落が連なって章となり、章が連なって本となる....この点において、プログラミング言語は私たちが普通に話す日本語や英語といった自然言語と何ら変わるところはありません。
プログラミング言語には命令形しかない
ただし、プログラミング言語と自然言語が決定的に異なる点が一つあります。
それは、プログラミング言語には命令形しかないということです。それもそのはず、プログラミング言語というのはコンピューターに何をすればいいのかを伝える、すなわちコンピューターに命令するための言語だからです。そこには過去形も現在形も未来系も不要です。「やる」も「やらぬ」も不要でただ「やれ」だけがあればいいのです。
ここで英語を少し思い出してもらいましょう。命令形はどうなっていますか? "do it."という具合に、何の活用もない動詞が最初にあって、その後に(自動詞でなければ)目的語が続いているだけです。主語はありません。厳密には"you"が省略されているのですが、誰がやるのかは「言うまでもない」のでわざわざいいません。
さきほどの例をここでもう一度見てみましょう。alert('Dan is Dead!');
、英語に直せばそのまま"alert 'Dan is Dead'."となります。異なるのは、JavaScriptの方には括弧があって、英語ではピリオド . がある位置にセミコロン ; があるだけ。
コンピューター言語が、自然言語よりも遥かに簡単な一番の理由がこれです。JavaScriptに限らず、コンピューター言語で書かれた文書(これをソースコードと呼びます)が、英単語がたくさん出てくるのに「英文」には見えないのは、それが命令を連ねているに過ぎないからです。
プログラム == 命令+条件分岐
そのため、プログラムの一文は、命令(command)と呼ばれることもあります。それではプログラム全体もまたコマンドかというと、それは半分正解です。実際コマンドはプログラムを構成するのに欠かせない要素で、コマンドのみからなるプログラムも存在するのですが、それを見ても「プログラム」している気にはなかなかなれません。
ここで、前に見たプログラムの定義をもう一度見てみましょう。
そうです、仕組みです。仕組みであるということは、単に命令を実行するだけでは足りない場面が出てきます。たとえば以下の命令を考えてみてください。
(ドアを開けてその方を入れてあげなさい)
これを無条件にやったら、泥棒さんまで家の中にまで入ってきてしまいます。このプログラムは公共施設の自動ドアでは使えても、住宅の玄関には使えないでしょう。
プログラミング言語でもこれは同じで、ある条件を満たした時だけ実行される仕組みがどんなプログラムでも必ず用意されています。それをJavaScriptで実践してましょう。
if (prompt('Who are you?') == 'friend'){ alert('Welcome!'); }
これを実行すると、"Who are you"と聞かれますが、"friend"と答えない限り、何も起きません。"friend"と答えると、"Welcome!"という返事が返ってきます。
以上は「条件が成立した場合のみ何かを実行する」方法でしたが、「条件が成立しなかった場合には別なことを実行する」ようにすることも出来ます。
if (prompt('Who are you?') == 'friend'){ alert('Welcome!'); }else{ alert('Go away!'); }
この、条件によって命令を変えることを、条件分岐と呼びます。
実は全てのプログラムは、命令と条件分岐から出来ています。前に述べたように、条件分岐を含まない、命令だけからなるプログラムも存在し、こういった場合にはわざわざプログラムと呼ばずコマンドと呼ぶこともありますが、通常プログラムを書く場合には、どこかに必ず条件分岐があるものですし、またこの条件分岐をどう設定するのかというのが、プログラミングにおいて一番頭を使うところでもあります。
とはいえ、プログラムには命令と条件分岐しかない、ということは一生覚えておいてください。プログラミング言語では、自然言語より遥かに覚えなければならないことは少なく、なぜ少ないかといえばプログラムは命令と条件分岐だけで書けてしまうからなのですから。
まとめ
- プログラミング言語も、単語で出来ている
- プログラミング言語には命令形しかない
- プログラムは命令と条件分岐からなる
Dan the Programmer
すこし、好きになってきました、プログラミング