No.03 Javascript の記述方法
06 条件分岐文
 
 プログラムを書いていく上で、様々な条件への対応は必須となってきます。 パターンAとパターンBでそれぞれの動作を行うプログラムを書く場合、避けて通ることの出来ないのが 条件分岐文「if」になります。


条件分岐の概念

 例えば「funxtion」等で同一経路をスクリプトが通過するときに、そのときの変数によって、代入する値を変更させたい場合等が出てきます。 「if」ステートメントは、こういった場合に、様々な分岐条件を与えることによって、効果的なスクリプト作成を行う際に非常に有用な役割を果たしてくれます。

記述例

  function calc( a , b , mode )
  {
    var c = 0;
    if (mode==1){
      c = a * b;
    } else {
      c = a + b;
    }
    return c;
  }

  document.write ("合計結果1 = " + calc(5,6,0) + 
                            " / 合計結果2 = " + calc(5,6,1))

	
表示例
合計結果1 = 11 / 合計結果2 = 30

 この例では、 値「 a 」と「 b 」との演算方法をどうするかを決定する「 mode 」を設け、mode が「 1 」であった場合、乗算を行い、それ以外のときは加算を行うという条件分岐を設けています。
 値が等しかった場合を判定するには、「 if ( a == b ) 」の記述を用います。
 それ以外の場合の記述は「 else 」を指定することで、 a == b で無い場合の処理を行うことが可能になります。
 判定子には、この他代表的に下記のようなものがあります。

a == b
a と b の条件が等しいとき
a != b
a と b の条件が等しくないとき
a > b
b より a の方が大きいとき
a < b
b より a の方が小さいとき
a >= b
b より a の方が等しいか大きいとき
a <= b
b より a の方が等しいか小さいとき

 複数の演算条件を求める場合 ( a == 1 であり、かつ b == 2 の場合といった具合)、if の条件をまとめることが可能です。

複合条件文

  var a,b,c;
  if (a == 1 && b == 2){
    c = 1;
  }
	

 複合演算子には、この他下記のようなものがあります。

条件1 && 条件2
条件1と条件2が適合したとき
条件1 || 条件2
条件1か条件2のどちらかが等しいとき
条件1 ! 条件2
条件1が等しく、且つ条件2が等しくないとき

 演算子を複合させることで、複雑な演算条件を1行の「 if 」文にまとめることが可能になります。

 複雑な演算を行う場合、演算の順序が重要になってきます。 基本的には条件文を左から右へ読んでいくことになりますが、括弧を追加することで、条件の優先順位を決めることが出来るようになります。

優先順位付き複合条件文

  var a,b,c,d;
  if ( ( a == 1 && b == 2 )  || c == 5 ){
    d = 1;
  }
	

 上の例は、 「 a 」 と 「 b 」が互いに指定した数字であった場合、もしくは「 c 」が5であった場合に動作する条件文になります。 つまり、 「 c 」が5以外であった場合は、「 a 」 と 「 b 」がいかなる数字であっても動作するということになります。括弧が無い場合の条件文「 a == 1 && b == 2 || c == 5 」は、「 a 」か 「 b 」が不適合の場合、「 c 」の条件が合致した場合でも動作しないことになるので、その違いは歴然です。

複数条件文

  var a,b,c,d;
  if ( a == 1 ){
    d = 1;
  } else if ( a == 2 ) {
    d = 2;
  } else {
    d = 3;
  }
	

 ひとつの変数に対して条件によって動作を変化させたい場合、これまでのような単一の「 if 」ステートメントではなく、複数の条件を持たせることの出来る「 else if 」ステートメントを用います。
 上記の例の場合、「 a 」が1である場合と2である場合、そしてそれ以外である場合の3パターンの条件を追加することによって、変数「 a 」に様々な条件を追加することが可能になっています。



 さて、複数分岐には、「 if 」の他に、「 switch 〜 case 」ステートメントも存在します。 こちらは主に、単独変数にける複数分岐を行う、簡単なスクリプト表記に向いています。
 「 switch 〜 case 」ステートメントを用いることによって、 「 if 〜 else 」ステートメントで記述するよりも文字数を減らすことが可能ですし、プログラムルーチンも、「 if 」ステートメントより速く処理することが出来るようです。
複数条件文 「 switch 〜 case 」

  var a=1;

  switch(a){
    case 1 :
      document.write("A = 1 ");
      break;
    case 2 :
      document.write("A = 2 ");
      break;
    default :
      document.write("A = not1 / not2");
      break;
  }
	
表示例
A = 1

 さて、「 switch 〜 case 」ステートメントは、これまでの場合と分岐の表現方法が若干異なります。
 まず、「 { 〜 } 」表現は、「 switch 」でのみ用いて、個々の分岐文では用いないところにあります。このため、個々の「 case 」ステートメントの分岐には、

  case 条件 :
    命令文;
    break;
	

のように、case 条件 :(コロン)文を書き、その下に一連の命令を書き込んだあと、break;(セミコロン)でくくることになります。
 また、どの条件にも合致しなかった場合には「 default : 」を記述し、そこに命令文を書き込むことになります。
 上記のスクリプトの場合、例えば「 a = 3 」の条件が入ってきた場合、「 case 1 」にも「 case 2 」にも該当しないということになりますので、「 default : 」が動作することになります。

 よくやってしまう間違いに、「 break; 」の記述を忘れてしまうということがありますが、「 break; 」をなくすと、呼ばれた条件から「 switch 」ステートメントの終わりまで読んでしまうことになり、結果として予期しない値になることになります。 構文エラーで帰ってこないあたりが性質悪いですけれど、こればっかりは自分で注意しておくしかありません。

「 break; 」の記述忘れの場合の動作

  var a=1;

  switch(a){
    case 1 :
      document.write("A = 1 ");
    case 2 :
      document.write("A = 2 ");
    default :
      document.write("A = not1 / not2");
  }
	
表示例
A = 1 A = 2 A = not1 / not2
 同様に、「 case : 」の「:(コロン)」を間違えて「;(セミコロン)」にしてしまうこともありますが、無論これはエラーになってしまいます。


 基本的に、単独の数値で動作する場合ではあまり恩恵を受けることは無いですが、複数の条件式、特に数の多い条件式の場合、この命令の真価を発揮することになります。
複数条件文 「 switch 〜 case 」

  var a=3;

  switch(a){
    case 1,3,4,6,8,10,11,13 :
      document.write("A = 1 ");
      break;
    default :
      document.write("A = not1 / not2");
      break;
  }
	
表示例
A = 1

上記の例の場合、「a」の値が「1,3,4,6,8,10,11,13」の場合に「 document.write("A = 1 "); 」 が動作し、それ以外のときは「 document.write("A = not1 / not2"); 」が動作することになります。
 「 if 」ステートメントの場合、「 if (a == 1 || a ==3 || a == 4 ... || a == 13) 」 と延々と書いていかないとならないわけで、そういった意味で非常に書きやすいといえます。

ページの最上段へ移動します