Perl/CGIプログラムの条件分岐

今回は、Perl/CGIプログラミングにおける条件分岐について学習していきましょう。

  1. 編集前記
  2. 条件分岐関数
  3. 判定基準
  4. 数値判定
  5. 文字判定
  6. 複数の条件式
  7. 編集後記

編集前記

今回は、Perl/CGIプログラミングにおける条件分岐について学習していきましょう。

条件分岐とは、何らかの条件を提示しその条件が満たされているときと、満たされていないときで、その後の実行内容を変化させるプログラミング技法のことです。

ちょうど、異性のルックスを見て対応が変化する人みたいなものでしょうか?

↑違う(笑)。

今まで学習してきましたPerl/CGIプログラムというのは、直線的な処理をするものばかりでした。

つまり、Perl/CGIプログラムファイルに書かれている命令文のひとつひとつを、上から下へ直線的にこなしているだけでそれ以外の選択肢は存在しませんでした。

それではあまりにも自由度が少なすぎるので、条件分岐という仕組みを加えて、選んだ条件によってその後の処理を変えてみましょうというのが今回の学習テーマです。

わかりやすくイメージするなら、一本道に続くわかれ道ですね。

スタート地点はいつも同じでも、選択する分かれ道によって、その後に起こるイベントやゴール地点がかわってくるわけです。

プログラムの動作を考えるうえで、パソコンが電化製品であることから…

よく回路の一部に電気が通っている状態を1、通っていない状態を0と定義し、さまざまな状況を考えることがあります。

今回の条件分岐では、条件を提示されたときの答えが1ならば成立、0ならば不成立であると考えるとわかりやすいと思います。

条件分岐関数

Perl/CGIプログラムの条件分岐には、if関数を使います。

if関数

if関数とは、提示した条件を満たしているときにのみ、専用で実行を許可するプログラム領域を定義するのに使用される関数です。

ifとは、読んで字のごとく「もし~」という意味をもっています。

もしこれが「1」だったら~。

もしこれが「abc」だったら~。

もしこれが「数字以外の文字」だったら~。

などなど…。

if関数は条件分岐であればなんでも使えます。

使い方もシンプルで、if関数を宣言した後に条件式を書くだけです。

if ( 条件 ) {
条件が満たされていたときに行われる処理…
}

if関数で提示された条件が満たされている場合は、「{」から「}」に囲まれている部分のプログラムが実行されます。

逆に、条件を満たしていない場合には、「{」から「}」に囲まれている部分のプログラムは実行されません。

結構わかりやすいですよね。

でもこれでは、条件を満たしていないときにのみ専用に実行される処理が何もないですよね。

なので次は、その条件を満たしていないときに実行される領域を定義する方法についてみていきましょう。

else関数

elseとは、前述のif関数と組み合わせて提示された条件を満たしていないときにのみ、実行されるプログラム領域を定義する関数です。

つまり、ひとつの条件分岐の中で、if関数とelse関数をセットで使うことにより…。

条件が満たされているときにのみ専用に実行されるプログラムと、それ以外のときに実行されるプログラムの両方を定義することができるようになるわけです。

書き方としてはこんな感じです。

if ( 条件 ) {
条件が満たされていたときに行われる処理…
} else {
条件が満たされていないときに行われる処理…
}

if関数の条件を満たしている場合は「条件が満たされていたときに行われる処理…」の部分のみが実行されます。

それ以外の場合つまり、条件を満たしていない場合は「条件が満たされていないときに行われる処理…」の部分のみが実行されます。

これで、提示された条件を満たしているときと満たしていないときの2パターンをもった条件分岐の仕組みができました。

一見これでいいような気がしますが、もう少し条件分岐にもバリエーションがほしいとは思いませんか?

例えば、「これはAですか?」という問いかけに対して…。

もちろん、Aの場合は条件成立ですが…。

Bの場合や、Cの場合は、条件不成立ですよね。

でも、BやCの場合でも専用に、条件式を提示したいときだってありますよね。

次はそんな望みをかなえる方法をみていきましょう。

elsif関数

elsif関数とは、if関数のバリエーションを増やすときに使われる関数です。

文章であれこれ説明するよりも、使い方を見た方がわかりやすいので以下を見てください。

