JavaScript
CoffeeScript
More than 1 year has passed since last update.

CoffeeScriptは、代表的なAltJS(JavaScriptの代用品)です。AltJSとしては、ほかにはTypeScriptが有名です。
Railsでは、標準でCoffeeScriptが使えるようになっているので、積極的に使うようにすると生産性があがるかも知れません。
CoffeeScriptの文法は、RubyやPythonに似ています。ブロック構造で制御構造を表すところは、PythonやHamlに似ています。
ES6(次世代JavaScript)の登場でAltJSの方向性が不透明になったり、GoogleがTypeScriptを正式採用したりといろいろ話題に事欠かないですが、小規模なアプリ開発でJavaScriptを多用する場合は選択肢の一つとして持っておいて損はないです。

JavaScriptとの大きな違い

行末のセミコロン;および関数呼び出し時の引数のカッコ()が不要(つけてもよい)

JavaScript
alert('Hello, world!');
CoffeeScript
alert 'Hello, world!'

ブロック構造はインデントで表現するので、波カッコ{}が不要

JavaScript
if (a == true) {
  alert('a is true!');
} else {
  alert('a is false!');
}
CoffeeScript
if a == true
  alert 'a is true!'
else
  alert 'a is false!'

===演算子はもう必要ありません

JavaScript
if (a === null) {
  alert('a is null!');
}
CoffeeScript
if a == null
  alert 'a is null!'

関数定義はアロー演算子(->,=>)を用いる

JavaScript
function f(x) {
  return true;
}
CoffeeScript
f = (x) ->
  true

アロー演算子を用いると、JQueryで多用されがちなコールバックが簡潔に書ける

JavaScript

JavaScript
$(document).ready(function() {
  $('#button').click(function() {
    alert('Button is pushed!');
  )};
});
CoffeeScript
$(document).ready ->
  $('#button').click ->
    alert 'Button is pushed!'

ほかの違い

クラスが定義できたり、ブロック構造全体の戻り値を利用できたり、return文が必要なかったり、ただのテンプレートエンジンと割り切るにはあまりにも多くの機能を持っています(もはや異なる言語)。特に、JavaScriptでは煩雑になりがちなArray.eachの処理やHash.eachの処理を簡潔に書ける点はそれだけとってもJavaScriptから乗り換える価値があると思います。

欠点

ブラウザがCoffeeScriptを実行するのではなく、Railsの場合アセットパイプラインでプリコンパイルされたJavaScriptが実行されます。そのため、デバッグがしづらいという欠点があります(ソースコードの行数と生成されたJavaScriptの行数が異なるため)
ChromeやFirefoxでは、アドオンを利用することによりCoffeeScriptのデバッグにも対応可能なようです。

欠点ではありませんがグローバルスコープは原則使えません。
変数名の前に@をつけると擬似的にグローバルスコープ(当該Windowにバインドされたローカル変数)が使用できます。
また、ローカルスコープから変数の値が外に漏れることもありません。(クロージャが自動的に生成されます)

みんな大好き三項演算子が使えません!if-then構文を用いて書き直します(if-thenブロックが最後に評価した値を返す性質を用います)。

JavaScript
a = (a === null) ? 'null' : a + ' hello';
CoffeeScript
a = if a == null then 'null' else a + ' hello'

複数行でもOK!

CoffeeScript
a = if a == null then
  'null'
else
  a + ' hello'

その他のメリット

JavaScirptの代替品なので、Rails以外でも使えます。たとえば、node.jsではCoffeeScriptを用いて記述することが一般的に行われています。
この場合、Gulp.jsなどを用いてコンパイルします。サーバサイドがnode.jsの場合、サーバサイドの記述にもCoffeeScriptを用いることができるわけです。