Skip to content

Commit 88e6e45

Browse files
committed
style: fix formatting issue and restore original code style
- backtick - semicolon - etc..
1 parent fab40fc commit 88e6e45

1 file changed

Lines changed: 21 additions & 23 deletions

File tree

  • 1-js/12-generators-iterators/1-generators

1-js/12-generators-iterators/1-generators/article.md

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ alert(generator); // [object Generator]
4747
- `value`: 산출 값
4848
- `done`: 함수 코드 실행이 끝났으면 `true`, 아니라면 `false`
4949

50-
제너레이터를 만들고 첫 번째 산출 값을 받는 예시를 살펴봅시다.
50+
제너레이터를 만들고 첫 번째 산출 값을 받는 예시를 살펴봅시다.
5151

5252
```js run
5353
function* generateSequence() {
@@ -89,16 +89,15 @@ alert(JSON.stringify(three)); // {value: 3, *!*done: true*/!*}
8989

9090
![](generateSequence-4.svg)
9191

92-
이제 제너레이터가 종료되었습니다. 마지막 결과인 `value:3``done:true`를 통해 이를 확인할 수 있습니다.
92+
이제 제너레이터가 종료되었습니다. 마지막 결과인 `value:3``done:true`를 통해 이를 확인할 수 있습니다.
9393

9494
제너레이터가 종료되었기 때문에 지금 상태에선 `generator.next()`를 호출해도 아무 소용이 없습니다. `generator.next()`를 여러번 호출해도 객체 `{done: true}`가 반환될 뿐입니다.
9595

9696
```smart header="`function* f(…)`가 맞나요 아니면 `function *f(…)`가 맞나요?"
9797
둘 다 맞습니다.
9898

9999
그런데 `*`는 제너레이터 `함수`를 나타내므로 대개는 첫 번째 문법이 선호됩니다. `*`는 종류를 나타내는 것이지 이름을 나타내는 것이 아니기 때문입니다. 그러므로 `*``function`에 붙이도록 합시다.
100-
101-
````
100+
```
102101
103102
## 제너레이터와 이터러블
104103
@@ -118,13 +117,13 @@ let generator = generateSequence();
118117
for(let value of generator) {
119118
alert(value); // 1, 2가 출력됨
120119
}
121-
````
120+
```
122121

123122
`.next().value`을 호출하는 것 보다 나아 보이네요.
124123

125124
그런데 주의할 점이 있습니다. 위 예시를 실행하면 `1``2`만 출력되고 `3`은 출력되지 않습니다.
126125

127-
이유는 `for..of` 이터레이션이 `done: true`일 때 마지막 `value`를 무시하기 때문입니다. 그러므로 `for..of`를 사용했을 때 모든 값이 출력되길 원한다면 `yield`로 값을 반환해야 합니다.
126+
이유는 `for..of` 이터레이션이 `done: true`일 때 마지막 `value`를 무시하기 때문입니다. 그러므로 `for..of`를 사용했을 때 모든 값이 출력되길 원한다면 `yield`로 값을 반환해야 합니다.
128127

129128
```js run
130129
function* generateSequence() {
@@ -185,9 +184,9 @@ let range = {
185184
} else {
186185
return { done: true };
187186
}
188-
},
187+
}
189188
};
190-
},
189+
}
191190
};
192191

193192
// 객체 range를 대상으로 하는 이터레이션은 range.from과 range.to 사이의 숫자를 출력합니다.
@@ -203,15 +202,14 @@ let range = {
203202
from: 1,
204203
to: 5,
205204

206-
*[Symbol.iterator]() {
207-
// [Symbol.iterator]: function*()를 짧게 줄임
205+
*[Symbol.iterator]() { // [Symbol.iterator]: function*()를 짧게 줄임
208206
for (let value = this.from; value <= this.to; value++) {
209207
yield value;
210208
}
211-
},
209+
}
212210
};
213211

214-
alert([...range]); // 1, 2, 3, 4, 5
212+
alert( [...range] ); // 1, 2, 3, 4, 5
215213
```
216214

217215
`range[Symbol.iterator]()`는 제너레이터를 반환하고, 제너레이터 메서드는 `for..of`가 동작하는데 필요한 사항(아래 설명)을 충족시키므로 예시가 잘 동작합니다.
@@ -321,7 +319,7 @@ alert(str); // 0..9A..Za..z
321319

322320
## 'yield'를 사용해 제너레이터 안·밖으로 정보 교환하기
323321

