if : もし、もし? あたしリカちゃん
ホラー的なタイトルだが、気にしないでほしい。ただの遊びである。さて、プログラミングの勉強していると、かならずif文がでてくる。条件判断に使用する構文である。いくつかのパターンで使用されるが、一番よく使うのはバリデーションのときだろう。バリデーションというのは、簡単に言えば値チェックのことだ。入力した値が正しいか、範囲内に入っているかなどである。
if文では比較演算子を用いて判断する。プログラミング言語によっては、比較演算子が少し異なるものもあるが、意味は、どのプログラミング言語も同じである。いくつかのプログラミング言語別に比較演算子を載せておく。
Python | PHP | Javascript | Java | Fortran | 説明 |
a == b | $a == $b | a == b | a == b | a == b | 等しい |
$a === $b | a === b | 同じ型で等しい | |||
a != b | $a != $b | a != b | a != b | a /= b | 等しくない |
$a !== $b | a !== b | 同じ型で等しくない | |||
a < b | $a < $b | a< b | a < b | a < b | より小さい |
a < b | $a > $b | a > b | a > b | a > b | より大きい |
a <= b | $a <= $b | a <= b | a <= b | a <= b | 以下 |
a >= b | $a >= $b | a >= b | a >= b | a >= b | 以上 |
表以外にも、プログラミング言語によっては、isやis notといった比較演算子もある。こやってみると、どのプログラミング言語も、ほぼ同じ比較演算子になっていることがわかる。
if文の書き方だが、プログラミングの学習をしていれば、とりたてて説明することもないだろう。が、あえて少し変わった書き方を紹介しておこう。
?:
を使用した書き方になる。条件は限定的だが、aとbを比較する場合は、
a != b?真:偽
となる。1行で済ませることができるのが特徴であるが、結果を返すので、代入演算子を使用するのが一般的である。
c = a != b?真:偽
変数cには、真または偽の結果が代入される。少しわかりにくいかもしれないので、具体的に書いてみよう。
c = a < b? 1:0
こんな感じ。a < bの結果によって、変数cには1または0の数値が代入される。文字列も使える。
c = a < b? "aはbより小さい" : "aはbより大きい"
この構文を利用して、PHPで値が0より小さければ-1を返し、それ以外は1を返すSign関数を作ってみると、次のようなものになる。引数に型指定していないのは、引数が整数だったり実数だったりするからである。文字型の場合はどうなんだというツッコミはなしである。
function sign($x):int { return $x < 0? -1:1; }
ただし、この構文はすべてのプログラミング言語でサポートされていないので注意してほしい。上記の表に掲載したプログラミング言語の中で、サポートしているのは、PHP、Javascript、Javaである。
if文を書く際にすこし気をつけたいことを述べる。複数の条件がある場合は、if〜elseやelse if、elifなどを使って書く。だが、この書き方を間違えると、思わぬバグを招くことになる。
例を見せよう。0より大きく10より小さい数値を判定するif文である。一般的には、以下のように書く。
<?php $msg = ""; $a = 9 if ( (0 < $a) && ($a < 10) { $msg = "入力されている数値は正しいです。\n"; } else { $msg = "数値は1から9までの範囲で入力してください。\n"; } echo $msg;
上記のコードを&&ではわかりにくいので2行にわけて書いたとする。
<?php $msg = "" $a = 9 if (0 < $a) { if ($a < 10) { $msg = "入力されている数値は正しいです。\n"; } } else { $msg = "数値は1から9までの範囲で入力してください。\n"; } echo $msg;
お気づきだろうか?…
このコードは正しいように見えるがバグがある。変数$aに10を代入してみよう。正しくメッセージが表示されただろうか。
このように、if文のブロック内にif文を書く場合、その書き方に気をつけないと思ったとおりの動きをしない。正しいように見えるから、気がつかなくてバグの原因が掴みにくくなるのである。このようなコードを書いて、
もし、もし?あたしリカちゃん。いま玄関の前にい.る.の
などと電話がこないように気をつけよう。