Node.js v4がリリースされたらコードの書き方でどこが変わるか?
追記1:続・Node.js v4がリリースされたらコードの書き方でどこが変わるか? - なっく日報に続きを書きました。
追記2:Computed propetiesにバグがあることを追記しました。
追記3:Computed propetiesのバグが修正されたので該当箇所を削除しました。
9月には出るということで、ちょっと考えてみました。
iojs v3のES6でshipping featuresなもの(V8においてES6でONにしても大丈夫な機能)で書いてますが、もし違ったらすいません。
変数宣言
基本let
とconst
。var
は使わない。
'use strict'; // strictモードでないとletとconstは使えない const STATIC_VAR = '定数'; let a = 'varは使わない'; for (let i = 0; i < 10; i++) { // }
が、ここで全部constでいいんじゃないかまた迷いが。
ES6では変数の宣言にletとconstどっちを使うべきか? - なっく日報
var, const, letで百万回ループを回してもそこまで差は出なかったので大丈夫じゃないかとは思いつつ迷う。。
超適当なベンチマーク
console.time('var'); for (let i = 0; i < TIMES; i++) { let aaa = i + v + v; console.error(aaa);; } console.timeEnd('var'); console.time('const'); for (let i = 0; i < TIMES; i++) { let aaa = i + c + c; console.error(aaa);; } console.timeEnd('const'); console.time('let'); for (let i = 0; i < TIMES; i++) { let aaa = i + l + l; console.error(aaa);; } console.timeEnd('let');
クラス
普通にclassを使う。
prototype
や__proto__
を見かけることはほぼなくなる気がする。
class Cat { constructor(name) { this._name = name; } get name() { return this._name; } set name(name) { this._name = name; } speak() { console.log(this.name + ' makes a noise.'); } static nyang() { console.log('nyang'); } }
オブジェクトリテラル
Enhanced Object Literalsの機能をちゃんと使う。
var a = 'abc'; var obj = { a, hoge() { }, [a]: 'abcがプロパティ名', };
文字列
変数混在の文字列、複数行の文字列にはTemplate stringsを使う。
let a = 'Template strings'; let b = `${a}を基本的には使う。`; let c = `複数行の場合も Template strings `;
文字列のメソッド
今までなかったメソッドが追加されています。便利。
'-'.repeat(10); 'abc'.includes('b'); 'abc'.startsWith('a'); 'abc'.endsWith('c');
for-of
これは積極的に使って良いと思います。・・・が、念のためベンチマークをとってみました。
'use strict'; const TIMES = 1000000; let array = []; for (let i = 0; i < TIMES; i++) { array.push(i); } console.time('normal'); for (let i = 0; i < TIMES; i++) { console.error(array[i]); } console.timeEnd('normal'); console.time('for-of'); for (let i of array) { console.error(i); } console.timeEnd('for-of');
iojs for.js 2> /dev/null normal: 2704ms for-of: 2869ms
ま、大丈夫そう。
PromiseやGenerators
使うべき場面があれば、使うという感じでしょうか。。特にGeneratorsの方は正直あまり使う場面が思い浮かびません。
Map, Set, WeakMap, WeakSet
使っていきましょう。
Symbols
すいません、どこで使えばよいのでしょうか・・・(すいません)
おまけLint
これを機にJSHintを使っている場合はESLintに乗り換えて良いんじゃないでしょうか。
ES6関連のESLintの設定は本家の.eslintrcが参考になりますね!
https://github.com/nodejs/node/blob/master/.eslintrc#L5