프로토콜

soob·2020년 8월 1일
0

함수형프로그래밍

목록 보기
1/8

이터러블/이터레이터

  • 이터러블: 이터레이터를 리턴하는 Symbol.iterator 를 가진 값
  • 이터레이터: { value, done } 객체를 리턴하는 next() 를 가진 값
  • 이터러블/이터레이터 프로토콜: 이터러블을 for...of, 전개 연산자 등과 함께 동작하도록한 규약

제너레이터

  • 이터레이터이면서 이터러블을 생성하는 함수
function *gen(){
	yield 1;
    yeild 2;
    return 100; // done 이 true 일 때의 value값(순회할 때는 반환하지 않는다.)
}

const iter = gen();
iter[Symbol.iterator]() == iter // true
iter.next();
iter.next();

for (const g of gen()) console.log(g);

제너레이터 문장을 이용해 어떤 문장, 값도 순회 가능하도록 만들 수 있다.

function *infinity(i=0){
	while (true) yield i++;
}
function *limit(l, iter){
	for (const i of iter){
    	yield i;
        if (i === l) return;
    }
}
//odd
function *odd(l){
	let =0;
    for (const o of limit(l, infinity())){
    	if(o % 2) yield o;
     
    }
}

const o = odd(10);
o.next();
o.next();

for (const o of odd(10)) log(o)

console.log(...odd(10))
[...odd(10)]
const [head, ...tail] = odd(10);
const [a, b, ...rest] = odd(10);

profile
쓸데없는 소리를 좋아하는 개발자

0개의 댓글