恐らくあなたはプログラミングを始めてみたいと思って、今この記事を見ていることでしょう。
プログラミングの基礎中の基礎、根本的な部分である、条件分岐について解説します。
条件分岐って、言葉からしてもう難しそうなんですけど・・・
言葉だけ聞くとそうかもですね(笑)。
でも、あなたも日常生活で何気なくやっていることなんです。
この記事はこんな人向け
- プログラミングを始めようとしている
- SEやプログラマーを目指している
- プログラムの考え方を知りたい
条件分岐とは
条件分岐は簡単に言えば、分かれ道がある時に条件によってどちらの道に進むか選択することです。
日常生活を例にすると
例えばあなたが朝起きて天気予報を見たとします。雨が降る予報であれば傘を持っていきますよね。
これが条件分岐によってもたらされた結果です。
この例だと、「雨が降る予報であれば」というのが “条件” になります。そして「傘を持っていく」のが条件分岐の結果ですね。
とまあ教科書的な解説をしましたが、要は条件によって選択することが条件分岐の考え方です。
人間の条件分岐
いきなり少々脱線します…。笑
人間は何かを選択をする時に、選択肢ありきで条件を後から考えて決めることが多いです。
ここがプログラムと大きく異なる点かもしれません。
「傘を持っていく」という最終結果は同じでも、人間の場合は傘が荷物になることや、雨の強さによっても傘を持っていくかどうか悩むことがあります。
こうした複数の要素が重なり合いつつも我々人間は日々、選択の連続の中を生きています。
そこでライフハック的な選択術として、あらかじめ選択条件を決めておいてそれに沿って物事を選択していく方法が多くのビジネス書でも取り上げられたりしています。
ある意味プログラミング的な考え方でもあるので、この記事を最後まで読んでいただくことで、選択術についても理解が深まると思います。
プログラミングでの条件分岐
プログラミングをするにあたって、条件分岐は必ずと言っていいほど頻繁に使われます。
プログラムに処理をさせる
日常生活での条件分岐と異なり、プログラミングでの条件分岐では厳密さが求められます。
例えばベルトコンベア上で仕分けをする作業で、流れてきた物が白色ならば右のレーン、黒色ならば左のレーンに仕分けをするとします。
人間が仕分けをする時には、完全な白や黒でなくとも白っぽい物や黒っぽい物でもいい感じに仕分けますよね。ここで明らかに灰色(グレー)の物が流れてくると、とりあえず除外しておいて作業を再開すると思います。
しかしこの作業をプログラムにやらせる場合には、白色や黒色という表現は使えず、いい感じにも仕分けしてくれません。カラーコードという色を数値化したものを用いて、白色なら #ffffff、黒色なら #000000 と厳密に条件を指定してあげる必要があります。
そして灰色が流れてきた場合、プログラムはエラーで止まります。ここがちょっと厄介なところですね。
まあ白と黒以外の物は全て除外する、という処理(プログラミング)を入れておけばいいだけの話なんですけどね(笑)。
実際にアプリで使われているイメージ
プログラムの条件分岐における条件の部分を「条件式」といいます。
この条件式で比較判定されるのは数値だけでなく、文字も用いられることもあります。
実際にスマホアプリやWebサイトなどで、サービスにログインする時に ID とパスワードを入力しますよね。
これに使われているのが条件分岐です。入力内容が当っていればログインできますし、間違っていればエラーメッセージが出てきますよね。
プログラム側では、ユーザーが入力した文字列(ID、パスワード)をデータベースに登録されている内容と比較して、判定した結果を出力しています。
ログインだけでなく、その他なんでも条件分岐は使われているので、自分が実際にサービスを使っているときにどこに条件分岐があるかを想像しながらサービスを利用してみるのも面白いですよ。
複雑な条件分岐
これまで述べてきた条件分岐はAならばBというような、ごくごく単純な条件式を例に説明してきました。
しかし実際のプログラムや、日常生活での条件分岐はこれほど単純なケースである方がレアだと思います。
複数の条件が重なるケース
条件分岐で出てくる要素が1つだけでなく複数出るパターンがあります。
AかつBならばC、といった具合です。
例えば、朝の天気予報を見て雨予報の場合に、家を出る時に雨が既に降っているか否かで傘を持って家を出るかどうか決めるとします。
このとき傘を持っていくパターンの条件は、「天気予報で雨予報」かつ「既に雨が降っている」、(どちらの条件にも当てはまっている)という条件となります。
これが、AかつBならばCのパターンの条件です。
“かつ”の他にも、”または”という考え方があります。
AまたはBならばC、といった具合です。
上の例で言うと、「天気予報で雨予報」または「既に雨が降っている」場合に傘を持っていく、という条件分岐になりますね。
このとき傘を持っていくのは、雨予報だった時点でも持っていくのは確定ですし、たとえ雨予報じゃなかったとしても既に雨が降っていたら傘を持っていくことになります。
より人間らしい判断になった気がしますね(笑)。
これがAまたはBならばCのパターンの条件です。
条件のネスト
条件分岐が複雑になってくると、条件の”入れ子”という考え方が発生します。
この入れ子のことを“ネスト”と呼びます。
条件のネストは、Aの場合にも取りうる行動が変わり、AかつBの場合にも取りうる行動が変わるケースを指します。
わかりやすく具体例で示しますね。
相変わらず上の例でいきますが、「天気予報で雨予報」の場合にまず条件分岐します。
雨予報→次の条件分岐へ。雨予報じゃない→傘を持っていかない。
そして雨予報の場合にネストの条件です。「既に雨が降っているかどうか」で条件分岐します。
雨が降っている→傘を持っていく。雨が降っていない→折り畳み傘を持っていく。
AかつBならCの時と少し似ていますが、より細かい条件設定が可能になっています。
フローチャートに起こすとこんな感じです。
ネストして細かい条件設定が出来たことで、折り畳み傘を持っていく選択が出来るようになりました。
コメント