LoginSignup
7
5

More than 5 years have passed since last update.

CoffeeScriptのススメ

Last updated at Posted at 2017-07-06

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を用いることができるわけです。

7
5
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5