if ( 条件1 ) {
条件1が満たされていたときに行われる処理…
} elsif ( 条件2 ) {
条件2が満たされていたときに行われる処理…
} else {
条件1にも条件2にも該当しなかった場合…
}

elsif関数とは、else関数とif関数が合わさったものだとイメージしていただければわかりやすいかと思います。

else関数が担当するのは、先に宣言されているであろうif関数の条件を満たさなかったもの全てですよね。

そしてその条件を満たさなかったものの中からさらに、if関数を使って再度別の条件式を提示するといったイメージです。

感覚的に説明すると、elsif関数とは、敗者復活戦みたいなものです。

さらに、敗者復活戦のelsif関数というのは、何度でも使用できます。

つまり、条件分岐のバリエーションはいくつでも作成可能だということです。

ここまで条件分岐の概要的な話について、長々解説してきましたが…。

これで、Perl/CGIプログラミングにおける条件分岐の代名詞である「if」「elsif」「else」の使い方のまえふりは以上です。

「ここまで説明してきたのは全部前ふりかよ!」という突っ込みが聞こえてきそうですが(苦笑)。

はい、ここまでは全部前ふりです。

次からは、やっと具体的な条件分岐プログラミングについて解説していきます。

判定基準

まずは、if関数で提示される条件式の判定基準について学習していきましょう。

if関数がどんな基準で条件式を判断しているのかを知ることによって、簡単なものから複雑なものまで、いろいろな条件式を作れるようになりますよ。

条件分岐の真相

条件分岐と聞くとなんだか難しそうですが、if関数というのは、ものすごく単純に条件式の成立と不成立を判断しています。

if関数は基本的に、条件式から受け取った値が「1」ならば条件成立「0」ならば不成立だと判断しているだけです。

if関数に指定された条件式というのは、その式が成立していれば「1」を返し、不成立なら「0」を返しています。

if関数というのは、その条件式から返された結果を受け取って、実行するプログラムの開始位置を指定するのが役目なんです。

これが条件分岐の真相ですね。

試しにif関数の条件式部分に、条件式成立を表す「1」と、不成立を表す「0」を置いて、Perl/CGIプログラムの動きを見てみましょう。

まずは、条件式成立を表す「1」を提示した場合…。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
if (1) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると「TRUE」と表示されます。

次に、条件式不成立を表す「0」を提示した場合…。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
if (0) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると「FALSE」と表示されます。

ちなみに、条件式部分を何も書かなかった場合も「FALSE」と表示されます。

条件式が何もないことを表すには、「if (0)」の部分を「if ('')」とします。

もし、「if ()」としてしまった場合には、エラーが出ますから注意しましょう。

この場合、おそらくわざと条件式を書かなかったのではなく、本当に条件式を書き忘れたと解釈されるのだと思います(苦笑)。

真相はわかりませんが…。

このように、プログラミングの世界では、何もないということを定義するという場面があります。

数学の世界でいうなら、「0」の発見みたいなものです。

このような何もない状態を定義している状態のことを、未定義と言います。

これらのことをふまえたうえで、次は変数に何らかの値を代入してif関数に判断させるといったプログラミング方法を学習していきましょう。

変数判定

Perl/CGIプログラミングでは、常に一定ではない値に対して変数を使ってその変化に対応していきます。

ここでは、プログラム実行時に毎回変化するであろう変数内の値に対して、if関数を使って条件分岐を行う方法について学習していきます。

まずは、前述のPerl/CGIプログラムを変数を用いて書くとこんな感じになります。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 1;
if ($a) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「TRUE」と表示されます。

変数「$a」が加わっているだけで動作そのものは同じですから、「1」ではなく「0」を代入すると「FALSE」と表示されるようになります。

先ほどif関数は、条件式の結果が「1」なら成立、「0」なら不成立、この大原則に従って判断をくだしていると解説しましたよね。

これはあくまでも、もっとも基本的な原則になるわけですが、今回のように変数「$a」そのものを条件式にする場合には、別のルールもプラスして判断します。

その別のルールとは、変数に代入可能な値すべてを、条件式成立組と条件不成立組に分類することです。

つまり今回であれば、変数「$a」にどんな値が代入されていたとしても、if関数の条件式で判断できるようにしておきましょうということです。

なんか難しそうな話ですが、実は、このルールを攻略するのは簡単です。

なぜなら、条件式不成立組には二種類の値しかなく、それ以外の値はすべて条件式成立組だからです。

