diff options
Diffstat (limited to 'files/uk/web/javascript/reference/operators')
3 files changed, 0 insertions, 450 deletions
diff --git a/files/uk/web/javascript/reference/operators/array_comprehensions/index.html b/files/uk/web/javascript/reference/operators/array_comprehensions/index.html deleted file mode 100644 index ebd2425ae2..0000000000 --- a/files/uk/web/javascript/reference/operators/array_comprehensions/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: Заповнення масивів -slug: Web/JavaScript/Reference/Operators/Array_comprehensions -tags: - - JavaScript - - Оператор - - застарілий - - нестандартний -translation_of: Archive/Web/JavaScript/Array_comprehensions ---- -<div>{{jsSidebar("Operators")}} -<div class="warning"><strong>Нестандартний. Не використовуйте!</strong><br> -Синтаксис заповнення масивів є нестандартним та був прибраний, починаючи з Firefox 58. Для варіантів використання в майбутьому розгляньте {{jsxref("Array.prototype.map")}}, {{jsxref("Array.prototype.filter")}}, {{jsxref("Functions/Стрілкові_функції", "стрілкові функції", "", 1)}} та {{jsxref("Operators/Spread_syntax", "оператор розпакування", "", 1)}}.</div> -{{Obsolete_Header(58)}}</div> - -<p>Синтаксис <strong>заповнення масивів</strong> (array comprehension) був виразом JavaScript, який дозволяв швидко збирати новий масив, базуючись на вже існуючому масиві. Однак, він був прибраний зі стандарту та з реалізації Firefox. Не використовуйте його!</p> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox">[for (x of iterable) x] -[for (x of iterable) if (condition) x] -[for (x of iterable) for (y of iterable) x + y] -</pre> - -<h2 id="Опис">Опис</h2> - -<p>У заповненнях масивів дозволені наступні два види компонентів:</p> - -<ul> - <li>{{jsxref("Statements/for...of", "for...of")}} та</li> - <li>{{jsxref("Statements/if...else", "if")}}</li> -</ul> - -<p>Перебір for-of завжди є першим компонентом. Можна використовувати більше одного перебору for-of чи if-конструкцій.</p> - -<p>Заповнення масивів були попередньо запропоновані для стандартизації у ECMAScript 2016, вони надають корисне скорочення запису для конструювання нового масиву на основі змісту іншого масиву. Заповнення часто можуть використовуватись замість викликів {{jsxref("Array.prototype.map", "map()")}} та {{jsxref("Array.prototype.filter", "filter()")}}, або як засіб їх об'єднати.</p> - -<p>Наступне заповнення бере масив чисел та створює новий масив, де кожне з цих чисел подвоюється.</p> - -<pre class="brush: js">var numbers = [1, 2, 3, 4]; -var doubled = [for (i of numbers) i * 2]; -console.log(doubled); // виводить 2,4,6,8 -</pre> - -<p>Це еквівалентно наступній операції {{jsxref("Array.prototype.map", "map()")}}:</p> - -<pre class="brush: js">var doubled = numbers.map(i => i * 2); -</pre> - -<p>Заповнення також можуть використовуватись для відбору елементів, які відповідають певному виразу. Ось заповнення, яке обирає лише парні числа:</p> - -<pre class="brush: js">var numbers = [1, 2, 3, 21, 22, 30]; -var evens = [for (i of numbers) if (i % 2 === 0) i]; -console.log(evens); // виводить 2,22,30 -</pre> - -<p>Метод {{jsxref("Array.prototype.filter", "filter()")}} може використовуватись для тієї ж самої мети:</p> - -<pre class="brush: js">var evens = numbers.filter(i => i % 2 === 0); -</pre> - -<p>Операції з {{jsxref("Array.prototype.map", "map()")}} та {{jsxref("Array.prototype.filter", "filter()")}} можна об'єднати у єдине заповнення масиву. Ось таке, що відфільтровує лише парні числа, а потім створює масив, де вони подвоєні:</p> - -<pre class="brush: js">var numbers = [1, 2, 3, 21, 22, 30]; -var doubledEvens = [for (i of numbers) if (i % 2 === 0) i * 2]; -console.log(doubledEvens); // виводить 4,44,60 -</pre> - -<p>Квадратні дужки заповнення масиву створюють неявний блок для області видимості. Нові змінні (такі, як i у прикладі) поводяться так, ніби вони були оголошені за допомогою {{jsxref("Statements/let","let")}}. Це означає, що вони не будуть доступні за межами заповнення.</p> - -<p>Вхідні дані для заповнення масиву не обов'язково самі мають бути масивом; <a href="/uk/docs/Web/JavaScript/Guide/Iterators_and_Generators" title="en-US/docs/JavaScript/Guide/Iterators and Generators">ітератори та генератори</a> також підійдуть.</p> - -<p>Навіть рядки можна використовувати як вхідні дані; щоб виконати наведені вище функції filter та map (на подібних до масиву об'єктах):</p> - -<pre class="brush: js">var str = 'abcdef'; -var consonantsOnlyStr = [for (c of str) if (!(/[aeiouAEIOU]/).test(c)) c].join(''); // 'bcdf' -var interpolatedZeros = [for (c of str) c + '0' ].join(''); // 'a0b0c0d0e0f0' -</pre> - -<p>Знову ж таки, початкова форма не зберігається, тому нам доведеться скористатись методом {{jsxref("Array.prototype.join", "join()")}}, щоб повернутись до рядка.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Прості_заповнення_масивів">Прості заповнення масивів</h3> - -<pre class="brush:js">[for (i of [1, 2, 3]) i * i ]; -// [1, 4, 9] - -var abc = ['А', 'Б', 'В']; -[for (letters of abc) letters.toLowerCase()]; -// ["а", "б", "в"]</pre> - -<h3 id="Заповнення_масивів_з_оператором_if">Заповнення масивів з оператором if</h3> - -<pre class="brush: js">var years = [1954, 1974, 1990, 2006, 2010, 2014]; -[for (year of years) if (year > 2000) year]; -// [2006, 2010, 2014] -[for (year of years) if (year > 2000) if (year < 2010) year]; -// [2006], те саме, що й нижче: -[for (year of years) if (year > 2000 && year < 2010) year]; -// [2006] -</pre> - -<h3 id="Заповнення_масивів_у_порівнянні_з_map_та_filter">Заповнення масивів у порівнянні з <code>map</code> та <code>filter</code></h3> - -<p>Легко зрозуміти синтаксис заповнення масивів, порівнявши його з методами масиву {{jsxref("Array.map", "map")}} та {{jsxref("Array.filter", "filter")}}:</p> - -<pre class="brush: js">var numbers = [1, 2, 3]; - -numbers.map(function (i) { return i * i }); -numbers.map(i => i * i); -[for (i of numbers) i * i]; -// усі дорівнюють [1, 4, 9] - -numbers.filter(function (i) { return i < 3 }); -numbers.filter(i => i < 3); -[for (i of numbers) if (i < 3) i]; -// усі дорівнюють [1, 2] -</pre> - -<h3 id="Заповнення_масивів_з_двома_масивами">Заповнення масивів з двома масивами</h3> - -<p>Використання двох переборів for-of для роботи з двома масивами:</p> - -<pre class="brush: js">var numbers = [1, 2, 3]; -var letters = ['а', 'б', 'в']; - -var cross = [for (i of numbers) for (j of letters) i + j]; -// ["1а", "1б", "1в", "2а", "2б", "2в", "3а", "3б", "3в"] - -var grid = [for (i of numbers) [for (j of letters) i + j]]; -// [ -// ["1а", "1б", "1в"], -// ["2а", "2б", "2в"], -// ["3а", "3б", "3в"] -// ] - -[for (i of numbers) if (i > 1) for (j of letters) if(j > 'а') i + j] -// ["2б", "2в", "3б", "3в"], те саме, що й наведене нижче: - -[for (i of numbers) for (j of letters) if (i > 1) if(j > 'а') i + j] -// ["2б", "2в", "3б", "3в"] - -[for (i of numbers) if (i > 1) [for (j of letters) if(j > 'а') i + j]] -// [["2б", "2в"], ["3б", "3в"]], не те саме, що наведене нижче: - -[for (i of numbers) [for (j of letters) if (i > 1) if(j > 'а') i + j]] -// [[], ["2б", "2в"], ["3б", "3в"]] -</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<p>Початково синтаксис був присутній у чорнетці ECMAScript 2015, але був видалений у ревізії 27 (серпень 2014). Будь ласка, дивіться семантику специфікації у старших ревізіях ES2015.</p> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - - - -<p>{{Compat("javascript.operators.array_comprehensions")}}</p> - -<h2 id="Відмінності_від_заповнень_у_JS1.7JS1.8">Відмінності від заповнень у JS1.7/JS1.8</h2> - -<div class="warning">Заповнення JS1.7/JS1.8 були прибрані з Gecko, починаючи з версії 46 ({{bug(1220564)}}).</div> - -<p><strong>Старий синтаксис заповнень (більше не використовується!):</strong></p> - -<pre class="brush: js example-bad">[X for (Y in Z)] -[X for each (Y in Z)] -[X for (Y of Z)] -</pre> - -<p>Відмінності:</p> - -<ul> - <li>Заповнення ESNext створюють область видимості для кожного блоку "for", а не для всього заповнення. - <ul> - <li>Старе: <code>[()=>x for (x of [0, 1, 2])][1]() // 2</code></li> - <li>Нове: <code>[for (x of [0, 1, 2]) ()=>x][1]() // 1, кожна ітерація створює свіже зв'язування для x. </code></li> - </ul> - </li> - <li>Заповнення ESNext починаються з "for", а не з виразу присвоювання. - <ul> - <li>Старе: <code>[i * 2 for (i of numbers)]</code></li> - <li>Нове: <code>[for (i of numbers) i * 2]</code></li> - </ul> - </li> - <li>Заповнення ESNext можуть мати декілька компонентів <code>if</code> та <code>for</code>.</li> - <li>Заповнення ESNext працюють тільки з переборами <code>{{jsxref("Statements/for...of", "for...of")}}</code>, а не з <code>{{jsxref("Statements/for...in", "for...in")}}</code>.</li> -</ul> - -<p>Дивіться пропозиції щодо змін у коді у <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1220564#c42">Bug 1220564, коментар 42</a>.</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Statements/for...of", "for...of")}}</li> - <li>{{jsxref("Operators/Generator_comprehensions", "Заповнення генераторів", "" ,1)}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/operators/expression_closures/index.html b/files/uk/web/javascript/reference/operators/expression_closures/index.html deleted file mode 100644 index e3a0bff185..0000000000 --- a/files/uk/web/javascript/reference/operators/expression_closures/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Вирази-замикання -slug: Web/JavaScript/Reference/Operators/Expression_closures -tags: - - Function - - JavaScript - - Оператор - - застарілий - - нестандартний -translation_of: Archive/Web/JavaScript/Expression_closures ---- -<div>{{JSSidebar("Operators")}}{{Non-standard_Header}}{{Obsolete_Header("gecko60")}} -<div class="warning"><strong>Нестандартний. Не використовуйте!</strong><br> -Синтаксис виразів-замикань є нерекомендованою особливою функціональністю Firefox, він був прибраний, починаючи з Firefox 60. Для використання у майбутньому розгляньте <a href="/uk/docs/Web/JavaScript/Reference/Functions/Стрілкові_функції">стрілкові функції</a>.</div> -</div> - -<p>Вирази-замикання - це скорочений синтаксис для написання простих функцій.</p> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox">function [<em>name</em>]([<em>param1</em>[, <em>param2[</em>, ..., <em>paramN</em>]]]) - <em>expression</em> -</pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code>name</code></dt> - <dd>Ім'я функції. Можна пропустити, в цьому випадку функція буде <em>анонімною</em>. Ім'я доступне лише всередині тіла функції.</dd> - <dt><code>paramN</code></dt> - <dd>Ім'я аргумента, що передається у функцію. Функція може мати до 255 аргументів.</dd> - <dt><code>expression</code></dt> - <dd>Вираз, який складає тіло функції.</dd> -</dl> - -<h2 id="Опис">Опис</h2> - -<p>Це доповнення є не більше, ніж скороченим синтаксисом для написання простих функцій, надаючи мові щось схоже на типову <a class="external" href="https://uk.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%BD%D1%8F">нотацію лямбда-числення</a>.</p> - -<p>JavaScript 1.7 та старші:</p> - -<pre class="brush: js">function(x) { return x * x; }</pre> - -<p>JavaScript 1.8:</p> - -<pre class="brush: js">function(x) x * x</pre> - -<p>Цей синтаксис дозволяє не писати фігурні дужки та оператор 'return' - вони стають неявними. Такий запис не надає жодної іншої переваги в написанні коду, окрім синтаксично коротшого запису.</p> - -<h2 id="Приклади">Приклади</h2> - -<p>Скорочений запис для зв'язування прослуховувачів подій:</p> - -<pre class="brush: js"> document.addEventListener('click', function() false, true); -</pre> - -<p>Використання цієї нотації з деякими функціями масивів з JavaScript 1.6:</p> - -<pre class="brush: js">elems.some(function(elem) elem.type == 'text'); -</pre> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - - - -<p>{{Compat("javascript.operators.expression_closures")}}</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{JSxRef("Functions", "Функції")}}</li> - <li>{{JSxRef("Function")}}</li> - <li>{{JSxRef("Statements/function", "оператор function")}}</li> - <li>{{JSxRef("Operators/function", "функціональний вираз")}}</li> - <li>{{JSxRef("Statements/function*", "оператор function*")}}</li> - <li>{{JSxRef("Operators/function*", "вираз function*")}}</li> - <li>{{JSxRef("GeneratorFunction")}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/operators/generator_comprehensions/index.html b/files/uk/web/javascript/reference/operators/generator_comprehensions/index.html deleted file mode 100644 index 30d8a0f6d7..0000000000 --- a/files/uk/web/javascript/reference/operators/generator_comprehensions/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Заповнення генераторів -slug: Web/JavaScript/Reference/Operators/Generator_comprehensions -tags: - - JavaScript - - Ітератор - - застарілий - - нестандартний -translation_of: Archive/Web/JavaScript/Generator_comprehensions ---- -<div>{{JSSidebar("Operators")}}{{Non-standard_Header}}{{Obsolete_Header("gecko58")}} -<div class="blockIndicator warning"> -<p><strong>Нестандартний. Не використовуйте!</strong><br> - Синтаксис заповнень генераторів є нестандартним та був прибраний, починаючи з Firefox 58. Для використання в майбутньому розгляньте {{JSxRef("Statements/function*", "генератори", "", 1)}}.</p> -</div> -</div> - -<p>Синтаксис <strong>заповнення генераторів </strong>(generator comprehension) був виразом JavaScript, який дозволяв швидко збирати нову функцію-генератор, базуючись на вже існуючому ітерабельному об'єкті. Однак, він був прибраний зі стандарту та з реалізації Firefox. Не використовуйте його!</p> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox">(for (x of iterable) x) -(for (x of iterable) if (condition) x) -(for (x of iterable) for (y of iterable) x + y) -</pre> - -<h2 id="Опис">Опис</h2> - -<p>У заповненнях генераторів дозволені наступні два види компонентів:</p> - -<ul> - <li>{{JSxRef("Statements/for...of", "for...of")}} та</li> - <li>{{JSxRef("Statements/if...else", "if")}}</li> -</ul> - -<p>Перебір <code>for-of</code> завжди є першим компонентом. Можна використовувати більше одного перебору <code>for-of</code> чи if-конструкцій.</p> - -<p>Значним недоліком {{JSxRef("Operators/Array_comprehensions","заповнень масивів","","true")}} є те, що вони можуть спричинити конструювання у пам'яті цілого нового масиву. Коли самі вхідні дані для заповнення є маленьким масивом, затрати пам'яті є незначними — але коли вхідні дані є великим масивом, або затратним (чи взагалі нескінченним) генератором, створення нового масиву може бути проблематичним.</p> - -<p>Генератори дозволяють ліниві обчислення послідовностей, з обчисленням елементів на вимогу, коли є потреба. Заповнення генераторів синтаксично майже ідентичні заповненням масивів — вони використовують круглі дужки замість квадратних — але замість створення масиву вони створюють генератор, який може виконуватися ліниво. Можете вважати їх скороченим синтаксисом для створення генераторів.</p> - -<p>Припустимо, ми маємо ітератор <code>it</code>, який перебирає великі послідовності цілих чисел. Ми бажаємо створити новий ітератор, який перебиратиме їхні подвоєні значення. Заповнення масиву створило б цілий масив у пам'яті, що містив би подвоєні значення:</p> - -<pre class="brush: js">var doubles = [for (i in it) i * 2]; -</pre> - -<p>Заповнення генератора, з іншого боку, створило б новий ітератор, який створював би подвоєні значення на вимогу, в разі потреби:</p> - -<pre class="brush: js">var it2 = (for (i in it) i * 2); -console.log(it2.next()); // Перше значення з it, подвоєне -console.log(it2.next()); // Друге значення з it, подвоєне -</pre> - -<p>Коли заповнення генератора використовується як аргумент функції, круглі дужки, що використовуються для виклику функції, означають, що зовнішні дужки можна пропустити:</p> - -<pre class="brush: js">var result = doSomething(for (i in it) i * 2); -</pre> - -<p>Значною відмінністю між цими двома прикладами є те, що, використовуючи заповнення генератора, ви перебиратимете структуру 'obj' лише один раз, всього, на відміну від одного обходу при заповненні масиву та ще одного під час його перебору.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Прості_заповнення_генераторів">Прості заповнення генераторів</h3> - -<pre class="brush:js">(for (i of [1, 2, 3]) i * i ); -// функція-генератор, що видає 1, 4 та 9 - -[...(for (i of [1, 2, 3]) i * i )]; -// [1, 4, 9] - -var abc = ['А', 'Б', 'В']; -(for (letters of abc) letters.toLowerCase()); -// функція-генератор, що видає "а", "б" та "в" -</pre> - -<h3 id="Заповнення_генераторів_з_оператором_if">Заповнення генераторів з оператором if</h3> - -<pre class="brush: js">var years = [1954, 1974, 1990, 2006, 2010, 2014]; - -(for (year of years) if (year > 2000) year); -// функція-генератор, що видає 2006, 2010 та 2014 - -(for (year of years) if (year > 2000) if (year < 2010) year); -// функція-генератор, що видає 2006, те саме нижче: - -(for (year of years) if (year > 2000 && year < 2010) year); -// функція-генератор, що видає 2006 -</pre> - -<h3 id="Заповнення_генераторів_у_порівнянні_з_функцією-генератором">Заповнення генераторів у порівнянні з функцією-генератором</h3> - -<p>Легко зрозуміти синтаксис заповнення генераторів, порівнявши його з функцією-генератором.</p> - -<p>Приклад 1: Простий генератор.</p> - -<pre class="brush: js">var numbers = [1, 2, 3]; - -// Функція-генератор -(function*() { - for (let i of numbers) { - yield i * i; - } -})(); - -// Заповнення генератора -(for (i of numbers) i * i ); - -// Результат: Обидва повертають генератор, який видає [1, 4, 9] -</pre> - -<p>Приклад 2: Використання <code>if</code> у генераторі.</p> - -<pre class="brush: js">var numbers = [1, 2, 3]; - -// Функція-генератор -(function*() { - for (let i of numbers) { - if (i < 3) { - yield i * 1; - } - } -})(); - -// Заповнення генератора -(for (i of numbers) if (i < 3) i); - -// Результат: обидва вертають генератор, який видає [1, 2]</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<p>Заповнення генераторів було початково присутнє у чорнетці ECMAScript 2015, але було прибране у ревізії 27 (серпень 2014). Будь-ласка, дивіться семантику специфікації у старших ревізіях ES2015.</p> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - - - -<p>{{Compat("javascript.operators.generator_comprehensions")}}</p> - -<h2 id="Відмінності_від_заповнень_у_JS1.7JS1.8">Відмінності від заповнень у JS1.7/JS1.8</h2> - -<div class="blockIndicator warning">Заповнення JS1.7/JS1.8 були прибрані з Gecko 46 ({{bug(1220564)}}).</div> - -<p><strong>Старий синтаксис заповнень (більше не використовується!):</strong></p> - -<pre class="brush: js example-bad">(X for (Y in Z)) -(X for each (Y in Z)) -(X for (Y of Z)) -</pre> - -<p>Відмінності:</p> - -<ul> - <li>Заповнення ES7 створюють область видимості для кожного блоку "for", а не для всього заповнення. - <ul> - <li>Старе: <code>[...(()=>x for (x of [0, 1, 2]))][1]() // 2</code></li> - <li>Нове: <code>[...(for (x of [0, 1, 2]) ()=>x)][1]() // 1, кожна ітерація створює свіже зв'язування для x. </code></li> - </ul> - </li> - <li>Заповнення ES7 починаються з "for", а не з виразу присвоювання. - <ul> - <li>Старе: <code>(i * 2 for (i of numbers))</code></li> - <li>Нове: <code>(for (i of numbers) i * 2)</code></li> - </ul> - </li> - <li>Заповнення ES7 можуть мати декілька компонентів <code>if</code> та <code>for</code>.</li> - <li>Заповнення ES7 працюють тільки з переборами <code>{{JSxRef("Statements/for...of", "for...of")}}</code>, а не з <code>{{JSxRef("Statements/for...in", "for...in")}}</code>.</li> -</ul> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{JSxRef("Statements/for...of", "for...of")}}</li> - <li>{{JSxRef("Operators/Array_comprehensions", "Заповнення масивів")}}</li> -</ul> |