[関数式プログラミングとES 6+]2.for of, iterable, iterator
ES 6巡回
for of
ES 5ツアーよりも宣言的です.
const arr = [1, 2, 3];
//es5 - Array객체의 length 프로퍼티를 활용한다.
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
//es6
for (const el of arr) {
console.log(el);
}
es 5では,Set,Mapオブジェクトは巡回していない.しかしes 6ではfor of文で巡回することができる.why?
[Symbol.iterator]!
なぜならofはどのように操作されているのか
オブジェクトに
[Symbol.iterator]
propertyのiteratorメソッドがある場合、for ofは操作します.反例として、Arrayオブジェクトの
[Symbol.iterator]
にnullを指定した場合、forは機能しません.iterable/iteratorプロトコルとは?
JSのSet、Map、Arrayはiterable/iteratorプロトコルに従います.
iterable/iteratorプロトコル:iterableの動作規則
iterable:iteratorの
[Symbol.iterator]
メソッドの値を返します.Arrayオブジェクトはiterableです.
iterator:
{ value, done }
は、オブジェクトのnextメソッドの値を返します.forの内部作業方式
const arr = [1, 2, 3];
const iterator = arr.[Symbol.iterator]();
// iterator.next()가 리턴한 객체를 done프로퍼티가 true가 될 때까지 순차적으로 value프로퍼티 값을 반환한다.
map.keys(), map.values(), map.entries()...
これらのメソッドはiteratorを返します.ただし、[Symbol.iterator]があり、for of MoonなどのIterableプロトコルコードで使用できます.([Symbol.iterator]が自分を引用しているため)
well-formed iterator
-next()を何回か呼び出した後、for of文などに渡し、next()を行った後の値を返します.
カスタムイテレーション/イテレーションプロトコルの定義
// 이런 형태를 띄우고 있다.
cosnt iterable = {
[Symbol.iterator]() {
return {
next() {
return { value, done }
},
[Symbol.iterator]() {
return this;
}
}
}
}
Reference
この問題について([関数式プログラミングとES 6+]2.for of, iterable, iterator), 我々は、より多くの情報をここで見つけました https://velog.io/@fan/함수형프로그래밍과-ES6-2.-for-of-iterable-iteratorテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol