条件分岐

条件分岐

条件分岐について

ここまでのプログラムは、書かれた内容を上から順番に実行していくのみのプログラムでした。ですが条件分岐を使用すれば、条件によって処理内容を変更することができるため、複雑なプログラムを作成することができるようになります。

具体的には、以下のようなプログラムで条件分岐を行います。

if (条件) {
  条件に一致した場合に実行するプログラム
} else {
  条件に一致しなかった場合に実行するプログラム
}

このように記述することで、条件に一致したかどうかで処理内容を振り分けることができます。ちなみに if は英語で「もし~なら」、else は「そうでなければ」という意味です。

以下に、条件分岐を使用したプログラムを記載します。

#!/usr/local/bin/perl

$sample = 10;

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

if ($sample > 5) {
  print "<p>変数sampleの内容は5より大きいです。</p>\n";
} else {
  print "<p>変数sampleの内容は5より小さいです。</p>\n";
}

print "</body>\n";
print "</html>\n";

exit;

このプログラムを実行すると、ブラウザに 変数sampleの内容は5より大きいです。 と表示されます。

このプログラムでは $sample > 5 の部分が条件を指定している部分です。> は普通の数学と同様「~より大きい」という意味です。

プログラムの初めの方で $sample = 10; という部分がありますが、この部分で $sample には 10 を代入しています。この数値を例えば 3 に変更すると、画面に表示される文字は 変数sampleの内容は5より小さいです。 になります。実際に数値を変更して実験してみましょう。

条件に一致しなかった場合の処理について

上のプログラムでは、条件に一致しなかった場合($sample の内容が5より小さい場合)に 変数sampleの内容は5より小さいです。 と表示するようにしています。else に続いて、条件に一致しなかった場合の処理を記述することができます。

ですが、条件に一致しなかった場合の処理は省略することができます。例えば

#!/usr/local/bin/perl

$sample = 10;

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

if ($sample > 5) {
  print "<p>変数sampleの内容は5より大きいです。</p>\n";
}

print "</body>\n";
print "</html>\n";

exit;

このようにすると、条件に一致しなかった場合は画面に文字が表示されなくなります。

インデントについて

条件分岐を使用してプログラムを記述する場合、上のように {} の間の処理は、インデントをつけて書く事が多いです。これにより、どこからどこまでが条件分岐用の処理なのかが判りやすくなります。Perlではプログラム中の改行が無視されるのと同様、タブや半角スペースでのインデントも無視されます。ですから、プログラムを読みやすくするために、適度に改行やインデントを入れましょう。(HTMLを書く際、tablediv でマークアップする時にインデントを使用するのと同じです。)

比較演算子について

上のプログラムでは、数値の比較に > を使用しています。これは比較演算子と呼ばれるものですが、数値の比較には他にも以下のような比較演算子を使用することができます。

演算子 意味
== 等しい
!= 等しくない
> 右辺より大きい
>= 右辺以上
< 右辺より小さい
<= 右辺以下

ここで一つ注意点なのですが、Perlで「等しい」を意味する演算子は == です。例えば「$sample の内容が 10 ならば」という条件は以下のように指定します。

if ($sample == 10) {

間違えて if ($sample = 10) { と指定すると、意図したとおりにプログラムが動かなくなるので注意が必要です。(「変数 sample10 が代入できれば」と解釈さるので、常に条件が成立します。)

また、文字を比較するときは文字用の比較演算子を使用します。文字用の比較演算子には、以下のようなものがあります。

演算子 意味
eq 等しい
ne 等しくない

例えば「$sample の内容が テスト ならば」という条件は以下のように指定します。

if ($sample eq "テスト") {

間違えて if ($sample == "テスト") { と指定すると、意図したとおりにプログラムが動かなくなるので注意が必要です。
ちなみに、これらはそれぞれ英語の略です。eq は equal(等しい)の略で ne は not equal(等しくない)の略です。

条件の複数指定

ここまでのプログラムは「条件に合うか合わないか」を判断するのみのプログラムでしたが、「条件1に合うか、もしくは条件2に合うか、どちらにも合わないか」というような、条件の複数指定も可能です。具体的には、以下のようなプログラムになります。

if (条件1) {
  条件1に一致した場合に実行するプログラム
} elsif (条件2) {
  条件1に一致せず、条件2に一致した場合に実行するプログラム
} else {
  条件1と条件2の両方に一致しなかった場合に実行するプログラム
}

このように記述することで、条件を追加することができます。なお、elsif (条件) はいくつでも指定することができます。

以下に、条件を複数指定したプログラムを記載します。

#!/usr/local/bin/perl

$sample = 10;

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

if ($sample == 10) {
  print "<p>変数sampleの内容は10です。</p>\n";
} elsif ($sample > 5) {
  print "<p>変数sampleの内容は5より大きいです。</p>\n";
} else {
  print "<p>変数sampleの内容は5より小さいです。</p>\n";
}

print "</body>\n";
print "</html>\n";

exit;

elsif ($sample > 5) の部分で、条件を追加しています。

AND条件とOR条件

これまで if (条件) としたときの条件は1つだけ指定してきましたが、複数の条件を組み合わせて1つの条件にすることもできます。

具体的なプログラムを以下に記載します。

#!/usr/local/bin/perl

$sample_a = 5;
$sample_b = 7;

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>サンプル</title></head>\n";
print "<body>\n";

if ($sample_a == 5 && $sample_b == 7) {
  print "<p>変数sample_aは5、変数sample_bは7です。</p>\n";
} else {
  print "<p>条件に一致しません。</p>\n";
}

print "</body>\n";
print "</html>\n";

exit;

このプログラムを実行すると、ブラウザに 変数sample_aは5、変数sample_bは7です。 と表示されます。

条件指定の中にある && がAND条件で、論理演算子と呼ばれます。論理演算子には、以下のようなものがあります。

演算子 意味
&& かつ(AND条件)
|| または(OR条件)

例えば

if ($sample_a == 5 && $sample_b == 7)

の場合は「$sample_a5 で、かつ、$sample_b が 7 ならば」という条件になります。つまり、2つの条件が両方とも一致すれば処理が実行されるようになります。また、

if ($sample_a == 3 || $sample_b == 2)

の場合は「$sample_a3 か、または、$sample_b が 2 ならば」という条件になります。つまり、2つの条件のうち、どちらか一方でも一致すれば処理が実行されるようになります。

また、条件はいくつでも指定することができます。例えば

if ($sample_a == 5 && $sample_b == 7 && $sample_c == 3)

の場合は「$sample_a5 で、かつ、$sample_b が 7かつ、$sample_c が 3 ならば」という条件になります。つまり、3つの条件がすべて一致すれば処理が実行されるようになります。