diff --git a/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md b/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md
index b498fd001..9d442cc27 100644
--- a/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md
+++ b/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md
@@ -6,8 +6,8 @@ alert( alert(1) || 2 || alert(3) );
Виклик `alert` не повертає значення. Або, іншими словами, повертає `undefined`.
-1. Перший АБО `||` обчислює його лівий операнд `alert(1)`. Це показує перше повідомлення з `1`.
+1. Перший АБО `||` обчислює свій лівий операнд `alert(1)`. Це показує перше повідомлення з `1`.
2. `alert` повертає `undefined`, тому АБО переходить до другого операнда, шукаючи правдиве значення.
-3. Другий операнд `2` є правдивим, тому виконання зупинено, повернуто `2` і потім показано зовнішнім alert.
+3. Другий операнд `2` є правдивим, тому виконання зупинено, повернуто `2` і потім показано зовнішнім `alert`.
-Не буде `3`, тому що обчислення на досягає `alert(3)`.
+`3` не буде виведене, тому що обчислення не досягає `alert(3)`.
diff --git a/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md b/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md
index 5585844ae..03f91d329 100644
--- a/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md
+++ b/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md
@@ -1,4 +1,4 @@
-Відповідь: `null`, тому що це перше не правдиве значення зі списку.
+Відповідь: `null`, тому що це перше хибне значення зі списку.
```js run
alert( 1 && null && 2 );
diff --git a/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md b/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md
index 4e42b67c2..74049ab02 100644
--- a/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md
+++ b/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md
@@ -6,5 +6,5 @@ alert( alert(1) && alert(2) );
Виклик `alert` повертає `undefined` (він просто показує повідомлення, тому не повертається значення, яке б мало сенс).
-Через це `&&` обчислює лівий операнд (виводить `1`) і негайно зупиняється, оскільки `undefined` є не правдивим значенням. І `&&` шукає не правдиве значення і повертає його, як це і зроблено.
+Через це `&&` обчислює лівий операнд (виводить `1`) і негайно зупиняється, оскільки `undefined` є хибним значенням. А `&&` шукає хибне значення і повертає його, як це і зроблено.
diff --git a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md
index 7fdfa2c5a..06d54653d 100644
--- a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md
+++ b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md
@@ -2,7 +2,7 @@ importance: 3
---
-# Який результат alerts, об'єднаних І?
+# Який результат alerts, об'єднаних за допомогою І?
Що виведе код нижче?
diff --git a/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md b/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md
index c1784ae9f..cbd3ea7a4 100644
--- a/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md
+++ b/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md
@@ -4,6 +4,6 @@ importance: 3
# Перевірте діапазон
-Напишіть умову "if", щоб перевірити, що `age` знаходиться між `14` та `90` включно.
+Напишіть умову `if`, щоб перевірити, що `age` знаходиться між `14` та `90` включно.
"Включно" означає, що `age` може досягати країв `14` або `90`.
diff --git a/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md b/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md
index 1084a0151..3d6aa3297 100644
--- a/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md
+++ b/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md
@@ -2,8 +2,8 @@ importance: 3
---
-# Перевірте зовнішній діапазон
+# Перевірте значення поза діапазоном
-Напишіть умову `if`: щоб перевірити, що вік `age` НЕ знаходиться між 14 та 90 включно.
+Напишіть умову `if`, щоб перевірити, що значення `age` НЕ знаходиться між `14` та `90` включно.
-Створіть два варіанти: перший використовує НЕ `!`, другий -- без нього.
+Створіть два варіанти: перший з оператором НЕ `!`, другий -- без нього.
diff --git a/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md b/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md
index 9fdfa7fe5..7d4b3e03b 100644
--- a/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md
+++ b/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md
@@ -8,11 +8,11 @@
if (-1 || 0) alert( 'перший' );
// Не виконається
-// -1 && 0 = 0, не правдивий
+// -1 && 0 = 0, хибний
if (-1 && 0) alert( 'другий' );
// Виконається
-// Оператор && має більший приорітет, ніж ||
+// Оператор && має більший пріоритет, ніж ||
// тому -1 && 1 виконається першим, даючи нам послідовність:
// null || -1 && 1 -> null || 1 -> 1
if (null || -1 && 1) alert( 'третій' );
diff --git a/1-js/02-first-steps/11-logical-operators/8-if-question/task.md b/1-js/02-first-steps/11-logical-operators/8-if-question/task.md
index 12a14e6ea..0a1ebe221 100644
--- a/1-js/02-first-steps/11-logical-operators/8-if-question/task.md
+++ b/1-js/02-first-steps/11-logical-operators/8-if-question/task.md
@@ -4,9 +4,9 @@ importance: 5
# Питання про "if"
-Який з цих `alert` буде виконано?
+Які з цих `alert` буде виконано?
-Які рузельтати виразів будуть у `if(...)`?
+Якими будуть результати виразів у `if(...)`?
```js
if (-1 || 0) alert( 'перший' );
diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg b/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg
index ca3e0aead..1b0322c35 100644
--- a/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg
+++ b/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md b/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md
index b69b572cc..0a88094cd 100644
--- a/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md
+++ b/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md
@@ -1,24 +1,24 @@
```js run demo
-let userName = prompt("Хто там?", '');
+let userName = prompt('Хто там?', '');
-if (userName == 'Admin') {
+if (userName === 'Admin') {
let pass = prompt('Пароль?', '');
- if (pass == 'TheMaster') {
+ if (pass === 'Господар') {
alert( 'Ласкаво просимо!' );
- } else if (pass == '' || pass == null) {
+ } else if (pass === '' || pass === null) {
alert( 'Скасовано' );
} else {
alert( 'Неправильний пароль' );
}
-} else if (userName == '' || userName == null) {
+} else if (userName === '' || userName === null) {
alert( 'Скасовано' );
} else {
- alert( "Я вас не знаю" );
+ alert( 'Я вас не знаю' );
}
```
diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/task.md b/1-js/02-first-steps/11-logical-operators/9-check-login/task.md
index d225513b2..a730e56de 100644
--- a/1-js/02-first-steps/11-logical-operators/9-check-login/task.md
+++ b/1-js/02-first-steps/11-logical-operators/9-check-login/task.md
@@ -6,19 +6,19 @@ importance: 3
Напишіть код, який запитує логін за допомогою `prompt`.
-Якщо відвідувач вводить `"Admin"`, тоді запропонуйте за допомогою `prompt` ввести пароль, i якщо вхідні данні є порожнім рядком або `key:Esc` -- показати "Скасовано", якщо це інакший рядок -- тоді покажіть "Я вас не знаю".
+Якщо відвідувач вводить `"Admin"`, тоді запропонуйте за допомогою `prompt` ввести пароль. Якщо введено порожній рядок або натиснуто `key:Esc` -- показати "Скасовано". Якщо введено інший рядок -- тоді покажіть "Я вас не знаю".
Пароль перевіряється наступним чином:
-- Якщо він дорівнює "TheMaster", тоді покажіть "Ласкаво просимо!",
+- Якщо він дорівнює "Господар", тоді покажіть "Ласкаво просимо!",
- Інший рядок -- покажіть "Неправильний пароль",
-- Для порожнього рядка, або якщо введення було скасовано, покажіть "Скасовано"
+- Для порожнього рядка, або якщо введення було скасовано, покажіть "Скасовано".
Схема:

