if : もし、もし? あたしリカちゃん

ホラー的なタイトルだが、気にしないでほしい。ただの遊びである。さて、プログラミングの勉強していると、かならずif文がでてくる。条件判断に使用する構文である。いくつかのパターンで使用されるが、一番よく使うのはバリデーションのときだろう。バリデーションというのは、簡単に言えば値チェックのことだ。入力した値が正しいか、範囲内に入っているかなどである。

if文では比較演算子を用いて判断する。プログラミング言語によっては、比較演算子が少し異なるものもあるが、意味は、どのプログラミング言語も同じである。いくつかのプログラミング言語別に比較演算子を載せておく。

PythonPHPJavascriptJavaFortran説明
a == b$a == $ba == ba == ba == b等しい
$a === $ba === b同じ型で等しい
a != b$a != $ba != ba != ba /= b等しくない
$a !== $ba !== b同じ型で等しくない
a < b$a < $ba< ba < ba < bより小さい
a < b$a > $ba > ba > ba > bより大きい
a <= b$a <= $ba <= ba <= ba <= b以下
a >= b$a >= $ba >= ba >= ba >= 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文を書く場合、その書き方に気をつけないと思ったとおりの動きをしない。正しいように見えるから、気がつかなくてバグの原因が掴みにくくなるのである。このようなコードを書いて、

もし、もし?あたしリカちゃん。いま玄関の前にい.る.の

などと電話がこないように気をつけよう。