しかも、その条件式不成立組の二種類の値はすでに出てきています。

その二種類の値とは、「0」と「未定義」です。

「0」は説明する必要ないですね。

「未定義」とは、読んで字のごとく、いまだに定められていない値を指しています。

つまり、値がないもの、決められていないもののことです。

前述の条件式を「0」に置き換えたところで、条件式自体がない場合も、条件式「0」と同じ扱いだと解説していますので忘れていたら読み返してみてください。

話を戻しますとようするに、条件式の結果が「0」か「未定義」以外は、条件式成立だということです。

つまり、変数「$a」が「3」でも「-1」でも「abc」でも「TRUE」と表示されるということです。

逆に、変数「$a」が「0」だった場合や、未定義であった場合には、「FALSE」が表示されます。

このあたりは丸暗記するしかないですが、分量がまだ少ないのでそんなに難しくはないと思います。

次は、ここで丸暗記しました条件式に対して、少しひねりを加えていきます。

逆転判定

ここまで解説してきましたif関数の条件式の成立条件と、不成立条件ですが、条件式によっては成立条件が逆転することがあります。

つまり、前述の条件成立組が条件不成立組になり、今までの条件不成立組は条件成立組となるわけですね。

なんだかややこしい(苦笑)。

まぁでも、そういうことです。

それでは実際のPerl/CGIプログラムを見てください。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 0;
if (!$a) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行させると、「TRUE」と表示されます。

「!」を使用することで、条件が成立する条件を逆にしています。

このあたりは、少しややこしいですね。

<戻る>

数値判定

ここでは、数値を条件式とし、分岐処理を行うPerl/CGIプログラミングを学習していきましょう。

数値を条件式にする場合…。

数値の値そのものを指定する方法と、数直線的な考え方を利用し、ある数値よりも大きいか小さいかで結論を出すという二種類の方法があります。

ifの数値判定(1)

ここでは、変数に格納されている数値をif関数の条件式によって判断し、その後のPerl/CGIプログラム処理を変化させてみます。

例えばこんな感じです。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 1;
if ($a == 1) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「TRUE」と表示されます。

「==」とは、比較する値が等しいかどうかを尋ねている演算子で、等しければ条件成立、等しくなければ条件不成立となるものです。

比較する値とは、「==」の左辺と右辺に掲げられているものです。

すなわちこの例では、「if ($a == 1)」ですから…。

変数「$a」に格納されているものが、1と等しい場合「print "TRUE";」を実行しなさいという意味です。

そして、「print "TRUE";」を実行した後すぐに、「}」という記号が存在するので、ここでif文終了です。

その後に書かれているelse関数以降の「print "FALSE";」は実行されません。

もうif文が一度成立しているので、先頭のif文に対応しているelsifやelseが、たとえどれだけ存在しようと実行されません。

仮に変数「$a」が「1」以外の数だった場合は、「FALSE」が表示されます。

なぜなら、if関数で提示されている条件式は満たされず、else関数以降の「print "FALSE";」が実行されるからですね。

そうではなく、「$a」が「1」以外のときに、「TRUE」を表示させたい場合は、「==」ではなく、「!=」と書きます。

「!=」とは、左辺と右辺が等しくないことを表します。

つまり、比較するものが違っている場合に条件式が成立するという演算子です。

ちょうど「==」とは逆の意味をもった演算子です。

ですから、前述のPerl/CGIプログラムの「==」を「!=」にするだけで、逆の動作をするようになります。

例えばこんな感じですね。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 1;
if ($a != 1) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「FALSE」と表示されます。

「==」を「!=」に書き換えたことにより、前述したPerlスクリプトとは逆の動きをするようになりました。

「==」と「!=」は、セットで覚えておきましょう。

単純に「TRUE」部分を、「FALSE」に書き換えただけでは芸がないので(苦笑)。

ifの数値判定(2)

ifの条件式を不等式で表現することもできます。

不等式とは、不等号を使った数式のことで、いくつかの量の大きさやものの序列、値などの評価をあらわした式のことです。

不等式が成立したときが、条件式も成立したときという扱いでif関数に組み込んで使います。

不等式に使われる不等号の種類には以下のようなものがあります。

「A < B」で、AがBより小さいということを表します。

「A > B」で、AがBより大きいということを表します。

