1 분 소요

오늘 한 일

주말엔 아르바이트가 있어서 버스 이동하면서 틈틈이 공부하고 집에 늦게 귀가해서 12시 전까지 공부한 내용을 작성해보려고 한다.

  • 제너레이터
  • try, catch
  • 온라인 스터디모임 참여

이터레이터로 만들던 것을 좀 더 심플하게 순회하면서 값을 뽑아내는.. 값을 생성할 수 있는 생성기? 라고 할 수 있는 제너레이터에 대해 공부했다.

function* multipleGenerator() {
  for (let i = 0; i < 10; i++) {
    yield i ** 2;
  }
}
const multiple = multipleGenerator();
let next = multiple.next();
console.log(next.value, next.done);
// 0 , false
  1. 제너레이터를 만드려면 함수를 사용해야 하고 function 키워드 뒤에 항상 *를 붙여줘야 한다.

  2. yield 는 바로 반환하는 return과는 다르게 사용자가 원할 때 까지 기다렸다가 사용자가 요청할 때 하나씩 하나씩 반환해준다.

function* multipleGenerator() {
  for (let i = 0; i < 10; i++) {
    yield i ** 2;
  }
}
const multiple = multipleGenerator();
let next = multiple.next();
console.log(next.value, next.done);

multiple.return(); // 종료
next = multiple.next();

next 호출 사이에 return 을 하면 제너레이터가 끝나버리기 때문에 yield와 next를 조합해도 다음 값이 출력되지 않는다.

function* multipleGenerator() {
  for (let i = 0; i < 10; i++) {
    yield i ** 2;
  }
}
const multiple = multipleGenerator();
let next = multiple.next();
console.log(next.value, next.done);
multiple.throw('Error');
next = multiple.next(); // 에러발생

throw를 통해 에러를 던질 수 있다.

이렇게 throw 를 던지고 next를 호출하면 crash 에러가 발생한다.

던져지는 에러들을 예방하고 싶다면 try와 catch 안에 적어줘야 한다.

function* multipleGenerator() {
  try {
    for (let i = 0; i < 10; i++) {
      yield i ** 2;
    }
  } catch (error) {
    console.log(error);
  }
}
const multiple = multipleGenerator();
let next = multiple.next();
console.log(next.value, next.done);
multiple.throw('Error');
next = multiple.next(); // 잘 출력된다.

이렇게 해서 이터레이터, 제너레이터 밖에서도 제어가 가능하다.

next를 통해 값을 받아올 수도 있고 return을 통해 중지시킬 수도 있다.

그 내부로 에러를 throw 할 수도 있다.

그러나 대게 이렇게 우리가 이너레이터나 제너레이터를 구현할 일이 적다고 한다.


모각코 온라인 스터디모임에 참여했다. 내일부터 각자 게더타운에 모여서 캠을 켜고 공부하면 되는데 이걸 하는 이유는 다른 사람이 코딩하는 화면을 보고 경쟁심과 나를 좀더 채찍질하고 나태해지지 않기 위해서라고 대답할 수 있을 것 같다.

13시 30분부터 18시까지 하는데 노션을 이용해 출결을 하고 슬랙을 통해 채팅을 한다고한다. 게더타운은 처음 이용해봤는데 줌을 통한 영상회의와는 조금 다른 요소가 있어서 새로웠다.

내일부터 꾸준히 참여 할 예정이다.

태그:

카테고리:

업데이트:

댓글남기기