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

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

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

9.5.1 if-elseif-else文の使い方

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

書式:if-else if-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文は3つ以上分岐を行うときに用いられます。ここではif-elseif-else文を利用して、変数の値で条件を満たす場合と満たさない場合でどのような処理が行われるかをWebブラウザにメッセージを表示して確認してみましょう。

ソース・フォルダ:myproj_super_intro/ch09
ファイル名    :ifStatement3.php
アクセスURL   :http://localhost/myproj_super_intro/ch09/ifStatement3.php

➢ ifStatement3.java

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	</head>
	<body>
	<?php
		$num1 = 9;
		$num2 = 3;

		$operator = "*";
		//$operator = "/";
		//$operator = "%";

		//変数$operatorを判定し条件に応じた処理を行う
		if($operator == "*"){
			//掛け算結果を表示
			echo $num1 , $operator , $num2 , ' = ' , $num1*$num2 ;
		}
		elseif($operator == "/"){
			//割り算結果を表示
			echo $num1 , $operator , $num2 , ' = ' , $num1/$num2 ;
		}
		else{
			echo "掛け算と割り算以外の計算は行えません。";
		}
	?>
	</body>
</html>

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

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

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

解説

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

   7:$num1 = 9;
   8:$num2 = 3;

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

   10:$operator = "*";
   11://$operator = "/";
   12://$operator = "%";

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

   14://変数$operatorを判定し条件に応じた処理を行う
   15:if($operator == "*"){
   16:   //掛け算結果を表示
   17:   echo $num1 , $operator , $num2 , ' = ' , $num1*$num2;
   18:}
   19:elseif($operator == "/"){
   20:   //割り算結果を表示
   21:   echo $num1 , $operator , $num2 , ' = ' , $num1/$num2;
   22:}
   23:else{
   24:   echo "掛け算と割り算以外の計算は行えません。";
   25:}

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

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

 条件分岐文は、判定したい状況に応じて「if」、「elseif」、「else」を多様に組み合わせて記述します。慣れないうちは難しく感じるかもしれませんが、「もし○○○ならば、×××する」と言った風に、まずは言葉で考えてみると分かりやすいかもしれません。

NEXT>> 9.6 論理演算子で複数の条件を組み合わせる