IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

nodeJSでES6を使う(多分)

よくわかってないのですが、harmonyオプションをできるみたいです。

:testnode$ node -help | grep harm
  --harmony_scoping (enable harmony block scoping)
  --harmony_modules (enable harmony modules (implies block scoping))
  --harmony_proxies (enable harmony proxies)
  --harmony_generators (enable harmony generators)
  --harmony_numeric_literals (enable harmony numeric literals (0o77, 0b11))
  --harmony_strings (enable harmony string)
  --harmony_arrays (enable harmony arrays)
  --harmony_arrow_functions (enable harmony arrow functions)
  --harmony (enable all harmony features (except proxies))

=>がアロー式となるようです。

:testnode$ node --harmony 
> foo = (x) => {return x * x}
[Function]
> foo(3)
9

オブジェクトのみをreturnする場合は、カッコでくくるとreturnが不要になります。

> foo = (x) => ({result : x * x})
[Function]
> foo(3)
{ result: 9 }
>

関数を実行するときは、引数にカッコをつけないとダメなようです。

> foo 4
SyntaxError: Unexpected number
    at Object.exports.createScript (vm.js:44:10)
    at REPLServer.defaultEval (repl.js:117:23)
    at bound (domain.js:254:14)
    at REPLServer.runBound [as eval] (domain.js:267:12)
    at REPLServer.<anonymous> (repl.js:279:12)
    at REPLServer.emit (events.js:107:17)
    at REPLServer.Interface._onLine (readline.js:214:10)
    at REPLServer.Interface._line (readline.js:553:8)
    at REPLServer.Interface._ttyWrite (readline.js:830:14)
    at ReadStream.onkeypress (readline.js:109:10)

2引数の場合はアローを重ねるとできます。

> foo = (x) => (y) => {return x * y}
[Function]
> foo(4)(5)
20

カリー化もできるようです。

> bar = foo(4)
[Function]
> bar(5)
20
>