「A <= B」で、AがBより小さいもしくは、等しいことを表します。

「A >= B」で、AがBより大きいもしくは、等しいことを表します。

例えばxが10以上100未満であることは「10 ≦ x < 100」と表現されます。

また「a ≦ 100」かつ「a ≧ 100」であるなら「a = 100」であると結論できますよね。

ちなみに、以上と未満について、誤解を生まないように整理しておきますと…。

例えば、8以上と書けば、8をふくめて8より大きい数をさします。

次に未満ですが、8未満と書けば8より小さい数のことで、8はふくみません。

このあたりは忘れがちになるところですから、この機会にしっかり覚えておきましょう。

これら不等式は、小学生のころやりましたよね。

これを、if関数の条件式として使うわけです。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 1;
if ($a > 0) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「TRUE」と表示されます。

このPerl/CGIプログラムは、変数「$a」の値が「0」以上の場合、常に「TRUE」と表示されます。

つまり、変数「$a」の値が「2」でも「100」でも「TRUE」が表示されるということです。

そして、「$a」の値が、「0」になったり、それ以下になって初めて、if文の条件が成立しなくなるので「FALSE」と表示されるようになります。

仮に、変数「$a」の値がたとえ「0」でも「TRUE」と表示させたい場合には…。

いろいろ手段はありますが、すぐにできそうなのは「>」部分を「>=」に書き換えることですね。

すると、変数内の値が「0」になっても不等式は成立するようになるので、if関数の条件式も成立し「TRUE」と表示されるようになるわけです。

もちろん「elsif」を追加して、複数の条件を用意してもかまいません。

まぁそのあたりは、Perlプログラマーの好みと、そのときの状況によって変わってきますから、一概には決められませんが…。

<戻る>

文字判定

次に、条件式が数値ではなく文字だった場合の条件分岐プログラミング方法について学習していきましょう。

ifの文字判定

文字判定の条件式も、前述の数値判定と同じように直接そのものを指定する場合と、ざっくりとだけ範囲を指定するものがあります。

細かいプログラミング技法はたくさんありますが、大きく分けるとこの二種類に集約されます。

そして今回は、文字そのものを指定する条件式の作成法のみを学習します。

もうひとつの文字の範囲を指定する条件式を作るには、ほかにもいろいろな予備知識が必要ですから、もう少しレベルを上げてから学習していくことにしましょう。

