pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/javascript-tutorial/uk.javascript.info/pull/684.patch

ndefined`. + - оператор `??` повертає нам значення змінної `height`, тобто `0`. -На практиці нульова висота часто є дійсним значенням, яке не слід замінювати на типове значення. Отже, `??` робить саме те, що треба. +На практиці нульова висота часто є дійсним значенням, яке не слід замінювати на типове значення. Отже, навідміну від `||`, `??` в цій ситуації робить саме те, що нам треба. ## Пріоритет Пріоритет оператора `??` такий самий, як у `||`. Він дорівнює `3` у [таблиці MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). -Це означає, що, як і `||`, оператор об’єднання з null `??` оцінюється до `=` та `?`, але після більшості інших операцій, таких як `+`, `*`. +Це означає, що, як і `||`, оператор об’єднання з null `??` виконується раніше за `=` та `?`, але після більшості інших операцій, таких як `+`, `*`. -``` js +```js let height = null; let width = null; @@ -114,14 +117,14 @@ let area = (height ?? 100) * (width ?? 50); alert(area); // 5000 ``` -В іншому випадку, якщо ми опускаємо дужки, то, оскільки `*` має вищий пріоритет, ніж `??`, то він буде виконуватися першим, що призводить до неправильних результатів. +В іншому випадку, якщо ми опускаємо дужки, то, оскільки `*` має вищий пріоритет, ніж `??`, то `*` буде виконуватися першим, що призводить до неправильних результатів. ```js // без дужок let area = height ?? 100 * width ?? 50; // ...працює так само, як попередній вираз (мабуть, це не те, що ми хочемо): -let area = height ?? (100 * width) ?? 50; +let area = height ?? 100 * width ?? 50; ``` ### Використання ?? разом з && або || @@ -131,7 +134,7 @@ let area = height ?? (100 * width) ?? 50; Код нижче викликає синтаксичну помилку: ```js run -let x = 1 && 2 ?? 3; // Синтаксична помилка +let x = 1 && 2 ?? 3; // Виконання коду зупиниться і в консолі з'явиться повідомлення про синтаксичну помилку ``` Обмеження є досить спірним, воно було додано до специфікації мови з метою уникнення помилок програмування, коли люди почнуть переходити з `||` до `??`. @@ -150,12 +153,12 @@ alert(x); // 2 - Оператор об’єднання з null `??` надає короткий спосіб вибору першого "визначеного" значення зі списку. - Він використовується для присвоєння типових значень до змінних: + Він використовується для присвоєння типових значень до змінних: - ```js - // встановлює height=100, якщо height null чи undefined - height = height ?? 100; - ``` + ```js + // встановлює height=100, якщо height null чи undefined + height = height ?? 100; + ``` -- Оператор `??` має дуже низький пріоритет -- трохи вищий, ніж `?` та `=`, тому розглядайте додавання дужок при використанні його у виразах. +- Оператор `??` має дуже низький пріоритет -- трохи вищий, ніж `?` та `=`, тому додавайте дужки при використанні його у виразах. - Цей оператор заборонено використовувати з `||` або `&&` без явних дужок. From 0f3b34486cf61acd5fe55ccdda4ac03d7339f22c Mon Sep 17 00:00:00 2001 From: Andrii Hrushetskyi Date: Sat, 15 Feb 2025 18:05:09 +0100 Subject: [PATCH 2/2] Fixed typos and updated missunderstanding translate --- 1-js/02-first-steps/13-while-for/article.md | 105 ++++++++++---------- 1 file changed, 52 insertions(+), 53 deletions(-) diff --git a/1-js/02-first-steps/13-while-for/article.md b/1-js/02-first-steps/13-while-for/article.md index 407a47e43..48cff9fbd 100644 --- a/1-js/02-first-steps/13-while-for/article.md +++ b/1-js/02-first-steps/13-while-for/article.md @@ -12,18 +12,17 @@ ```js while (умова) { - // код - // так зване "тіло циклу" + // код, так зване "тіло циклу" } ``` -Доки умова є `вірною`, виконується `код` із тіла циклу. +Код з тіла циклу виконується допоки значення умови істинне (рівне `true`). -Наприклад, цикл нижче виводить `i` поки `i < 3`: +Наприклад, цикл нижче виводить `i` допоки `i < 3`: ```js run let i = 0; -while (i < 3) { // показується 0, далі 1, потім 2 +while (i < 3) { // показується 0, далі 1, потім 2. А потім `i` стає 3, і умова перестає бути істинною alert( i ); i++; } @@ -31,23 +30,23 @@ while (i < 3) { // показується 0, далі 1, потім 2 Одне виконання циклу називається *ітерацією*. Цикл в зразку вище робить три ітерації. -Якщо `i++` пропустити в коді вище, то цикл виконувався б (в теорії) вічно. На практиці, браузери надають способи зупинити такі цикли, і на серверному JavaScript(Node.js), ми можемо знищити цей процес +Якщо `i++` пропустити в коді вище, то умова б ніколи не стала б хибною, і в теорії цикл виконувався б вічно. Хоча на практиці, браузери надають способи зупинити такі цикли, і на серверному JavaScript(Node.js), ми можемо знищити цей процес. -Будь-який вираз або змінна може бути умовою циклу, а не тільки порівняння (`a < 5` чи `b !== 10`). Умова виконується і конвертується у логічне значення. +Умовою циклу може бути будь-який вираз або змінна, а не тільки порівняння (`a < 5` чи `b !== 10`). Перед первіркою браузер виконує умову і конвертує її у логічне значення. -Наприклад, коротший спосіб написання `while (i != 0)` відповідає `while (i)`: +Наприклад, коротший спосіб написання `while (i != 0)` буде `while (i)`: ```js run let i = 3; *!* -while (i) { // коли i буде 0, умова стане невірною, і цикл зупиниться +while (i) { // коли i стане 0, умова стане хибною, і цикл зупиниться */!* alert( i ); i--; } ``` -````smart header="Фігурні дужки не потрібні для однорядкової операції" +````smart header="Фігурні дужки не обов'язкові для однорядкової операції" Якщо тіло циклу має тільки одну операцію, ми можемо опустити фігурні дужки `{…}`: ```js run @@ -60,7 +59,7 @@ while (i) alert(i--); ## Цикл "do..while" -Перевірка умови може бути переміщена *нижче* тіла циклу використовуючи `do..while` синтаксис: +Перевірку умови можна перемістити *після* тіла циклу використовуючи синтаксис `do..while`: ```js do { @@ -68,7 +67,7 @@ do { } while (умова); ``` -Цикл спочатку виконує тіло, а потім перевіряє умову, і поки умова є `true`, цикл виконується знову і знову. +Тут цикл спочатку виконує тіло, а потім перевіряє умову, і поки умова є `true`, цикл виконується знову і знову. Наприклад: @@ -80,65 +79,65 @@ do { } while (i < 3); ``` -Цю форму синтаксису слід використовувати лише тоді, коли ви хочете, щоб тіло циклу виконалось **хоча б один раз**, незалежно від умови. Зазвичай, інша форма є більш бажаною `while(…) {…}` +Цю форму синтаксису слід використовувати лише тоді, коли ви хочете, щоб тіло циклу виконалось **хоча б один раз**, незалежно від умови. Але зазвичай синтаксис `while(…) {…}` є більш бажаним. ## Цикл "for" -Цикл `for` є складнішим, але також є часто використовуваним циклом. +Цикл `for` є складнішим, але його теж дуже часто використовують. Виглядає він так: ```js -for (початок; умова; крок) { +for (вступна інструкція; умова; додаткова інструкція) { // ... тіло циклу ... } ``` -Дізнаймось про значення цих трьох частин за зразком. Цикл нижче виконує `alert(i)` для `i` від `0` до `3` (але не включаючи це число `3`) +Дізнаймось про значення цих трьох частин за зразком. Цикл нижче виконує `alert(i)` допоки значення `i` менше за `3`. ```js run -for (let i = 0; i < 3; i++) { // показується 0, далі 1, потім 2 - alert(i); +for (let i = 0; i < 3; i++) { + alert(i); // показується 0, далі 1, потім 2. } ``` Розгляньмо цикл `for` по частинах: -| Назва частини | | | -|-------|----------|----------------------------------------------------------------------------| -| початок | `let i = 0` | Виконується один раз, при вході в цикл. | -| умова | `i < 3`| Перевіряється перед кожною ітерацією циклу. Якщо умова невірна, цикл зупиняєтья. | -| тіло | `alert(i)`| Виконується знову і знову, поки умова є правдивою (`true`). | -| крок| `i++` | Виконується після тіла на кожній ітерації, але перед перевіркою умови. | +| Назва частини | | | +| -------------------- | ----------- | -------------------------------------------------------------------------------------------- | +| вступна інструкція | `let i = 0` | Виконується один раз, при вході в цикл. | +| умова | `i < 3` | Перевіряється перед кожною ітерацією циклу. Якщо умова хибне (рівна false), цикл зупиняєтья. | +| тіло | `alert(i)` | Виконується знову і знову, допоки умова є істинною (`true`). | +| додаткова інструкція | `i++` | Виконується після тіла на кожній ітерації, але перед перевіркою умови. | Загальний алгоритм циклу працює так: ``` -*Початок* виконання -→ (Якщо *умова* == true → виконати тіло і виконати крок) -→ (Якщо *умова* == true → виконати тіло і виконати крок) -→ (Якщо *умова* == true → виконати тіло і виконати крок) +Виконати *вступну інструкцію* +→ (Якщо *умова* == true → виконати тіло і виконати додаткову інструкцію) +→ (Якщо *умова* == true → виконати тіло і виконати додаткову інструкцію) +→ (Якщо *умова* == true → виконати тіло і виконати додаткову інструкцію) → ... ``` -Спочатку один раз виконується `початок`, потім при кожній ітерації: перевіряється `умова`, виконується `тіло` циклу та `крок`. +Спочатку один раз виконується `вступна інструкція`, потім при кожній ітерації: перевіряється `умова`, і допоки умова істинна (рівна true), то виконується `тіло` циклу та після нього `додаткова інструкція`. Якщо ви новачок у циклах, вам може допомогти покрокове виконання цього прикладу на аркуші паперу. -Ось що відбувається в нашому випадку: +Ось що ми наказуємо зробити комп'ютеру в нашому випадку: ```js // for (let i = 0; i < 3; i++) alert(i) -// Початок виконання -let i = 0 -// Якщо умова == true → виконати тіло і виконати крок +// Виконати вступну інструкцію +let i = 0; +// Якщо умова == true → виконати тіло і виконати додаткову інстуркцію if (i < 3) { alert(i); i++ } -// Якщо умова == true → виконати тіло і виконати крок +// Якщо умова == true → виконати тіло і виконати додаткову інстуркцію if (i < 3) { alert(i); i++ } -// Якщо умова == true → виконати тіло і виконати крок +// Якщо умова == true → виконати тіло і виконати додаткову інстуркцію if (i < 3) { alert(i); i++ } -// ...кінець, тому що зараз i == 3 +// ...зупинитись. Бо зараз i == 3, отже умова перестала бути істинною ``` ````smart header="Вбудоване оголошення змінної" @@ -168,24 +167,24 @@ alert(i); // 3, змінна доступна, тому що вона оголо Будь-яку частину `for` можна пропустити. -Наприклад, ми можемо опустити `початок`, якщо нам не потрібно нічого робити перед стартом циклу. +Наприклад, ми можемо опустити `вступну інструкцію`, якщо нам не потрібно нічого робити перед стартом циклу. Ось так: ```js run let i = 0; // ми вже маємо оголошену змінну і присвоєне значення -for (; i < 3; i++) { // немає необхідності в "початку" +for (; i < 3; i++) { // немає необхідності в "вступній інструкції" alert( i ); // 0, 1, 2 } ``` -Ми також можемо видалити частину `крок`: +Ми також можемо не вказувати `додаткову інструкцію`: ```js run let i = 0; -for (; i < 3;) { +for (; i < 3; ) { alert( i++ ); } ``` @@ -200,7 +199,7 @@ for (;;) { } ``` -Зауважте, що ці двокрапки `;` повинні бути, інакше виникне синтаксична помилка. +Але зверніть увагу, що пропускати крапки з комою `;` не можна, інакше виникне синтаксична помилка. ## Переривання циклу: "break" @@ -208,7 +207,7 @@ for (;;) { Але ми можемо в будь-який момент вийти з циклу, використавши спеціальну директиву `break`. -Наприклад, наступний код запитує в користувача число доти, поки користувач їх вводить. Після того, як користувач не ввів число — цикл завершується (директивою "break") і виводить суму чисел: +Наприклад, при виконанні нижчевказаного коду комп'ютер буде запитувати в користувача числа доти, поки користувач їх вводить. Після того, як користувач не ввів число — цикл завершиться (завдяки директиві "break") і комп'ютер виведе суму чисел: ```js run let sum = 0; @@ -227,13 +226,13 @@ while (true) { alert( 'Сума: ' + sum ); ``` -Директива `break` в рядку `(*)` спрацьовує тоді, коли користувач вводить порожній рядок або скасовує введення. Ця директива негайно завершує виконання циклу і передає контроль наступному рядку за циклом, тобто на `alert`. +Директива `break` в рядку `(*)` спрацьовує тоді, коли користувач вводить порожній рядок або скасовує введення. Ця директива негайно завершує виконання циклу і перенаправляє виконання коду на наступний рядок після циклу (в нашому випадку на `alert`). Комбінація «нескінченний цикл + `break`» — чудова річ для тих ситуацій, коли умова для переривання знаходиться не на початку або кінці циклу, а всередині (або навіть в декількох місцях) тіла циклу. ## Продовження з наступної ітерації [#continue] -Директива `continue` — це "полегшена версія" `break`. Вона не зупиняє весь цикл. Натомість вона зупиняє поточну ітерацію і починає виконання циклу спочатку з наступної ітерації (якщо умова циклу досі вірна). +Директива `continue` — це "пом'якшена версія" `break`. Вона не зупиняє увесь цикл. Вона зупиняє лише поточну ітерацію і починає виконання циклу знову з наступної ітерації (якщо умова циклу досі вірна). Її зручно використовувати коли закінчили з поточною ітерацією і хочемо продовжити з наступної. @@ -242,14 +241,14 @@ alert( 'Сума: ' + sum ); ```js run no-beautify for (let i = 0; i < 10; i++) { - // якщо умова справджується, тоді пропускаємо решту тіла циклу і починаємо з наступної ітерації + // якщо умова справджується, тоді не виконуємо решту тіла циклу, а переходимо до наступної ітерації *!*if (i % 2 == 0) continue;*/!* alert(i); // 1, потім 3, 5, 7, 9 } ``` -Для парних значень змінної `i`, директива `continue` зупиняє виконання тіла циклу і передає контроль наступній ітерації в `for` (в цьому випадку це буде наступне число). Таким чином функція `alert` викликається лише для непарних значень змінної `i`. +Для парних значень змінної `i`, директива `continue` зупиняє виконання тіла циклу і передає контроль наступній ітерації в `for` (в цьому випадку це буде наступне число). Таким чином функція `alert` викликається лише коли значення `i` непарне. ````smart header="Директива `continue` допомагає зменшити рівень вкладеності" Цикл, який показує непарні значення може виглядати так: @@ -269,8 +268,8 @@ for (let i = 0; i < 10; i++) { Але побічним ефектом цього буде створення ще одного рівня вкладеності (виклик `alert` всередині фігурних дужок). Якщо код всередині `if` буде більшим за декілька рядків, то це може ускладнити загальну читабельність коду. ```` -````warn header="Директиви `break/continue` праворуч від '?' не працюють" -Майте на увазі, що такі синтаксичні конструкції, які не є виразами, не можуть використовуватися з тернарним оператором `?`. Власне, такі директиви як `break/continue` там не дозволені. +````warn header="Директиви `break`/`continue` праворуч від '?' не працюють" +Майте на увазі, що такі синтаксичні конструкції, які не є виразами, не можуть використовуватися з тернарним оператором `?`. Власне, такі директиви як `break`/`continue` там не дозволені. Наприклад, якщо взяти код: @@ -290,7 +289,7 @@ if (i > 5) { ...то такий код перестане працювати: виникне синтаксична помилка. -Це ще одна причина не використовувати для умов оператор знака питання `?`, замість повноцінного `if`. +Це ще одна причина не використовувати для умов оператор знака питання `?` замість повноцінного `if`. ```` ## Мітки для break/continue @@ -343,18 +342,18 @@ labelName: for (...) { alert('Готово!'); ``` -В коді вище, вираз `break outer` шукає зверху мітку `outer` і перериває цикл, позначений цією міткою. +В коді вище, вираз `break outer` змушує комп'ютер шукати зверху мітку `outer` і переривати цикл, позначений цією міткою. Тож виконання коду перейде з місця переривання циклу (позначене `(*)`) до функції `alert('Готово!')`. -Мітку можна перемістити в новий рядок: +Мітку можна перемістити на один рядок вище: ```js no-beautify outer: for (let i = 0; i < 3; i++) { ... } ``` -Також мітками можна використовувати з директивою `continue`. В такому разі, виконання коду перестрибне на наступну ітерацію поміченого циклу. +Також мітки можна використовувати з директивою `continue`. В такому разі, виконання коду перестрибне на наступну ітерацію поміченого циклу. ````warn header="Міткам не дозволено \"стрибати\" будь-де" Ми не можемо використовувати мітки, щоб стрибати в довільне місце в коді. @@ -377,7 +376,7 @@ label: { } ``` -...Однак, 99.9% часу `break` використовується всередині циклів, як ми бачили в прикладах вище. +...Однак, 99.9% часу `break` використовується всередині циклів, як ми бачили в прикладах вище. Виклик `continue` можливий лише всередині циклу. ```` pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy