JavaScript

複合文と空文

 カンマ演算子(「その他の演算子」を参照)を使って複数の式を 1つの式にまとめたように、文ブロックを使えば、複数の文を 1つの複合文にまとめられます。文ブロックは、複数のブロックを中括弧で囲んだものです。次の例は、1つの文として扱われます。JavaScript において、1つの文しか記述できない部分に文ブロックを記述しても問題ありません。


{
	x = Math.PI;
	cx = Math.cos(x);
	console.log("cos(π) = " + cx);
}

 この文ブロックについては注意すべき点がいくつかあります。まず、末尾にセミコロンを記述しません。ブロック内にある個々の文は全て末尾にセミコロンを記述しますが、ブロック自身の末尾にはセミコロンは記述しません。次に、ブロック中に行は、中括弧に対してインデント(字下げ)されています。必ずしもインデントしなければならないわけではありませんが、インデントしておけば、コードは読みやすく、また理解しやすくなります。最後に、JavaScript にはブロックスコープがないことを思い出してください。文ブロック中で宣言した変数は、ブロックの外からアクセス出来ないわけではありません(「変数のスコープ」を参照)。

 JavaScript でのプログラミングにおいて、複数の文をまとめて文ブロックにすることはよくあります。式の中にほかの式が含まれるのが普通であるのと同じように、文の中に他の文が含まれるのも普通です。このような場合、一般的に JavaScript の文法では、1つの文しか記述できないようになっています。例えば、while ループの構文では、ループのボディとしては 1つの文しか記述できません。文ブロックを使って複合文を記述すれば、任意の数の文を記述できます。

 このように複合文を使うことで、JavaScript の文法上は 1つの文をしか記述できない場所にも、複数の文を記述できるようになります。空文は、この反対です。1つの文を記述する必要がある場所に、1つも文を記述しないようにするものです。空文の書式は次のとおりです。


;

 JavaScript インタプリタは、空文を実行しても何もしません。空文は、本体が何もないループなどで役立つことがあります。次の for ループの例を見てください。


// 配列 a を初期化する。
for(i = 0; i < a.length; a[i++] = 0) ;

 このループでは、すべての処理は a[i++] = 0 で行われるので、ループのボディ部は必要ありません。しかし、JavaScript の構文では、ループのボディ部として文が 1つ必要ですので空文(セミコロンを単独で記述したもの)が使われています。

 for ループ(または while ループや if 文)の閉じ括弧( ) )の後ろにうっかりセミコロン( ; )を記述すると、原因をなかなか見つけにくいバグが生じることがあるので注意してください。例えば、次の例を見てください。


if ((a == 0) || (b == 0));
// あれ! この行は何もしないのに

	o = null;
	// この行は常に実行される。

 意図的に空文を使用する場合は、その旨をコメントしておくことをお勧めします。例えば、次のようにコメントするとよいでしょう。


for(i=0; i < a.length; a[i++] = 0) /* 空文 */ ;