From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/global_objects/generator/index.html | 138 +++++++++++++++++++++ .../global_objects/generator/next/index.html | 114 +++++++++++++++++ .../global_objects/generator/return/index.html | 101 +++++++++++++++ .../global_objects/generator/throw/index.html | 100 +++++++++++++++ 4 files changed, 453 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/generator/index.html create mode 100644 files/uk/web/javascript/reference/global_objects/generator/next/index.html create mode 100644 files/uk/web/javascript/reference/global_objects/generator/return/index.html create mode 100644 files/uk/web/javascript/reference/global_objects/generator/throw/index.html (limited to 'files/uk/web/javascript/reference/global_objects/generator') diff --git a/files/uk/web/javascript/reference/global_objects/generator/index.html b/files/uk/web/javascript/reference/global_objects/generator/index.html new file mode 100644 index 0000000000..30ac13af34 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/generator/index.html @@ -0,0 +1,138 @@ +--- +title: Generator +slug: Web/JavaScript/Reference/Global_Objects/Generator +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Довідка + - генератор + - застарілий генератор + - застарілий ітератор +translation_of: Web/JavaScript/Reference/Global_Objects/Generator +--- +
{{JSRef}}
+ +

Об'єкт Generator повертається {{jsxref("Statements/function*", "функцією-генератором", "", 1)}} та відповідає як протоколу ітерабельного об'єкта, так і протоколу ітератора.

+ +

Синтаксис

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen(); // "Generator { }"
+ +

Методи

+ +
+
{{jsxref("Generator.prototype.next()")}}
+
Повертає значення, видане виразом {{jsxref("Operators/yield", "yield")}}.
+
{{jsxref("Generator.prototype.return()")}}
+
Повертає надане значення та завершує генератор.
+
{{jsxref("Generator.prototype.throw()")}}
+
Викидає помилку у генераторі (також завершує генератор, якщо помилка не була перехоплена всередині генератора).
+
+ +

Приклад

+ +

Нескінченний ітератор

+ +
function* idMaker() {
+    var index = 0;
+    while(true)
+        yield index++;
+}
+
+var gen = idMaker(); // "Generator { }"
+
+console.log(gen.next().value); // 0
+console.log(gen.next().value); // 1
+console.log(gen.next().value); // 2
+// ...
+ +

Застарілі об'єкти-генератори

+ +

Firefox (SpiderMonkey) також реалізував більш ранню версію генераторів у JavaScript 1.7, де зірочка (*) у оголошенні функції не була потрібна (ви просто використовували ключове слово yield у тілі функції). Однак, підтримка застарілих генераторів була прибрана, починаючи з Firefox 58 (вийшов 23 січня, 2018) ({{bug(1083482)}}).

+ +

Методи застарілого генератора

+ +
+
Generator.prototype.next() {{non-standard_inline}}
+
Повертає значення, видане виразом {{jsxref("Operators/yield", "yield")}}. Цей метод відповідає методу next() у об'єкті-генераторі ES2015.
+
Generator.prototype.close() {{non-standard_inline}}
+
Закриває генератор, таким чином, виклик next() викине помилку StopIteration. Цей метод відповідає методу return() у об'єкті-генераторі ES2015.
+
Generator.prototype.send() {{non-standard_inline}}
+
Відсилав значення у генератор. Значення повертається виразом {{jsxref("Operators/yield", "yield")}} та повертає значення, видане наступним виразом {{jsxref("Operators/yield", "yield")}}. Метод send(x) відповідає методу next(x) у об'єкті-генераторі ES2015.
+
Generator.prototype.throw() {{non-standard_inline}}
+
Викидає помилку у генераторі. Цей метод відповідає методу throw() у об'єкті-генераторі ES2015.
+
+ +

Приклад застарілого генератора

+ +
function* fibonacci() {
+  var a = yield 1;
+  yield a * 2;
+}
+
+var it = fibonacci();
+console.log(it);          // "Generator {  }"
+console.log(it.next());   // 1
+console.log(it.send(10)); // 20
+console.log(it.close());  // undefined
+console.log(it.next());   // викидає StopIteration (бо генератор вже закритий)
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ES2015')}}Початкове визначення.
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ + + +

{{Compat("javascript.builtins.Generator")}}

+ +

Див. також

+ +

Застарілі генератори

+ + + +

Генератори ES2015

+ + diff --git a/files/uk/web/javascript/reference/global_objects/generator/next/index.html b/files/uk/web/javascript/reference/global_objects/generator/next/index.html new file mode 100644 index 0000000000..ea558c04ed --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/generator/next/index.html @@ -0,0 +1,114 @@ +--- +title: Generator.prototype.next() +slug: Web/JavaScript/Reference/Global_Objects/Generator/next +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next +--- +
{{JSRef}}
+ +

Метод next() повертає об'єкт з двома властивостями, done та value. Ви також можете передати параметр у метод next, щоб передати значення у генератор.

