일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- django widget
- Baekjoon
- 알고리즘 풀이
- c++
- 백준
- 알고리즘
- CSS
- react
- API
- 알고리즘 문제
- js
- form
- AWS
- 장고
- HTML
- 파이썬 알고리즘
- django rest framework
- 알고리즘 연습
- java
- Git
- django ORM
- PYTHON
- Algorithm
- es6
- DRF
- web
- 파이썬
- javascript
- Django
- MAC
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[ES6] generator 본문
generator
generator
는 중간에 멈출 수 있는 함수입니다.
일반적인 함수를 생각해보면 함수를 실행함과 동시에 함수의 처음부터 끝까지 한 번에 실행합니다.
하지만 generator
함수는 일시적으로 정지할 수 있고, 이를 다시 시작할 수 있습니다.
이를 사용하기 위해서는 function
뒤에 *
를 붙여주면 함수 내부에서는 yield
를 사용할 수 있습니다.
함수가 yield
를 만나게 되면 해당 함수는 일시적으로 정지되고 yield
뒤에 인자를 반환합니다.
일반적인 함수의 return
과 비슷한 역할을 하고 있습니다.
function* fruits() {
yield "apple";
yield "banana";
yield "melon";
yield "strawberry";
}
해당 함수를 찍어보았지만 Generator
라는 말만 나오고 원하는 값은 얻을 수 없습니다.
function* fruits() {
yield "apple";
yield "banana";
yield "melon";
yield "strawberry";
}
const fruitGenerator = fruits();
console.log(fruitGenerator);
// Object [Generator] {}
값을 얻기위해서는 next()
를 통해 얻을 수 있습니다.
value
는 yield
뒤에 나온 인자값이 반환되고, done
은 generator가 아직 끝나지 않았음을 의미합니다.
console.log(fruitGenerator.next());
// { value: 'apple', done: false }
이를 반복하면 yield
가 더 이상 끝나지 않고 함수가 종료될 시점에 done
이true
로 반환합니다.
console.log(fruitGenerator.next());
console.log(fruitGenerator.next());
console.log(fruitGenerator.next());
console.log(fruitGenerator.next());
console.log(fruitGenerator.next());
/*
{ value: 'apple', done: false }
{ value: 'banana', done: false }
{ value: 'melon', done: false }
{ value: 'strawberry', done: false }
{ value: undefined, done: true }
*/
값에 접근하기 위해서는 value
를 통해 접근합니다.
console.log(fruitGenerator.next().value);
// apple
generator
를 도중에 끝내는 방법으로는 두 가지가 존재합니다.
-
return
return
을 통해서 정상적으로 종료시킬 수 있으며value
에는return
에서 받은 값 인자가done
에는true
가 들어갑니다.console.log(fruitGenerator.next()); console.log(fruitGenerator.return("end")); console.log(fruitGenerator.next()); /* { value: 'apple', done: false } { value: 'end', done: true } { value: undefined, done: true } */
-
throw
throw
는 통해서 에러를 발생할 수 있으며throw
의 인자가catch
로 파라미터로 넘어갑니다.function* fruits() { try { yield "apple"; yield "banana"; yield "melon"; yield "strawberry"; } catch (e) { console.log("catch 실행"); console.log(e); } } const fruitGenerator = fruits(); console.log(fruitGenerator.next()); console.log(fruitGenerator.throw("throw 실행")); /* { value: 'apple', done: false } catch 실행 return 실행 { value: undefined, done: true } */
'웹프로그래밍 > ES6' 카테고리의 다른 글
[ES6] Symbol (0) | 2020.01.05 |
---|---|
[ES6] proxy (0) | 2020.01.05 |
[ES6] Class의 상속, super, this (0) | 2020.01.04 |
[ES6] Async and Await (0) | 2020.01.03 |
[ES6] Promises - then, catch, all, race, finally (1) | 2020.01.03 |
Comments