孤独プログラマー譚

孤独死が近い。

今さらCoffeeScriptでクロージャ

仕事でCoffeeScriptを使っている。

練習も兼ねて、クロージャを書く。

CoffeeScriptRubyと似ている…。
素のJavaScriptと比べて、色々と省略できすぎるため、初見では何を書いているかさっぱり分からない。


引数を2倍にする関数、3倍にする関数を返す。

factory = (type, num) ->
  {
    double: ->
      num = num * 2
      console.log num
    triple: ->
      num = num * 3
      console.log num
  }[type]

numは、関数スコープの外側に保持される。
double関数, triple関数はそれぞれクロージャとなる。


素のJavaScriptに書き換えると、以下になる。

var factory = function(type, num) {
  return {
    double: function() {
      num = num * 2
      console.log(num)
    },
    triple: function() {
      num = num * 3
      console.log(num)
    }
  }[type]
}

 

クロージャをそれぞれ実行。
変数numが保持されていることが分かる。

double = factory('double', 1)
double() # 2
double() # 4
double() # 8

triple = factory('triple', 3)
triple() # 9
triple() # 27
triple() # 81