ドキュメントに記載されている言語リファレンスは次のとおり。

  • Significant Whitespace
  • Functions and Invocation
  • Assignment
  • Objects and Arrays
  • Lexical Scoping and Variable Safety
  • Conditionals, Ternaries, and Conditional Assignment
  • The Existence Operator
  • Aliases
  • Splats...
  • Arguments are Arrays
  • While Loops
  • Comprehensions (Arrays, Objects, and Ranges)
  • Array Slicing and Splicing with Ranges
  • Everything is an Expression
  • Inheritance, and Calling Super from a Subclass
  • Blocks
  • Embedded JavaScript
  • Switch/When/Else
  • Try/Catch/Finally
  • Multiline Strings

ここでは一部を紹介する。

空白文字の取り扱いはPythonライク - Significant Whitespace

CoffeeScriptではPythonのように、空白文字のインデントでブロック構造を定義する。適切なインデントをおこなっていない場合、コンパイルの段階で「syntax error for 'xxx', unexpected identifier」とエラーが返るようになっている。

Python同様、デベロッパは文末にセミコロンを入れる必要がない。1行に複数の文をつなげる場合には使用してもかまわない。関数やif/switch、try/cache文は「{ }」で囲む代わりに空白文字のインデントで表現する。

関数の定義 - Functions and Invocation

関数は「パラメータのリスト」「矢印(=>)」「関数本体」で定義する。

関数表記例。左側がCoffeeScript、右側がコンパイル後のJavaScript - Functions and Invocationより引用

変数のアサイン - Assignment

JSON記法のように「:」を使ってアサインする。イコール(=)は数式計算の場合のみに必要となる。

アサイン例。左側がCoffeeScript、右側がコンパイル後のJavaScript - Assignmentより引用

オブジェクト/配列の定義 - Objects and Arrays

オブジェクト/配列リテラルはJavaScriptのような表記となる。オブジェクトは「{ }」で、配列は「[ ]」でくくる。

オブジェクト/配列定義例。左側がCoffeeScript、右側がコンパイル後のJavaScript - Objects and Arraysより引用

上記のagesやmatrixのような改行文字で区切っている箇所は、カンマは入れても入れなくてもよい。

if/else文の表記 - Conditionals, Ternaries, and Conditional Assignment

前述のとおりCoffeeScriptでは「( )」や「{ }」を使わず、if/else文を書くことが可能となっている。関数やほかのブロック表記と同様、複数行にわたる処理はすべて空白文字を使ったインデントで表現する。

if/else表記例。左側がCoffeeScript、右側がコンパイル後のJavaScript - Conditionals, Ternaries, and Conditional Assignmentより引用

エイリアスで読みやすく - Aliases

CoffeeScriptはコンパイル時に、特定の演算子や用語を置きかえる。定義されているエイリアスはおもに次のとおり。

コンパイル前 コンパイル後
== ===
!= !==
is ===
isnt !==
not !
and &&
or ||
on ||
yes true
off false
no false

これらエイリアスを効果的に使えば、コードをより直感的に記述することが可能だ。

エイリアス利用例。左側がCoffeeScript、右側がコンパイル後のJavaScript - Aliasesより引用

Rubyライクな範囲表記 - Array Slicing and Splicing with Ranges

CoffeeScriptは配列のスライス時に、RubyのRangeライクな範囲表記をサポートしている。最初と最後のインデックスを「..」または「...」で区切って範囲を指定する。

範囲指定を利用した配列スライス例。左側がCoffeeScript、右側がコンパイル後のJavaScript - Array Slicing and Splicing with Rangesより引用

CoffeeScriptは最初のバージョンがリリースされてから3週間程度といった、歴史のあたらしい言語。構文が固まるまで使いどころは限られるが、なかなか興味深いプロダクトだ。Ruby/Pythonをよく利用しているWebデベロッパは一見の価値あるのではないだろうか。またCoffeeScriptのソースコードを参考に、CoffeeScriptがどのようにJavaScriptに変換されていくのかを見てみるのもおもしろいかもしれない。今後の動向に注目したいところだ。