<<ポイント(4)-(5)へ<<

 CoffeScriptを3時間で理解するための10のポイントのうち、ポイント6と7を解説します。ポイント6は「配列/ハッシュの内容を順番に取り出すのが簡単になった」こと、ポイント7は「関数が高機能になった」ことです。

POINT6 配列/ハッシュの内容を順番に取り出すのが簡単になった

★要素を順番に取り出すために、配列対応のfor...in、ハッシュ対応のfor...of命令を提供

 配列から要素を順番に取り出して処理をする場合、JavaScriptでもfor...in命令を利用できます。しかし、for...in命令は配列のインデックスを取り出すだけですので、コードがさほどシンプルにはなりません。値そのものでないので、かえって誤解を招くおそれもあるでしょう。

 そもそも、for...in命令はもともと、配列の要素ではなくオブジェクトの列挙可能なプロパティを走査する命令です。従って、リスト28のようなケースでは不要な情報までも拾い出してしまう問題もあります。

リスト28●JavaScriptでは配列要素の走査にfor...in命令は使うべきでない
リスト28●JavaScriptでは配列要素の走査にfor...in命令は使うべきでない

 従ってJavaScriptでは、配列の走査にfor...in命令は利用すべきでありません。JavaScriptでfor...in命令を利用するのは、キーと呼ばれる文字列を使って要素を参照する「連想配列(ハッシュ)」のキーを走査する場合に留めるべきです。

 一方CoffeeScriptでは、for...in命令が配列要素の処理に利用しやすいように実装されています。CoffeeScriptでは配列の要素がfor文の一時変数iに直接セットされるのです。リスト29(上はCoffeeScript、下はコンパイル済みのJavaScript)のコンパイル結果に注目してください。CoffeeScriptのfor...in命令は、JavaScriptではfor命令に変換されています。

リスト29●配列の内容を順に取得
リスト29●配列の内容を順に取得

 ここで注目していただきたいのは、リスト29のJavaScriptで赤い色を敷いた部分です。終了条件式ではなく、初期化式で配列の長さを変数_lenに格納しています。これによって、CoffeeScriptではlengthプロパティへのアクセスを減らし、ループの高速化を図っているのです。この書き方は、Internet Explorer 6など古いWebブラウザーには特に有効な定石として知られています。

 ハッシュ(オブジェクト)を走査する場合、CoffeeScriptではfor...of命令を利用します(リスト30(上はCoffeeScript、下はコンパイル済みのJavaScript))。JavaScriptのfor...in命令と較べると、キーと値をまとめて取り出せるので、コードが見やすくなっていることがわかると思います。

リスト30●ハッシュの内容を順に取得
リスト30●ハッシュの内容を順に取得