##今回の内容
前回は演算子についてでした.
今回はプログラミングにおいて最重要要素の1つであるif文のお話です.
##if文とは
if文とは,条件によって異なる動作をしたいときに使う文です.
例えば,「40人の生徒のテスト結果を見て,60点以上なら合格,60点未満なら不合格にしたい!」みたいなときに,生徒の点数が60点以上かどうか判定しなければいけません.
こんなときに活躍するのがif文です.
if文によってプログラムの進む方向が2手(あるいはそれ以上)に分かれます.
例えば,60点以上の方と60点未満の方に…
このことを条件分岐と言います.
##構文
if文には3パターンほど書き方があります(記述が増えるだけですが).
処理や条件によって使い分けましょう.
###ifのみ
まずは単純なif文で,これは条件に合う場合だけ処理を行います.
条件に合わない場合は何もしません.
if (条件式) {
// ここに処理を書く
}
条件式には,比較演算子を用いた式(例:pointが60点以上→point >= 60)など,結果が真偽値になるようなものが入ります.
条件式の結果がtrueになる場合のみ,「{}」内に記述された処理が行われます.
もちろん条件式には「true」を入れてもOKです(ただしその場合必ず処理されるのでif文の意味がない).
このような「{}」で囲まれてできる部分のことを「ブロック」と呼んだりします.
if文以外でもブロックがあるので,区別するためにif文の場合は「ifブロック」って言います.
if文の基本形は以上で,派生として2パターン存在します.
###if-else
if (条件式) {
// ここに処理1を書く
} else {
// ここに処理2を書く
}
このように,「else」を使うことで,条件に合わなかった場合の処理を記述することができます.
条件式がtrueの場合は処理1が行われ,falseのときは処理2が行われます.
ただし,「else」は条件に合わなかった場合の処理を記述するため,1つのifに対して1つのelseという制約があります.
えー,もっと複雑な条件分岐がしたいです.
たくさんif文書くしかないんですか.
そんなときに使えるのが次の構文です.
###if-else if-else
if (条件式1) {
// ここに処理1を書く
} else if (条件式2) {
// ここに処理2を書く
} else {
// ここに処理3を書く
}
このように書くと,上から順番に条件判定され,条件式1に合っていれば処理1を,条件式1に合ってないけど条件式2に合っていれば処理2を,条件式1にも条件式2にも合ってない場合は処理3を行うことができます.
さらに,else ifは無限に増やすことが可能です.
##入れ子構造
例えば,「40人の生徒のテスト結果を見て,60点以上なら合格,60点未満なら不合格にしたい!さらに60点以上の子は10点刻みで分けたい!」という状況になったとします.
この場合,60点以上かどうか判定した後に,10点刻みで分けるという処理をしなければなりません.
こんなときは入れ子構造を使います.
if文以外のブロック構造の文でも使うことができます.
例の通りに書いてみます.
if (60点以上) {
// 合格の処理
// 合格者の中でさらに条件分岐
if (60点以上70点未満) {
// 処理1
} else if (70点以上80点未満) {
// 処理2
} else if (80点以上90点未満) {
// 処理3
} else if (90点以上) {
// 処理4
}
} else {
// 不合格の処理
}
ifブロックの中にさらにifブロックがあります.
これが入れ子構造です.ネストとも言いますね.
ネストを使うことによって,より複雑な条件分岐でも判定が可能です.
記述するときは,例のプログラムのようにインデントをしっかりすることが大事です.
インデントとは,行の先頭に空白を入れる字下げのことですが,これをすることによって,階層構造が見やすくなります.
インデントがしっかりしていなくても,javaはちゃんと動くように出来ていますが,他者があなたのソースコード読んだときに,インデントがしっかりしていたほうが理解しやすいです.
他者がソースコードを読んだときに理解しやすいかどうかの度合いのことを可読性と言いますが,プログラムを書くときは自分のためにも可読性を上げるような書き方をした方がいいです.
(過去に自分が書いたコードを見て可読性が低いと,なんのプログラムかわからなくなって過去の自分をぶん殴りたくなります…)
ちなみに,僕の大好きなPythonという言語は,インデントが同じ行を1つのブロックとして認識するので,インデントができないと正しく動きません.
可読性を上げるプログラミングを練習する言語としては最適だと思います.
##おわり
今回説明したif文はプログラミングの最重要要素の1つなので,必ずマスターして欲しいです.
前回ちょろっと紹介した三項演算子があればif文はいらないとか言い出す人もいるかもしれませんが,三項演算子はパッと見わかりにくいので僕は好きじゃないです(だから説明しなかったってわけじゃないです).
if文をマスターして,どんな条件分岐も作れるようになりましょう!