324-
지금까지 배운 제너레이터는 값을 생성해주는 특수 문법을 가진 이터러블 객체와 유사했습니다. 그런데 사실 제너레이터는 더 강력하고 유연한 기능을 제공합니다.
322+
지금까지 배운 제너레이터는 값을 생성해주는 특수 문법을 가진 이터러블 객체와 유사했습니다. 그런데 사실 제너레이터는 더 강력하고 유연한 기능을 제공합니다.
325323

326324
`yield`가 양방향 길과 같은 역할을 하기 때문입니다. `yield`는 결과를 바깥으로 전달할 뿐만 아니라 값을 제너레이터 안으로 전달하기까지 합니다.
327325

@@ -349,10 +347,10 @@ generator.next(4); // --> 결과를 제너레이터 안으로 전달합니다.
349347
![](genYield2.svg)
350348

351349
1. `generator.next()`를 처음 호출할 땐 항상 인수가 없어야 합니다. 인수가 넘어오더라도 무시되어야 하죠. `generator.next()`를 호출하면 실행이 시작되고 첫 번째 `yield "2+2=?"`의 결과가 반환됩니다. 이 시점에는 제너레이터가 `(*)`로 표시한 줄에서 실행을 잠시 멈춥니다.
352-
2. 그 후, 위 그림에서 보듯이 `yield`의 결과가 제너레이터를 호출하는 외부 코드에 있는 변수, `question`에 할당됩니다.
350+
2. 그 후, 위 그림에서 보듯이 `yield`의 결과가 제너레이터를 호출하는 외부 코드에 있는 변수, `question`에 할당됩니다.
353351
3. 마지막 줄, `generator.next(4)`에서 제너레이터가 다시 시작되고 `4``result`에 할당됩니다(`let result = 4`).
354352

355-
외부 코드에선 `next(4)`를 즉시 호출하지 않고 있다는 점에 주목해 주시기 바랍니다. 제너레이터가 기다려주기 때문에 호출을 나중에 해도 문제가 되지 않습니다.
353+
외부 코드에선 `next(4)`를 즉시 호출하지 않고 있다는 점에 주목해 주시기 바랍니다. 제너레이터가 기다려주기 때문에 호출을 나중에 해도 문제가 되지 않습니다.
356354

357355
예시:
358356

@@ -371,18 +369,18 @@ function* gen() {
371369

372370
alert(ask1); // 4
373371

374-
let ask2 = yield "3 * 3 = ?";
372+
let ask2 = yield "3 * 3 = ?"
375373

376374
alert(ask2); // 9
377375
}
378376

379377
let generator = gen();
380378

381-
alert(generator.next().value); // "2 + 2 = ?"
379+
alert( generator.next().value ); // "2 + 2 = ?"
382380

383-
alert(generator.next(4).value); // "3 * 3 = ?"
381+
alert( generator.next(4).value ); // "3 * 3 = ?"
384382

385-
alert(generator.next(9).done); // true
383+
alert( generator.next(9).done ); // true
386384
```
387385

388386
실행 흐름을 나타낸 그림은 다음과 같습니다.
@@ -401,7 +399,7 @@ alert(generator.next(9).done); // true
401399

402400
여러 가지 예시를 통해 살펴보았듯이 외부 코드는 `yield`의 결과가 될 값을 제너레이터 안에 전달하기도 합니다.
403401

404-
그런데 외부 코드가 에러를 만들거나 던질 수도 있습니다. 에러는 결과의 한 종류이기 때문에 이는 자연스러운 현상입니다.
402+
그런데 외부 코드가 에러를 만들거나 던질 수도 있습니다. 에러는 결과의 한 종류이기 때문에 이는 자연스러운 현상입니다.
405403

406404
에러를 `yield` 안으로 전달하려면 `generator.throw(err)`를 호출해야 합니다. `generator.throw(err)`를 호출하게 되면 `err``yield`가 있는 줄로 던져집니다.
407405

@@ -466,9 +464,9 @@ function* gen() {
466464

467465
const g = gen();
468466

469-
g.next(); // { value: 1, done: false }
470-
g.return("foo"); // { value: "foo", done: true }
471-
g.next(); // { value: undefined, done: true }
467+
g.next(); // { value: 1, done: false }
468+
g.return('foo'); // { value: "foo", done: true }
469+
g.next(); // { value: undefined, done: true }
472470
```
473471

474472
이미 종료된 제너레이터에서 `generator.return()`을 다시 호출해도 인수로 전달한 값을 그대로 반환합니다([MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/return)).

0 commit comments

Comments
 (0)