それではまず、以下のPerl/CGIプログラムを見てください。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 'abc';
if ($a eq 'abc') {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「TRUE」と表示されます。

「eq」とは、前述したif文での数値比較で使用した「==」と同じ感覚で使用できる演算子です。

Perl/CGIプログラミングでの、文字や文字列の比較のときは「eq」を使用すると考えてください。

このとき注意すべき点は、大文字と小文字は区別して扱われるというところです。

もし変数「$a」内が大文字で「ABC」だったときには、if関数の条件式は満たされず「FALSE」と表示されてしまいます。

このあたりはしっかり理解しておきましょう。

今度は、先ほどとは逆の動作をするPerl/CGIプログラムの例です。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$a = 'abc';
if ($a ne 'abc') {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「FALSE」と表示されます。

「ne」とは、前述したif文での数値比較で説明した「!=」と同じ感覚で使える演算子です。

つまり、比較する左辺と右辺の文字や文字列が、等しくないときに条件式が成立するという演算子ですね。

Perl/CGIプログラミングでの文字や文字列の比較のときは「ne」を使用すると考えてください。

複数の条件式

ここまではひとつのif関数に対して、ひとつの条件式という形で条件分岐を考えてきました。

ですが、条件式というのは必ずしも、ひとつにしなくてはいけないという決まりはありません。

いくつでもif関数に付加することができます。

たとえ複数の条件式があったとしても、条件式同士を関係づける演算子の働きによって、さらにそれらすべてがひとつの大きな条件式として扱われるようになっています。

少しイメージしずらいと思うので、もう少し詳しく解説しますとこういうことです。

何でもよいのですが、たとえば条件式AとBという2つがあったとします。

まずは、条件式AとBでそれぞれ結論を出します。

そして、それぞれ出た結論をさらに、条件式同士の関係を表した演算子に照らし合わせて、最終結論を出すといった感じです。

感覚的に説明するなら、条件式のトーナメント戦みたいなものでしょうか(笑)。

and演算子

ここでは、2つの条件式を「and」という演算子でつないだときの条件分岐プログラミングについて学習していきましょう。

例えば、こんな感じでプログラミングします。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$number = 6;
if ($number > 3 and $number < 7) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると、「TRUE」と表示されます。

変数「$number」には「6」が代入されていますが、「4」でも「5」でも「TRUE」と表示されます。

それを可能にしているのは「if ($number > 3 and $number < 7)」という条件分岐部分ですね。

この条件式は、「and」を境に、2つの条件式に分けることができます。

この2つの条件式をつないでいる「and」とは、左辺と右辺の条件式がともに成立しているときにのみ、本当の条件成立だと解釈される演算子です。

つまり、左の条件式も右の条件式も、同時に成立しているときでないと本当の条件成立にはならないということです。

ということなので、左辺と右辺の条件式を考えていくわけなのですが、「>」と「<」についてはもういいですよね。

変数「$number」に対して、「3より大きくなくてはいけない」と「7より小さくなければいけない」という意味ですね。

ということは、変数「$number」がこの条件を満たすためには、「3よりも大きく、7よりも小さい値でなければいけない」ということになるわけです。

2つ同時に条件式を提示されても、このように、一度バラバラにして考えていくとわかりやすくなるので覚えておきましょう。

ちなみに、2つの条件式をつないでいる「and」部分を、「&&」と書き換えても同じ意味になります。

左辺と右辺がともに成立しているときにのみ、条件成立だと解釈されます。

両方不成立ではもちろん、片方だけしか成立していない場合も、条件不成立だと解釈されます。

ちょうど、英語の意味そのままですから、覚えやすいと思います。

「A and B」と書いた場合、「AとB」というように、比べられるものを2つ提示し両方とるときに使われますよね。

or演算子

続いては、「and」演算子とは逆の意味をもった「or」演算子について学習していきましょう。

「or」演算子とは、提示された左辺と右辺の条件式のうち、どちらかひとつでも成立していれば本当の条件成立だと解釈される演算子です。

これをPerl/CGIプログラミングで表現すると、以下のようになります。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$number = 7;
if ($number == 3 or $number == 7) {
print "TRUE";
} else {
print "FALSE";
}
exit;

このPerl/CGIプログラムを実行すると「TRUE」と表示されます。

変数「$number」は「7」以外にも、「3」でも「TRUE」と表示されます。

このPerl/CGIプログラムでは、「or」演算子の左辺と右辺にある条件式のうち、どちらかひとつが成立していればよいわけです。

したがって、変数「$number」は、「3」もしくは「7」かのどちらかであれば条件成立ということになります。

ちなみに、「or」演算子は、「||」と書き換えても同じ意味として扱われます。

この「or」という単語も、英語で使われるときの意味そのままですから覚えやすいと思います。

「A or B」と書かれていた場合、「AかB」どちらかひとつしか選べません。

つまり、AかBどちらかひとつだけ取ればよいわけです。

もっと言うと、AもBも両方とってはいけないのです。

ここが「and」との違いですから覚えておきましょう。

プログラミング効率

最後に、プログラミング効率の話をして終わりたいと思います。

というのもここで学習したような、if関数に複数の条件式を並べて提示するといったやり方は、非常に効率のよいプログラミング技法だからです。

それをあなたに感じていただきます。

これは文章でごちゃごちゃ書いてもイメージしづらいと思うので、まずは以下のPerl/CGIプログラムを見てください。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
$number = 7;
if ($number == 3) {
print "TRUE";
} elsif ($number == 7) {
print "TRUE";
} else {
print "FALSE";
}
exit;

先ほど「or」演算子の解説で使用したPerl/CGIプログラムを一部改造しました。

実行結果は先ほどと同じで「TRUE」と表示されるのですが、こちらは非効率的なプログラミング方法をしていることがわかりますでしょうか?

この書き方だと、ひとつのif関数に対してひとつの条件式になっていますから、わかりやすいと言えばわかりやすいのですが、一部分重複しているところがありますよね。

「print "TRUE";」という部分です。

このPerl/CGIプログラムでは、変数「$number」が「3」のときでも「7」のときでも「TRUE」と表示させていますから…。

ひとつずつ条件式を提示する形にしてしまうと、実行結果である「print "TRUE";」を2回書かなくてはいけなくなるわけです。

単純に変数「$number」の値が「3」のときと「7」のときで別のことをやらせたければ問題ありませんが…。

今回のように同じことをやらせたいのであれば、ただの無駄書きになってしまいます。

それにもし、「print "TRUE";」部分を書き変えたくなった場合には、2箇所修正しなくてはいけなくなるので、おもいっきり非効率なわけです。

理解していただけましたでしょうか?

ほんの小さなことですが、プログラミングというのは小さな処理をひたすら積み重ねていく作業ですから、軽視せず取り組んでいただければ嬉しいです。

Perl/CGIプログラミング学習に

Perl/CGIプログラミング学習に役立つコンテンツを紹介します。

Perl言語プログラミングレッスン入門編

初めてプログラムを学習する初心者を対象に、Perlの基本をやさしく、ていねいに解説しています。

平易な文章と、たくさんのサンプルプログラムで、Perlの基礎をわかりやすく解説しています。

サンプルプログラムは正規表現をはじめとする、Perlならではのプログラム満載です。

編集後記

ここまでの話の流れを受けて今回の編集後記は、もうひとつプログラミング効率の話をします。

しかも先ほどは、おもにプログラマー主体の話でしたが、今からお話しするプログラミング効率の話は、コンピューター主体です。

それでは、以下のプログラミングコードを実行したときに、効率的に処理が行われるのはどちらでしょうか?

プログラムA

if ( 条件式1 ) { 条件式1が成立しているときに実行される処理…。 }
elsif ( 条件式2 ) { 条件式2が成立しているときに実行される処理…。 }
elsif ( 条件式3 ) { 条件式3が成立しているときに実行される処理…。 }

プログラムB

if ( 条件式1 ) { 条件式1が成立しているときに実行される処理…。 }
if ( 条件式2 ) { 条件式2が成立しているときに実行される処理…。 }
if ( 条件式3 ) { 条件式3が成立しているときに実行される処理…。 }

どちらもほぼ同じ意味をもった条件分岐です。

結論から言ってしまうと、効率的な処理が行われるのは「プログラムA」のほうです。

なぜだと思いますか?

それは、プログラムAでは、常に最小限の条件式処理で済んでいるのに対し、プログラムBでは、常にすべての条件式を処理しなくてはいけないようになっているからです。

もっと具体的に説明しますと…。

プログラムAは、if関数がひとつで、それに対するelsif関数が二つの合計三つの条件式があります。

プログラムBは、if関数三つで三つの条件式があります。

ここまではいいですよね。

では、思い出してください。

elsif関数の解説部分で、「elsif関数とは、敗者復活戦みたいなものだ」と書きましたよね。

そうなんです。

敗者復活戦なんです。

そして、思い出してください。

敗者復活戦はどのような時に行われますか?

それはもちろん、敗者が出た時ですよね。

敗者復活戦というのは敗者が出て初めて行われるものです。

つまり、敗者が出なければ必要ないんです!

これをif関数とelsif関数の話に当てはめると…。

if関数は無条件で行われる戦い。

勝者も敗者も関係ない、全員強制参加の戦いだと言えるでしょう。

これに対してelsif関数は、敗者復活戦ですから、敗者が出ないと行われません。

たとえ行われたとしても勝者は除かれ、敗者の中だけで行われますからすごく対象がしぼられています。

ようするに、もしif関数に出会ってしまったら必ず実行しなくてはいけないが、elsif関数は状況によって実行しなくてもよい場合があるということです。

これが何を意味するのかはもうおわかりですね。

もし、プログラムAの条件式1で成立した場合には、その後の条件式2と3はすっとばされるということです。

これに対してプログラムBでは、条件式1が成立してもしなくても、常に条件式2と3が実行されます。

条件式一回で終了する可能性をもったプログラムAに対し、プログラムBは常に三回の条件式をこなさなくてはいけないというわけなのです。

もちろん、プログラムAも条件式を三回こなさなくてはいけない場合もあります。

でも、上記のプログラム例に限って言えば可能性は3分の1です。

したがって、プログラムAのほうがプログラム効率が良いといえるというわけです。

理解していただけましたでしょうか?

これは大切なことなので、しっかり理解して実際のプログラミング作業に生かしていただければうれしいです。

今回の学習は以上です。

ありがとうございました。

<戻る>