Microsoft Edge の機能を調べてみた - Iteration Protocols 編
以前の記事で書いた Symbol の Symbol.iterator では Generator を使用しイテレータブルなオブジェクト作成しました。
今回はデフォルトイテレータを見てみようかと思います。
この内容は Generator の記事であまり説明はしていませんが今回紹介する機能を使用しています。
やること
Symbol の Symbol.iterator を使い、next() で反復動作可能なオブジェクトをつくる。
Iteration Protocols
Iteration Protocols には以下のものがあります。
- iterable protocol
- iterator protocol
iterable protocol
イテレータブル プロトコル は [Symbol.iterator] を使用し反復動作の定義、カスタマイズができます。
Symbol.iterator を使用するため、以下の型しか Edge では使用できません。
- Array
- TypedArray
- String
- Map
- Set
iterator protocol
イテレータ プロトコル は next() を使用したデフォルトの反復処理が定義されています。
デフォルトイテレータを使ってみる
Symbol.iterator が使用できる型である文字列で試してみます。
text に Symbol.iterator キーのプロパティを設定し、
iterator をイテレータブルな文字列を持つオブジェクトにします。
イテレータブルになったオブジェクトで next() を呼ぶと文字列を1文字ずつ返します。
next() で返されるオブジェクトは done と value になり、
value はオブジェクトの値、done はオブジェクトの続きがあれば false を返します。
オブジェクトの続きが無い場合は done は true になり undefined の値を返します。
イテレータを使用する for-of では done が true になると処理が止まります。
まとめ
新しい型の Symbol や for-of、Generator を使用すると、
今までは何行か書かなければならなかった部分も数行で書け便利ですね。
まだ、Symbol は Safari ではサポートされていませんが
WWDC 2015で今年実装すると言われていたので、次の Safari や iOS 9 で使うことができる様になると期待しています。