第9章 条件で処理を変える

9.5 if-elseif-else文を使ってみよう

前節ではif文を少し発展させた「if-else(イフ・エルス)文」について学習しました。さらに「もし○○○ならば×××する。そうでなく●●●ならば△△△する。そのどれでもなければ□□□する。」といったように、ある条件の後にさらに条件を付けて判断を行う「if-elseif-else(イフ・エルスイフ・エルス)文」について学習していきましょう。

9.5.1 if-elseif-else文の使い方

if-elseif-else文は最初の条件式を満たせばifブロック内の処理を行い、満たさない場合は次の条件式の判定を行います。次の条件式を満たせばelseifブロック内の処理を行い、満たさない場合はelseブロック内の処理を行うことになります。

書式:if-elseif-else文

if-elseif-else文の処理の流れをフローチャートで表すと以下の図9.5.1になります。


図 9.5.1 : if-elseif-else文のフローチャート

図9.5.1のフローチャートから確認できますが、if-elseif-else文は設定した順(上から)で判定していき、どれかの条件を満たすとそのブロック内の処理しか行いません。つまり、「どこかの条件を満たした瞬間、それ以降の判定は一切行わない」ことになり、条件を設定する順番にも注意が必要になります。
また基本的なif-elseif-else文は書式で示した通りですが、elseifブロックは判定したい条件がある分だけ自由に増やすことができます。またelse文を必ず記述する必要もありません。

ポイント
  • 複数の条件の結果に応じて異なる処理を行わせたい場合、if-elseif-else文を使う。
  • 複数条件は上から判定していき、どこかの条件を満たした場合それ以降の判定はスキップされる。

if-elseif-else文を利用して条件に応じた処理を行わせるプログラム

if-elseif-else文を利用して変数の値で条件を満たす場合と満たさない場合で、条件分岐が正しく行われることをWebブラウザにメッセージを表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch09
パッケージ: ifStatement3.php
アクセスURL:http://localhost/myproj_intro/ch09/ifStatement3.php

ifStatement3.php

実行結果

$operator=”+”で実行した場合(ifブロック処理)

$operator=”-“で実行した場合(elseifブロック処理)

$operator=”*”で実行した場合(elseブロック処理)

解説

このプログラムはif-else文にelseifブロックが追加されています。変数$operatorの値が1つ目の条件式を満たさない場合、2つ目の条件式でさらに比較することができるようになっています。
まずは7、8行目で計算に使う数値2つを変数に用意しています。

10~12行目で今回の条件判定に使う値を用意しています。ifブロックの足し算を行いたい場合はそのままの記述、elseifブロックの引き算を行いたい場合は11行目以外をコメント化し、さらにelseブロックのその他の処理を行いたい場合は12行目以外をコメント化します。

14~25行目がif-elseif-else文になります。1つ目条件式は$operatorの値が「+」の場合、ifブロック内の処理を行い2つの変数の「足し算結果」を画面に出力します。次の2つ目の条件式では$operatorの値が「-」の場合、elseifブロック内の処理を行い2つの変数の「引き算結果」を画面に出力します。後は2つの条件式どちらにも該当しない場合、elseブロック内の処理で「足し算と引き算以外の計算は行えません。」と画面に出力します。


図 9.5.2: if-elseif-else各ブロックを通った際のフローチャート

3つの実行結果からも分かるように、複数の条件を設定してもその条件式を満たした時だけの処理が正しく行われていることが確認できます。

今回のプログラムでは「if文+elseif文+else文」の組み合わせで条件分岐文を作成しましたが、他にも条件(掛け算、割り算、余り計算を行う判定)を追加することができます。またelse文も必須ではないので省略することも可能です。

条件分岐文は判定したい状況に応じて「if」、「elseif」、「else」を組み合わせて記述する必要があります。慣れないうちは難しく感じるかもしれませんが、いきなりプログラム文で考えるよりも「もしも○○○ならば、×××する」と言った風に言葉で考えてみると分かりやすくなると思います。
色々な条件文が設定できるように、本節までで学習した条件分岐文の基本はしっかりと覚えておいて下さい。

これまで学習してきた条件分岐文についてまとめたものを以下に示します。

条件分岐文の各ブロック内の処理について

これまでの学習では、条件分岐文の各ブロック内の処理でメッセージを表示させる処理しか行っていませんでしたが、ブロック内では計算、文字連結を行ったり、さらには新たな条件分岐文も書くことができます。
条件分岐文のブロック内にさらにif文を設定することを「if文のネスト(入れ子)」と呼びます。
ネスト(入れ子)とは同様の形状の大きさの異なる容器にれた物を指します。

NEXT>> 9.6 特殊な条件の判定方法について知っておこう