LoginSignup
27
12

More than 5 years have passed since last update.

CoffeeScriptは死んだのか? CoffeeScriptのいいところ(Vue.jsを例に)

Last updated at Posted at 2017-06-12

ES2015が登場してすっかりCoffeeScriptがオワコン化(オワコンという言葉自体がオワコンか?)した感があります。
嫌いな言語ランキングでも無事3位にランクインされました(https://fossbytes.com/most-loved-and-most-hated-programming-languages/ )。

CoffeeScriptはもう死んだ言語なのでしょうか?
いえいえ、ES2015登場後もCoffeeScriptを使うメリットはあります。
そこで、すっかり嫌われ者になってしまったCoffeeScriptのいいところを紹介したいと思います。
ちなみに、TypeScriptについては触れません(触ったことがないので)。

CoffeeScriptは;が不要

21世紀にもなって;をつけないといけないのはかなり苦痛なのでこれは結構うれしいです。

CoffeeScriptは比較が厳密

js
""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true
coffeescript
""           ==   "0"           # false
0            ==   ""            # false
0            ==   "0"           # false
false        ==   "false"       # false
false        ==   "0"           # false
false        ==   undefined     # false
false        ==   null          # false
null         ==   undefined     # false
" \t\r\n"    ==   0             # false

引用元: http://qiita.com/mugichan3/items/9462844b049900ffb22c

jsの比較はかなり醜悪です。それはES2015でも(おそらく未来永劫)変わりません。
代わりに===を使えばいいのですが、逆にうっかり==を使ってしまうとバグの元です。
CoffeeScriptでは多くの言語と同じように==を素直に使えばいいので簡素です。

CoffeeScriptはfunction->, =>でかける

js
new Vue({
  created: function() {
    return this.hoge();
  }
});
coffeescript
new Vue
  created: ->
    @hoge()

jsでは関数を多用しますが、関数を定義するのにfunctionと書くのは長すぎます。
ES2015ではめでたくfunction=>とかけるようになりました。
が、それはthisが関数が定義されたスコープにおけるthisを引き継ぐ場合のみです。
引き継ぎたくない場合はあいかわらすfunctionと書かなければなりません。

CoffeeScriptではthisを引き継がない場合は->、'this'を引き継ぐ場合は=>と書くことができます。
簡潔で素晴らしいです。

CoffeeScriptはreturnが不要

js
new Vue({
  el: '#hoge',
  data: {
    foo: 'FOO',
    bar: 'BAR'
  }
});

Vue.component('piyo', {
  data: function() {
    return {
      foo: 'FOO',
      bar: 'BAR'
    };
  }
});
coffeescript
new Vue
  data: 
    foo: 'FOO'
    bar: 'BAR'

Vue.component 'piyo',
  data: ->
    foo: 'FOO'
    bar: 'BAR'

vue.jsにおいて、dataVueのインスタンスではオブジェクトなのに対して、componentはオブジェクトを返す関数を定義しなければなりません。
jsではfunctionと書いた上、returnも書かなければなりませんが、CoffeeScriptでは->をつけるだけです。
Vueのインスタンスとcomponentでインデントが統一できてきれいです。

CoffeeScriptはオブジェクトに,が不要

js
new Vue({
  methods: {
    sayFoo: function() {
      return console.log("FOO");
    },
    sayBar: function() {
      return console.log("BAR");
    }
  }
});
coffeescript
new Vue
  methods:
    sayFoo: ->
      console.log "FOO"
    sayBar: ->
      console.log "BAR"

vue.jsではメソッドを上記のように定義します。
ここでメソッドsayPiyoを追加したい時、どうするでしょうか?
私はよく、sayBarをコピペして次のように書いてしまいます。

js
new Vue({
  methods: {
    sayFoo: function() {
      return console.log("FOO");
    },
    sayBar: function() {
      return console.log("BAR");
    } // !!!
    sayPiyo: function() {
      return console.log("PIYO");
    }
  }
});

これは怒られます。なぜならsayBarsayPiyoの間に,がないからです。
キレそうになりますね。
CoffeeScriptではこのようなことはありません。

coffeescript
new Vue
  methods:
    sayFoo: ->
      console.log "FOO"
    sayBar: ->
      console.log "BAR"
    sayPiyo: ->
      console.log "PIYO"

ストレスフリー!


以上、思いついたことを書いてみました。
最後までお読み頂きありがとうございます。
よきCoffeeScriptライフを!

追記

きたぜ! CoffeeScript2
我がCoffeeScriptは永久に不滅だ!

27
12
2

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
27
12