第13回 「switch...case」
前回まではif命令を使って条件分岐処理を行いました。今回は乱数値を整数にして簡単に処理する、switch〜caseを使って処理することにしてみます。
前回のプログラムは以下のようになっていました。
<html>
<head>
<title></title>
</head>
<body>
<script language="JavaScript"><!--
n = Math.random() * 4;
if ((n >= 0) && (n < 1)) document.write("こんにちは<br>");
if ((n >= 1) && (n < 2)) document.write("いい天気<br>");
if ((n >= 2) && (n < 3)) document.write("みたいですね<br>");
if ((n >= 3) && (n < 4)) document.write("おしまい<br>");
// --></script>
</body>
</html>
if命令の条件式が、やや長くなっていますが、乱数値が整数であればもっと簡単な条件式にすることができます。乱数値を整数値にするには小数値を切り捨てれば良いことになります。JavaScriptでは小数値に関する関数が3つ用意されています。
Math.floor() ... 切り捨て
Math.ceil() ..... 切り上げ
Math.round() .. 四捨五入
ここではMath.floor()を使って小数値以下を切り捨てることにします。すると先ほどのプログラムでの乱数値は0〜3の範囲におさまります。if命令の条件式は(n == 0)というように等しいかどうかだけを調べるだけになります。
実際に書き換えたプログラムが以下のものです。
<html>
<head>
<title></title>
</head>
<body>
<script language="JavaScript"><!--
n = Math.floor(Math.random() * 4);
if (n == 0) document.write("こんにちは<br>");
if (n == 1) document.write("いい天気<br>");
if (n == 2) document.write("みたいですね<br>");
if (n == 3) document.write("おしまい<br>");
// --></script>
</body>
</html>
以前のものよりも多少見やすくなりました。それでは今度はswitch〜caseを使って処理してみます。実際のプログラムは以下のものになります。
<html>
<head>
<title></title>
</head>
<body>
<script language="JavaScript"><!--
n = Math.floor(Math.random() * 4);
switch(n)
{
case 0:document.write("こんにちは<br>"); break;
case 1:document.write("いい天気<br>"); break;
case 2:document.write("みたいですね<br>"); break;
case 3:document.write("おしまい<br>"); break;
}
// --></script>
</body>
</html>
switch()の中の値/データによってcaseで振り分けます。caseの後には値/データを記述します。一致した場合は、以後に続く命令を実行します。最後にbreak;の記述がありますが、この記述がないと次のcase以後の命令も実行してしまいますので注意が必要です。
特定の値以外処理する場合にはcaseの代わりにdefault:を記述します。例えば上記で乱数の範囲を0〜9にした場合4〜9だけ「毎度ありがとう」と表示させるには以下のように記述します。
<html>
<head>
<title></title>
</head>
<body>
<script language="JavaScript"><!--
n = Math.floor(Math.random() * 10);
switch(n)
{
case 0:document.write("こんにちは<br>"); break;
case 1:document.write("いい天気<br>"); break;
case 2:document.write("みたいですね<br>"); break;
case 3:document.write("おしまい<br>"); break;
default:document.write("毎度ありがとう<br>");
}
// --></script>
</body>
</html>
default:〜の最後にはbreakがありません。breakは、そこで処理を中断しブロック外へ処理を移します。ブロック外というのは{〜}で囲まれた範囲の外側です。何重にも{}で囲まれている場合には一番近く(内側の)ブロックから抜け出ます。
1:{
2: その1
3: {
4: その2
5: break;
6: }
7: その3
8:}
(左側の数字は説明用の行番号です)
こんな感じになっている場合には5行目のbreakで内側のブロックから抜けて7行目の「その3」に処理が移ります。
case:〜break;でbreakがない場合には処理が中断されず次に続く行が実行されます。試しに以下のプログラムで試してみると良いでしょう。
<html>
<head>
<title></title>
</head>
<body>
<script language="JavaScript"><!--
n = Math.floor(Math.random() * 10);
switch(n)
{
case 0:document.write("こんにちは<br>");
case 1:document.write("いい天気<br>");
case 2:document.write("みたいですね<br>");
case 3:document.write("おしまい<br>");
default:document.write("毎度ありがとう<br>");
}
// --></script>
</body>
</html>
これで、文字列をランダムに表示するプログラムができましたが、実はもっとスマートに記述することができます。より汎用性を持ったスクリプトにすることもできます。
それを実現するために「配列」について次回説明します。