μ΄μ κΈ β(3) λΈλΌμ°μ λ λλ§ κ³Όμ νꡬ - HTML νμβμμ
html λ¬Έμμ΄μ νλμ© μμ°¨μ μΌλ‘ νμΈνκΈ° μν΄ Generator ν¨μλ₯Ό μ¬μ©νκ² λμλ€.
Generator ν¨μμ λν΄ μμ보μ!
ES6μμ λμ λ ν¨μλ‘ MDN λ¬Έμμ λ°λ₯΄λ©΄ βλΉ μ Έλκ°λ€κ° λμ€μ λ€μ λμμ¬ μ μλ ν¨μβλΌκ³ νννλ€.
μΌλ°ν¨μμμ μ°¨μ΄μ μ μΌλ°ν¨μμ²λΌ ν¨μ νΈμΆ μ λ°λ‘ μ½λκ° μ€νλλ κ²μ΄ μλ, λμ μ€νμ μ²λ¦¬νλ Iterator κ°μ²΄κ° λ°νλλ€λ μ μ΄λ€.
νμ΄ μ€λͺ νμλ©΄ ν¨μ μ€ν μ€μ μ€κ°μ μΌμμ μ§(pause)νκ³ λμμ μ¬κ°(resume)ν μ μλ ν¨μμ΄λ€.
μ΄λ₯Ό κ°λ₯νκ² νλ κ²μ΄ yield
ν€μλμ΄λ©°, yield
ν€μλλ₯Ό μ¬μ©ν ν¨μλ Iterable κ°μ²΄λ₯Ό λ°ννλ€.
ES6μ λμ λ ννλ²(protocol)μ΄λ€.
for...of
ꡬ문μμ μ΄λ€ valueλ€μ λ°λ³΅νμ¬ μ¬μ©ν μ μλ κ°μ²΄λ₯Ό μλ―Ένλ©°,
String,Β Array,Β TypedArray,Β Map,Β SetΒ λ λͺ¨λ λ΄μ₯ iterable μ΄λ€.
μ¬μ©μκ° μ μνμ¬ λ§λ€ μ μμΌλ©°, yield
ν€μλλ₯Ό μ¬μ©νλ©΄ λλ€.
ꡬ쑰λ μΌλ° ν¨μλ₯Ό μμ±νλ λ°©λ²κ³Ό λΉμ·νλ©° *μ λΆμ¬μ€λ€λ μ μμ λ€λ₯΄λ€.
function* name([param, [, param, [, ...param]]]) {
statements
}
function* generator(i) {
yield i;
yield i + 10;
}
const gen = generator(10);
console.log(gen.next().value);
// Expected output: 10
console.log(gen.next().value);
// Expected output: 20
yield
ν€μλλ₯Ό ν΅ν΄ ν¨μ λ΄μμ μμ°¨μ μΌλ‘ μ€νλ ꡬ문μ μμ±νκ³ ,next()
λ₯Ό νΈμΆνλ©΄ μ§νμ΄ λ©μ·λ μμΉμμλΆν° μ¬μ€νλλ€.next()
λ νμ μλ λ νλ‘νΌν°λ₯Ό κ°μ§ κ°μ²΄λ₯Ό λ°ννλ€.value
: μ°μΆ κ°done
: ν¨μ μ½λ μ€νμ΄ λλ¬μΌλ©΄Β true
, μλλΌλ©΄Β false
μ΄ν°λ μ΄ν°λ for...of
ꡬ문μ ν΅ν΄ κ°μ μ»μ μλ μλ€.
function* generateSequence() {
yield 1;
yield 2;
return 3;
}
let generator = generateSequence();
for(let value of generator) {
alert(value); // 1, 2κ° μΆλ ₯λ¨
}
for...of
ꡬ문μ ν΅ν΄ κ°μ μ»μ κ²½μ° done: false
μΈ value
λ§ μΆλ ₯λλ―λ‘ return
λλ κ°μ μΆλ ₯λμ§ μλλ€.return
μ yield
ν€μλλ‘ λ°κΎΈλ©΄ λλ€.Generator μμ Generatorλ₯Ό μ λλ μ΄ν° μ»΄ν¬μ§μ (Generator Composition)μ΄λΌκ³ νλ€.
μ΄λ yield*
λ¬Έλ²μ΄ μ¬μ©λλ€. Generator ν¨μ μμμ Generator ν¨μλ₯Ό νΈμΆν λ yield*
λ₯Ό μ¬μ©νλ©΄ λλ κ²μ΄λ€.
function* generateSequence(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}
function* generatePasswordCodes() {
// 0..9
yield* generateSequence(48, 57);
// A..Z
yield* generateSequence(65, 90);
// a..z
yield* generateSequence(97, 122);
}
let str = '';
for(let code of generatePasswordCodes()) {
str += String.fromCharCode(code);
}
next() μΈμκ°μ λ£λλ€λ©΄ Generator μμΌλ‘ κ°μ μ λ¬νλλ°, μμλ λ€μκ³Ό κ°λ€.
function* gen() {
let ask1 = yield "2 + 2 = ?";
alert(ask1); // 4
let ask2 = yield "3 * 3 = ?"
alert(ask2); // 9
}
let generator = gen();
alert( generator.next().value ); // "2 + 2 = ?"
alert( generator.next(4).value ); // "3 * 3 = ?"
alert( generator.next(9).done );
μΆμ²: JAVASCRIPT INFO - μ λλ μ΄ν°
μΆμ²