-Будь ласка, використовуйте вкладені `if` блоки. Майте на увазі загальну читабельність коду.
+Будь ласка, використовуйте вкладені `if` блоки. Потурбуйтесь про загальну читабельність коду.
Підказка: передача порожнього вводу до запиту повертає порожній рядок `''`. Натискання `key:ESC` протягом запиту повертає `null`.
diff --git a/1-js/02-first-steps/11-logical-operators/article.md b/1-js/02-first-steps/11-logical-operators/article.md
index 5b2e6fe57..91cfbf573 100644
--- a/1-js/02-first-steps/11-logical-operators/article.md
+++ b/1-js/02-first-steps/11-logical-operators/article.md
@@ -14,9 +14,9 @@
result = a || b;
```
-У класичному програмуванні логічний АБО призначений для маніпулювання лише булевими значеннями. Якщо будь-який з його аргументів `true`, він повертає `true`, інакше повертає `false`.
+У класичному програмуванні логічний оператор АБО призначений для маніпулювання лише булевими значеннями. Якщо будь-який з його аргументів означає `true`, повертається `true`, інакше повертається `false`.
-У JavaScript оператор більш складніший і потужніший. Але спочатку подивимося, що відбувається з булевими значеннями.
+У JavaScript цей оператор складніший і потужніший. Але спочатку подивимося, що відбувається з булевими значеннями.
Є чотири можливі логічні комбінації:
@@ -27,7 +27,7 @@ alert( true || false ); // true
alert( false || false ); // false
```
-Як бачимо, результат завжди `true`, за винятком випадку, коли обидва операнда `false`.
+Як бачимо, результат завжди `true`, за винятком випадку, коли обидва операнди `false`.
Якщо операнд не є булевим, він перетворюється на булевий для обчислення.
@@ -39,7 +39,7 @@ if (1 || 0) { // працює так само, як ( true || false )
}
```
-У бильшості випадків АБО `||` використовується в операторі `if`, щоб перевірити, чи є *будь-яка* з заданих умов `true`.
+У більшості випадків АБО `||` використовується в інструкціях `if`, щоб перевірити, чи є *будь-яка* із заданих умов `true`.
Наприклад:
@@ -70,7 +70,7 @@ if (hour < 10 || hour > 18 || isWeekend) {
Розширений алгоритм працює наступним чином.
-Дано кілька значень, розділених опертором АБО:
+Дано кілька значень, розділених оператором АБО:
```js
result = value1 || value2 || value3;
@@ -84,7 +84,7 @@ result = value1 || value2 || value3;
Значення повертається у первісному вигляді без конвертації.
-Іншими словами, ланцюжок з АБО `"||"` повертає перше правдиве значення або останнє, якщо не знайдено правдивого значення.
+Іншими словами, ланцюжок з АБО `||` повертає перше правдиве значення або останнє, якщо правдивого значення не знайдено.
Наприклад:
@@ -94,16 +94,16 @@ alert( 1 || 0 ); // 1 (1 є правдивим)
alert( null || 1 ); // 1 (1 є першим правдивим значенням)
alert( null || 0 || 1 ); // 1 (перше правдиве значення)
-alert( undefined || null || 0 ); // 0 (усі не правдиві, повертає останнє значення)
+alert( undefined || null || 0 ); // 0 (усі хибні, повертається останнє значення)
```
Це призводить до цікавого використання, у порівнянні з "чистим, класичним, виключно-булевим АБО".
-1. **Отримання першого правдивого значення зі списку змінних або виразів.**
+1. **Отримання першого істинного значення зі списку змінних або виразів.**
- Наприклад, маємо змінні `firstName`, `lastName` та `nickName`, усі необов'язкові.
+ Наприклад, маємо змінні `firstName`, `lastName` та `nickName`, усі необов'язкові (тобто вони можуть бути невизначеними або мати хибні значення).
- Використаємо АБО `||`, щоб вибрати ту змінну, яка має дані і виведемо її (або `анонімний` якщо немає даних):
+ Використаємо АБО `||`, щоб вибрати ту змінну, яка має дані, і виведемо її (або рядок `"Анонім"`, якщо жодна змінна не має даних):
```js run
let firstName = "";
@@ -111,7 +111,7 @@ alert( undefined || null || 0 ); // 0 (усі не правдиві, повер
let nickName = "СуперКодер";
*!*
- alert( firstName || lastName || nickName || "Анонімний"); // СуперКодер
+ alert( firstName || lastName || nickName || "Анонім"); // СуперКодер
*/!*
```
@@ -120,21 +120,21 @@ alert( undefined || null || 0 ); // 0 (усі не правдиві, повер
2. **Обчислення короткого замикання.**
Іншою особливістю оператора АБО `||` є так зване "обчислення короткого замикання".
-
+
Це означає, що оператор `||` опрацьовує аргументи доти, доки не досягається перше правдиве значення, після чого це значення негайно повертається, без подальшого опрацювання решти аргументів.
-
- Важливість цієї особливості стає очевидною, коли операнд не проста змінна, а вираз з побічною дією, такі як присвоєння змінної, або виклик функції.
- У наведеному нижче прикладі, виведеться лише друге повідомлення:
+ Важливість такої особливості стає очевидною, якщо операнд є не просто змінною, а виразом із побічним ефектом, як-от присвоєння змінної або виклик функції.
+
+ У наведеному нижче прикладі виведеться лише друге повідомлення:
```js run no-beautify
*!*true*/!* || alert("не виведеться");
*!*false*/!* || alert("виведеться");
```
- В першому рядку, оператор АБО `||` зупиняє виконання відразу після того, як "побачить" що лівий вираз `true`, тож `alert` не виконається.
+ В першому рядку оператор АБО `||` зупиняє виконання відразу після того, як "побачить" що лівий вираз є `true`, тож `alert` не виконається.
- Деколи люди використовують таку конструкцію щоб виконати команди, якщо умова в лівій частині невірна.
+ Деколи таку конструкцію використовують, щоб виконувати команди лише при хибності умови ліворуч від оператора.
## && (І)
@@ -144,7 +144,7 @@ alert( undefined || null || 0 ); // 0 (усі не правдиві, повер
result = a && b;
```
-У класичному програмуванні І повертає `true`, якщо обидва оператора є правдивими і `false` у іншому випадку:
+У класичному програмуванні І повертає `true`, якщо обидва оператори є правдивими, і `false` в іншому випадку:
```js run
alert( true && true ); // true
@@ -167,15 +167,15 @@ if (hour == 12 && minute == 30) {
Так само, як з АБО, будь-яке значення дозволено як операнд І:
```js run
-if (1 && 0) { // оцінюється як true && false
- alert( "не буде працювати, тому що результат не правдивий" );
+if (1 && 0) { // обчислюється як true && false
+ alert( "не буде працювати, тому що результат хибний" );
}
```
-## І "&&" шукає перше не правдиве значення
+## І "&&" шукає перше хибне значення
-Дано декілька значень, об'єднаних І:
+Дано декілька значень, об'єднаних кількома І:
```js
result = value1 && value2 && value3;
@@ -187,9 +187,9 @@ result = value1 && value2 && value3;
- Перетворює кожен операнд на булевий. Якщо результат `false`, зупиняється і повертає оригінальне значення того операнда.
- Якщо всі операнди були обчисленні (тобто усі були правдиві), повертає останній операнд.
-Іншими словами, І повертає перше не правдиве значення, або останнє значення, якщо жодного не правдивого не було знайдено.
+Іншими словами, І повертає перше хибне значення, або останнє значення, якщо жодного хибного не було знайдено.
-Правила, наведені вище, подібні до АБО. Різниця полягає в тому, що І повертає перше *не правдиве* значення, тоді як АБО повертає перше *правдиве*.
+Правила, наведені вище, подібні до правил АБО. Різниця полягає в тому, що І повертає перше *хибне* значення, тоді як АБО повертає перше *правдиве*.
Приклади:
@@ -199,13 +199,13 @@ result = value1 && value2 && value3;
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
-// якщо перший операнд не правдивий,
+// якщо перший операнд хибний,
// І повертає саме його. Другий операнд ігнорується
alert( null && 5 ); // null
-alert( 0 && "не важливо" ); // 0
+alert( 0 && "неважливо" ); // 0
```
-Ми також можемо передавати декілька значень поспіль. Подивіться, як повертається перший не правдивий:
+Ми також можемо передавати декілька значень поспіль. Подивіться, як повертається перше хибне:
```js run
alert( 1 && 2 && null && 3 ); // null
@@ -217,14 +217,14 @@ alert( 1 && 2 && null && 3 ); // null
alert( 1 && 2 && 3 ); // 3, останнє
```
-````smart header="Пріоритет І `&&` є більш високим за АБО `||`"
-Пріоритет оператора І `&&` є більш високим за АБО `||`.
+````smart header="Пріоритет І `&&` вище за АБО `||`"
+Оператор І `&&` має вищий пріоритет за АБО `||`.
-Отже, код `a && b || c && d` по суті є таким самим, як би вираз `&&` був у дужках: `(a && b) || (c && d)`.
+Отже, код `a && b || c && d` по суті є таким самим, як код з виразами `&&` у дужках: `(a && b) || (c && d)`.
````
-````warn header="Не міняйте `if` на || чи &&"
-Деколи люди використовують оператор І `&&` як "скорочений варіант `if`".
+````warn header="Не міняйте `if` на `||` чи `&&`"
+Деколи оператор І `&&` використовують як "скорочений варіант `if`".
Наприклад:
@@ -234,7 +234,7 @@ let x = 1;
(x > 0) && alert( 'Більше за нуль!' );
```
-Дія у правій частині `&&` буде виконуватися, тільки якщо обчислення дійде до неї. Тобто, тільки якщо `(x > 0)` є ічтинним.
+Дія у правій частині `&&` буде виконуватися, тільки якщо обчислення дійде до неї. Тобто тільки якщо `(x > 0)` є істинним.
Тому, власне, ми маємо аналог для:
@@ -244,7 +244,7 @@ let x = 1;
if (x > 0) alert( 'Більше за нуль!' );
```
-Варіант з `&&` коротший. Але `if` є більш очевидним і зазвичай більш читабельний. Тому ми рекомендуємо використовувати кожну конструкцію за своїм призначенням: використовуємо `if`, якщо нам потрібен if і використовуємо `&&`, якщо нам потрібен І.
+Хоча варіант з `&&` видається коротшим, конструкція з `if` є більш очевидною і зазвичай більш читабельною. Тому ми рекомендуємо використовувати кожну конструкцію за своїм призначенням: використовуємо `if`, якщо нам потрібна інструкція `if`, і використовуємо `&&`, якщо нам потрібен оператор І.
````
@@ -277,13 +277,13 @@ alert( !!"не пустий рядок" ); // true
alert( !!null ); // false
```
-Тобто, перший НЕ перетворює значення на булево і повертає зворотне, а другий НЕ інвертує його знову. Зрештою, ми маємо просте перетворення значення на булевий тип.
+Тобто, перший НЕ перетворює значення на булеве і повертає зворотне, а другий НЕ інвертує його знову. Зрештою ми маємо просте перетворення значень на булевий тип.
-Є трохи більш детальний спосіб зробити те ж саме -- вбудована функція `Boolean`:
+Є трохи довший спосіб зробити те ж саме -- вбудована функція `Boolean`:
```js run
alert( Boolean("не пустий рядок") ); // true
alert( Boolean(null) ); // false
```
-Пріоритет НЕ `!` є навищим з усіх логічних операторів, тому він завжди виконується першим, перед `&&` або `||`.
+Пріоритет НЕ `!` є найвищим серед усіх логічних операторів, тому він завжди виконується першим, перед `&&` або `||`.