https://babeljs.io/docs/learn-es6/#default-rest-spread
前回に引き続きBabelのLearn ES6で新しいJavaScriptを学んでいきます。なにか間違いありましたらご指摘いただけると助かります。
###Default + Rest + Spread
- 引数にデフォルト値を指定できます
function f(x=0)
- 可変長引数がサポートされます
function f(x, ...y)
- 呼び出し時、引数に配列をマッチングできます
function f(x,y,z){}; f(...[1,2,3])
- 例:http://www.es6fiddle.net/i89ltam3/
###Let + Const
- 新しい宣言文が追加されます
- let : varと異なり同スコープ中で再宣言できません
- const : 定数であり再代入できません
//可能
var x=0;
var x=1:
//不可
let x=0;
let x=1:
//不可
const x=0
x=1
###Iterators + For..Of
- 自作可能なイテレータが導入されました
-
for(var x of iterable ){}
のように使用します - イテレーターのインターフェースは以下のようになります。
- オブジェクトIterableは[Symbol.iterator]メソッドをもち、Iteratorを返します
- Iteratorはnextメソッドをもち、IteratorResult を返します。
- IteratorResult はvalueプロパティとdoneプロパティを持ち、値と終了判定フラグを返します。
- 例:http://www.es6fiddle.net/i89mkv62/
interface IteratorResult {
done: boolean;
value: any;
}
interface Iterator {
next(): IteratorResult;
}
interface Iterable {
[Symbol.iterator](): Iterator
}
###Generators
- イテレータを簡素化するためにジェネレータが用意されています
- ジェネレータは
function*
とyield
を使用します -
function*
で定義されたfunctionはジェネレータを返します - ジェネレータはnextとthrowをもつイテレータのサブタイプです。
-
function*
内ではyield
を用い、値を返します。 - 例:http://www.es6fiddle.net/i89n7uh9/
###Unicode
- ユニコード文字をサポートします
- RegExpにuオプションがサポートされます
- 例:http://www.es6fiddle.net/i89nyko4/
###Modules
- モジュールがサポートされます
- モジュール側は
export
を、呼び出し側はimport
を使用します - モジュール側は
export
をclass, function, var などの頭につけることで外部に公開できます - 呼び出し側は
import * as <name> from <module>
することでmoduleがexportしたメンバをもつnameオブジェクトを使用できます - 分解代入を使用し
import {<member1>,<member2>} from <module>
のように必要なメンバのみ取得することも可能です - module側は
export default
を使用することでas
を使用せずimport <name> from <module>
でデフォルトの関数等を指定できます - defaultを使用した場合、import * as from `のnameオブジェクトにdefaultは含まれません
- defaultと通常のexportを両用したモジュールの場合、
import <name1>, * as <name2> from <module>
または`import , {, as from のように記述できます - moduleは
export * from <another_module>
により別モジュールを自身のメンバのように公開することができます
lib/math.js
export function sum(x, y) {
return x + y;
}
export var pi = 3.141593;
lib/mathplusplus.js
export * from "./math";
export var e = 2.71828182846;
export default function(x) {
return Math.exp(x);
}
script.js
import exp,{e,pi} from "./lib/mathplusplus";
console.log(e)
console.log("e^pi = " + exp(pi));
result.
C:\workspace\babel>babel-node script.js
2.71828182846
e^pi = 23.14070064895278
###Module Loaders
- 動的なモジュールローダがサポートされます
-
npm install systemjs traceur
が必要です
import System from 'systemjs'
System.import("./lib/math").then(function(m) {
console.log("2π = " + m.sum(m.pi, m.pi));
});
今回はここまで。3分の2くらい終わりました。次回