+ +

Синтаксис

+ +
gen.next(value)
+ +

Параметри

+ +
+
value
+
Значення, яке передається генератору. Значення буде присвоєне як результат виразу yield, тобто, у [variable] = yield [expression], значення, передане у функцію .next, буде присвоєне [variable]
+
+ +

Значення, що повертається

+ +

Об'єкт з двома властивостями:

+ + + +

Приклади

+ +

Використання next()

+ +

Наступний приклад демонструє простий генератор та об'єкт, що його вертає метод next:

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen(); // "Generator { }"
+g.next();      // "Object { value: 1, done: false }"
+g.next();      // "Object { value: 2, done: false }"
+g.next();      // "Object { value: 3, done: false }"
+g.next();      // "Object { value: undefined, done: true }"
+
+ +

Передача значень генератору

+ +

В цьому прикладі next викликається зі значенням. Зауважте, що перший виклик нічого не залогував, тому що генератор початково нічого не видавав.

+ +
function* gen() {
+  while(true) {
+    var value = yield null;
+    console.log(value);
+  }
+}
+
+var g = gen();
+g.next(1);
+// "{ value: null, done: false }"
+g.next(2);
+// 2
+// "{ value: null, done: false }"
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES2015', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ES2015')}}Початкове визначення.
{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ +
+ + +

{{Compat("javascript.builtins.Generator.next")}}

+
+ +

Див. також

+ + diff --git a/files/uk/web/javascript/reference/global_objects/generator/return/index.html b/files/uk/web/javascript/reference/global_objects/generator/return/index.html new file mode 100644 index 0000000000..fd1ebcbeee --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/generator/return/index.html @@ -0,0 +1,101 @@ +--- +title: Generator.prototype.return() +slug: Web/JavaScript/Reference/Global_Objects/Generator/return +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Довідка + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return +--- +
{{JSRef}}
+ +

Метод return() вертає надане значення та завершує генератор.

+ +

Синтаксис

+ +
gen.return(value)
+ +

Параметри

+ +
+
value
+
Значення, яке треба повернути.
+
+ +

Значення, що повертається

+ +

Значення, надане як аргумент.

+ +

Приклади

+ +

Використання return()

+ +

Наступний приклад демонструє простий генератор та метод return.

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen();
+
+g.next();        // { value: 1, done: false }
+g.return('foo'); // { value: "foo", done: true }
+g.next();        // { value: undefined, done: true }
+
+ +

Якщо return(value) викликається на генераторі, який вже знаходиться у "завершеному" стані, він залишиться у "завершеному" стані. Якщо жодного аргументу не надано, властивість value поверненого об'єкта буде такою ж, як при виклику .next(). Якщо аргумент надано, він буде присвоєний як значення властивості value поверненого об'єкта.

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen();
+g.next(); // { value: 1, done: false }
+g.next(); // { value: 2, done: false }
+g.next(); // { value: 3, done: false }
+g.next(); // { value: undefined, done: true }
+g.return(); // { value: undefined, done: true }
+g.return(1); // { value: 1, done: true }
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES2015', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ES2015')}}Початкове визначення.
{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ +
+ + +

{{Compat("javascript.builtins.Generator.return")}}

+
+ +

Див. також

+ + diff --git a/files/uk/web/javascript/reference/global_objects/generator/throw/index.html b/files/uk/web/javascript/reference/global_objects/generator/throw/index.html new file mode 100644 index 0000000000..ec8fc9d937 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/generator/throw/index.html @@ -0,0 +1,100 @@ +--- +title: Generator.prototype.throw() +slug: Web/JavaScript/Reference/Global_Objects/Generator/throw +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Довідка + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw +--- +
{{JSRef}}
+ +

Метод throw() відновлює виконання генератора викиданням у ньому помилки та повертає об'єкт з двома властивостями, done та value.

+ +

Синтаксис

+ +
gen.throw(exception)
+ +

Параметри

+ +
+
exception
+
Виняток, який треба викинути. З метою налагоджування корисно робити його instanceof {{jsxref("Error")}}.
+
+ +

Значення, що повертається

+ +

Об'єкт з двома властивостями:

+ + + +

Приклади

+ +

Використання throw()

+ +

Наступний приклад демонструє простий генератор та помилку, що викидається методом throw. Помилку, як завжди, можна перехопити блоком try...catch.

+ +
function* gen() {
+  while(true) {
+    try {
+       yield 42;
+    } catch(e) {
+      console.log('Перехоплено помилку!');
+    }
+  }
+}
+
+var g = gen();
+g.next();
+// { value: 42, done: false }
+g.throw(new Error('Щось пішло не за планом'));
+// "Перехоплено помилку!"
+// { value: 42, done: false }
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES2015', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ES2015')}}Початкове визначення.
{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ +
+ + +

{{Compat("javascript.builtins.Generator.throw")}}

+
+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf