第2章「人生は選択の連続である」
どんなすごいプログラムも、突き詰めていけば3つの処理の繰り返しである。数学的にも証明されている。(ASCII.jpデジタル用語辞典より)
とはかの有名なシェイクスピアの談。
ここでは、プログラムを書く上で重要な3つの処理のうち、主に選択を解説しまうす。
まずはじめに「3つの処理」とは何か。
- 逐次
- 上から順に処理していく
- 選択
- 条件によって処理内容を変える
- 反復
- ある条件を満たす間、処理を繰り返す
以上の3処理のことを表します。
まぁ、正直よく分からないと思うので説明していきます。
朝、起きてから外出するまでの手順を思い出してみてください。 (人によって違うだろうところは空気よんでください)
- 目を開ける
- 会社に行くべきか?
- 行くべきなので3へ
- 起き上がる
- お腹は減っている?
- 減っていないので朝食は食べずに5へ
- 歯を磨くべき?
- 磨くべきなので6へ
- 歯磨き粉はある?
- あれば歯を磨いて7へ、なければ口をゆすいで7へ
- 洋服ダンスを開ける
- 一番端にある服を見る
- 着たければ着て9へ、気に入らなければその横の服を見る(8を繰り返す)
- 家を出る
だいたいこんな感じでしょうか??
人間は常に何かを考えて行動しています。その行動は基本ゴールに向かって順に、途中で条件分岐や繰り返しを挟みながら進みます。 プログラムの世界でも同様の処理が行なわれているわけです。むしろプログラムは書かれたことしかやらないので、人間より厳格です。 プログラムは常に ①上から順に処理をする②条件分岐をする③繰り返す この三つの処理で成り立っていると言っても過言ではありません。
逐次とは
繰り返しになってしまいますが、プログラムは原則上から下に処理が流れていきます。横や斜めに進むことはありません(多分ない)。水が高いところから流れるがごとく、上から下に向かって順々に書かれた内容に沿って忠実に処理を実行していきます。 この考え方は基礎的ながら重要なので覚えておきましょう
選択とは
ある条件にあっているかあっていないか、それによって処理の内容を分けることです。 例えば、あなたが家を出て最寄駅に到着した時、定期券を持っているか確認しました。
[もし]
[定期券を持っている] → 会社に向かう
[持っていない] → 家に戻る
これをプログラムの世界で表現しようとするとこうなります。
if 定期券を持っている { 家に戻る } else { 会社に向かう }
これがいわゆるプログラミング、ことSwiftでのif文です。
選択の制御構文の一つであるif文はその名の通り、「もし〇〇だったら△△する、それ以外は××する」というように条件によって処理を変えたい時に使用します。
言語によって細かい違いはありますが、プログラムにおけるif文の基本的な書き方はこうです。
if 条件1 { 条件1に一致した場合に実行するプログラム } else if 条件2 { 条件1に一致せず、条件2に一致した場合に実行するプログラム } else { 全ての条件に一致しなかった場合に実行するプログラム }
先ほどの例を書き直してみるとこんな感じでしょうか。一部よく分からないところがあると思いますが、今はまだ理解しないで大丈夫です。
swift var commuterPass: Bool if commuterPass { you.goToOffice() } else { you.goBackToHome() }
commuterPass(定期券)を持っていれば、goToOfficeメソッドを実行して会社に向かい、持っていなければgoBackToHomeメソッドを実行して家に戻ります。 メソッドとか普通に使っちゃってますが、次の次くらいで説明します。今はそういう処理をするんだ、くらいでおk。
では、内容がガラッとかわりますが、変数の内容によって処理を変えるサンプルコードを書いてみます。 数学の点数が100点の時はPerfect!, 100点未満80以上の場合、Great!, 80点未満50点以上の場合、OK!, それ以下の場合、Study!と表示するプログラムです。
変数mathPointを変更すれば、その値によって処理結果が変わります。サンプルでは80点なのでGreat!と表示されますが、 65点や30点など値を変えてあげれば結果が変わります。 このようにして条件分岐をしながらプログラムは進んでいくわけですね。
if文の基本的な内容は以上です。
ここまでお読みいただきありがとうございました。
補足
ソースコードの中でしれっと「==」とか「&&」とか使っていますが、これはそれぞれ以下のような意味があります。大体は数学と同じです。 * == - 左辺と右辺の値が同じ * >= 左辺の方が右辺より大きい * && - 「○○かつ△△」 つまり「100 > mathPoint && mathPoint >= 80」は「mathPointが100点未満かつ80点以上」を表します。
「||」なんてものもありますが、これは&&と反対で「または」を表します。高校あたりでやったド・モルガンの法則あたりの話です。 やっときゃよかった数学。