Skip to content

Latest commit

 

History

History
164 lines (124 loc) · 7.81 KB

about-programming.md

File metadata and controls

164 lines (124 loc) · 7.81 KB

プログラミングについて

この章ではプログラミング (もしくは、プログラムを組む) とは何かについて、 解説します。多少難解な言葉が出て来ますが我慢して読んで下さい。

プログラミングの目的

プログラミングの目的は、ある問題を、コンピュータの力によって解決する事にあります。 例えば、複雑な計算を実行する事、 ゲームを提供する事、ショッピングサイトを提供する事等様々です。

コンピュータは命令された事しか出来ませんが、 (人間と比べて) 計算速度は高速な為、 問題を解決する方法を人間が考え、 コンピュータが実行する事で最大限のメリットを得られる事が出来ます。

プログラミング入門

プログラミングは一般的に非常に複雑に捉えられがちです。 そのように考えられる原因は、 普段人間が会話等に使っている言語と異なる言語を使用しているからです。

プログラミングの考え方と実生活との違い

特に人間同士の会話であれば、 曖昧に会話を行なったとしてもある程度意思疎通が出来ると思いますが、 コンピュータはそうはいきません。

普段の会話であれば簡単なお願いだったとしても、 非常に面倒臭い言い回しをする必要がある事が多々あります。

例えば、下記の様な話があります。

ある妻がプログラマの夫に「買い物にいって牛乳を 1 つ買ってきてちょうだい。卵があったら 6 つお願い」と言った。 夫はしばらくして、牛乳を 6 パック買ってきた。 妻は聞いた「なんで牛乳を 6 パックも買ってきたのよ!」 夫いわく「だって、卵があったから……」

この話はごくごく一般的な会話ですが、 何故か夫は牛乳を 6 パック購入しています。 妻が怒っている所を見ると、意思疎通が出来ていなかったと思われます。

何故この様な事がおこったのでしょうか? 実は、"卵があったら6つお願い"と言う部分に答えがあります。 妻は夫に、牛乳を1つ買って来てくれとお願いしています。 これは単純な文章で、勘違いをおこす余地はありません。 しかし、卵があったら6つお願いという部分は、 "何を"6つ購入するかを指定していません。 そして、前のお願いの続きである事を考えると、 卵があった場合は、 "牛乳を" 6 つ購入する事をお願いされていると考えられます。

そしてこの考え方は、プログラミングの考え方に率直に従ったものです。 この様な、お願いした時に思ってもいない行動を起されない様にするには、 もっと厳密にお願いする必要があります。

プログラミング的にお願いするには下記の様な文章になります。

「買い物にいって牛乳を 1 つ買ってきてちょうだい。卵があったら、"卵を" 6 つお願い」

違いが理解出来たでしょうか。 日常会話では普通こんな言い方はしません。 この回りくどいお願いこそが、プログラミングの考え方と特徴です。

機械は人間の考えを汲み取る事は出来ませんので、 人間が機械でも分かる命令を書く必要があります。

プログラミングを考える

先程の卵の話では、命令 (お願い) と条件分岐 (場合分け) がありました。 "~して下さい" というお願いはプログラミングの世界では、命令と呼びます。 コンピュータには拒否権はありません。 お願いであろうが、言われた事には絶対に従います。 そして、"であれば" という言い方や、 "もしだったら" の様な特定の条件を付けて、場合分けをする事を、 条件分岐と呼びます。

ここまで説明するとなんとなく察してくる人も多いと思いますが、 プログラミングは、基本的に命令の条件分岐を上手く使う事で、 目的の処理をコンピュータに実行させます。

プログラミングは人間が使う言語と異なる言語を使用する為、 先程の考え方を用いつつ、専用の文法に従う必要もあります。

この授業では、程度の差はあれど、 ある程度一般的な書き方をする言語を使用しています。 その為、授業で使用する Ruby という言語に近い書き方をしつつ、 この章では、日本語で書いてみます。

卵の話を書いてみます。 命令は 1 番上の行から 1 行ずつ順に実行されていきます。

夫が思っていたお願い

if 卵がある
  買う(牛乳を6つ)
else
  買う(牛乳を1つ)
end

妻が思っていたお願い

買う(牛乳を1つ)
if 卵がある
  買う(卵を6つ)
end

上下の違いと共に、Ruby の文法を覚えて貰う必要があります。 まず、if という言葉に関してですが、 これは、"もし~ならば" という意味を持ちます。 その為、"if 卵があった場合"というのは、 もし卵があるならば "end" という言葉までに書かれている命令を実行します。

因みに "end" は "終り" という意味です。

但し、途中に "else" といった文字や、 "elsif" といった文字がある場合は、"end" まで実行せず、 "else", "elsif" という文字の部分迄で止めます。

"else" は "その他" "elsif" は "その他かつ、もし~ならば" という意味です。

"if ~ elsif ~ else ~ end" 等、複数の条件が混ざった文章では、 どれか 1 つの文章のみが実行されます。注意して下さい。

また、"買う()" という書き方は、 メソッド (言語によっては関数) と言う文法で、 どの様な事をして欲しいか、 命令を書く事で命令に沿った結果を得る事が出来ます。 "()" の中には、その命令を実行する為に必要な情報を入れます。 中に入れる数は、Ruby やその他の言語では決められている物が多数ありますが、 日本語で書く場合は、細かい事は気にしない事にします。

メソッド、関数の () の中に入れる物の事を引数 (ひきすう) といいます。 そして、自分でメソッド、関数を自分で作る事も出来ます。

夫の理解を見てみると、 卵があるかどうかによって命令が分岐している事が分かります。 どちらも実行するという事は無く、牛乳を 1 パック買うか、 牛乳を 6 パック買うか、のどちらかを実行するのみです。

その点妻の理解では、 牛乳は絶対に 1 パック購入する事は決まっており、 卵があるのであれば、卵を 6 パック購入する事になっています。

この話から、どういう状況だろうが実行して欲しい命令は 条件分岐に入れてはいけない事が分かります。 また、条件によっては実行したく無い命令があるのならば、 その命令のみ、条件分岐に入れる必要があるという事になります。

プログラムを書く

では、プログラミングの考え方が分かった所で、実際に問題で練習してみます。

問題 1.

牛乳が冷蔵庫にあればシチューを、 牛乳が冷蔵庫に無ければ野菜スープを作る命令文を作る。

問題 2.

牛乳が冷蔵庫にあればシチューを作る、 牛乳は無いがカレールーが有ればカレーを作る、 牛乳が冷蔵庫に無く、カレールーも無い場合、野菜スープを作る命令文を作る。