You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/07-operators/article.md
+26-26Lines changed: 26 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Оператори
2
2
3
-
Ми знаємо багато операторів зі школи. Це такі речі, як додавання `+`, множення `*`, віднімання `-`, тощо.
3
+
Зі шкільної програми, ми знаємо багато арифметичний операцій, такі як додавання `+`, множення `*`, віднімання `-`, тощо.
4
4
5
5
У цьому розділі ми зупинимося на аспектах операторів, які не охоплені шкільною арифметикою.
6
6
@@ -26,7 +26,7 @@
26
26
alert( y - x ); // 2, бінарний мінус віднімає значення
27
27
```
28
28
29
-
Формально, ми говоримо про два різні оператори: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два опернди: віднімає).
29
+
Формально, ми говоримо про два різні оператори: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два операнди: віднімає).
30
30
31
31
## Об'єднання рядків, бінарний +
32
32
@@ -50,13 +50,13 @@ alert( '1' + 2 ); // "12"
50
50
alert( 2 + '1' ); // "21"
51
51
```
52
52
53
-
Бачите, не має значення, чи перший операнд є рядком або другий. Правило просте: якщо будь-який операнд є радком, інший також перетворюється на рядок.
53
+
Бачите, не має значення, чи перший операнд є рядком чи другий. Правило просте: якщо будь-який операнд є рядком, інший також перетворюється на рядок.
54
54
55
55
Однак зверніть увагу, що операції виконуються зліва направо. Якщо є два числа, за якими йде рядок, числа будуть додані перед перетворенням на рядок:
56
56
57
57
58
58
```js run
59
-
alert(2 + 2 + '1' ); // "41" а не "221"
59
+
alert(2 + 2 + '1' ); // "41", а не "221"
60
60
```
61
61
62
62
Об'єднання рядків і перетворення є особливою ознакою бінарного плюса `+`. Інші арифметичні оператори працюють тільки з числами і завжди перетворюють свої операнди на числа.
З точки зору математика, надмір плюсів може здатися дивним. Але з точки зору програміста, немає нічого особливого: спочатку застосовується унарні плюси, вони перетворюють рядки на числа, а потім бінарний плюс підсумовує їх.
124
+
З точки зору математики, надмірні плюси можуть здатися дивними. Але з точки зору програміста, немає нічого особливого: спочатку застосовується унарні плюси, вони перетворюють рядки на числа, а потім бінарний плюс підсумовує їх.
125
125
126
126
Чому унарні плюси застосовуються до значень перед бінарними плюсами? Як ми побачимо далі, це пов'язано з їх *більш високим пріоритетом*.
127
127
128
128
## Пріоритет оператора
129
129
130
-
Ящо вираз має більше одного оператора, порядок виконання визначається їх *пріоритетом*, або, іншими словами, неявним порядком пріоритетів операторів.
130
+
Якщо вираз має більше одного оператора, порядок виконання визначається їх *пріоритетом*, або, іншими словами, неявним порядком пріоритетів операторів.
131
131
132
-
Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути обчислене перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *більш високий пріоритет*, ніж додавання.
132
+
Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути обчислене перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *вищий пріоритет*, ніж додавання.
133
133
134
134
Дужки перевизначають будь-який пріоритет, тому, якщо ми не задоволенні неявним приорітетом, ми можемо використовувати дужки, щоб змінити його. Наприклад: `(1 + 2) * 2`.
135
135
136
-
У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер. Якщо пріоритет є однаковим, порядок виконання — зліва направо.
136
+
У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер пріоритету. Якщо пріоритет є однаковим, порядок виконання — зліва направо.
137
137
138
-
Ось витяг із [таблиці пріоритетів](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (вам не потрібно запам'ятовувати це, але зверніть увагу, що унарні оператори вище за відповідні бінарні):
138
+
Ось витяг із [таблиці пріоритетів](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (вам не потрібно це запам'ятовувати, але зверніть увагу, що унарні оператори мають вищий пріоритет за відповідні бінарні):
Як ми бачемо, "унарний плюс" має пріоритет `16`, який вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса).
153
+
Як ми бачемо, "унарний плюс" має пріоритет `16`, що вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса).
154
154
155
155
## Присвоєння
156
156
@@ -178,7 +178,7 @@ alert( b ); // 4
178
178
alert( c ); // 4
179
179
```
180
180
181
-
Ланцюгове присвоєння виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч: `c`, `b`and`a`. Наприкінці всі змінні мають спільне значення.
181
+
Ланцюгове присвоєння виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється змінним ліворуч: `c`, `b`та`a`. В результаті всі змінні мають спільне значення.
Оператор завжди повертає значення. Це очевидно для більшості з них, як додавання `+` або множення `*`. Але оператор присвоєння також додтримується цього правила.
@@ -199,9 +199,9 @@ alert( a ); // 3
199
199
alert( c ); // 0
200
200
```
201
201
202
-
У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім воне використовується для віднімання від `3`.
202
+
У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім воно використовується для віднімання від `3`.
203
203
204
-
Смішний код, чи не так? Ми повинні зрозуміти, як це працює, бо іноді ми бачимо подібне у бібліотеках третьої сторони, але самі не повинні писати нічого подібного. Такі трюки, безумовно, не роблять код більш ясним або читабельним.
204
+
Смішний код, чи не так? Ми повинні зрозуміти, як це працює, бо іноді ми бачимо подібне у сторонніх бібліотеках, але самі не повинні писати нічого подібного. Такі трюки, безумовно, не роблять код більш ясним або читабельним.
205
205
````
206
206
207
207
## Залишок %
@@ -256,7 +256,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і
256
256
counter++; // працює так само, як counter = counter + 1, але коротше
257
257
alert( counter ); // 3
258
258
```
259
-
- **Декремент** `--` зменьшує змінну на 1:
259
+
- **Декремент** `--` зменшує змінну на 1:
260
260
261
261
```js run no-beautify
262
262
let counter = 2;
@@ -265,7 +265,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і
265
265
```
266
266
267
267
```warn
268
-
Інкремент/декремент можуть застосовуватись лише до змінних. Спроба використовувати їх на значенні як `5++` дасть помилку.
268
+
Інкремент/декремент можуть застосовуватись лише до змінних. Спроба використати їх на значенні як `5++` дасть помилку.
269
269
```
270
270
271
271
Оператори `++` та `--` можуть розташовуватись до або після змінної.
@@ -279,7 +279,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і
279
279
280
280
Давайте розберемось. Як відомо, усі оператори повертають значення. Інкремент/декремент не є винятком. Префіксна форма повертає нове значення, тоді як постфіксна форма повертає старе значення (до збільшення/зменшення).
281
281
282
-
Щоб побачитит різницю, наведемо приклад:
282
+
Щоб побачити різницю, наведемо приклад:
283
283
284
284
```js run
285
285
let counter = 1;
@@ -325,7 +325,7 @@ alert(a); // *!*1*/!*
325
325
```
326
326
327
327
````smart header="Інкремент/декремент серед інших операторів"
328
-
Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет вище за більшість інщих арифметичних операцій.
328
+
Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет вищий за більшість інщих арифметичних операцій.
alert( 2 * counter++ ); // 2, тому що counter++ повертається "старе" значення
341
+
alert( 2 * counter++ ); // 2, тому що counter++ повертає "старе" значення
342
342
```
343
343
344
-
Не дивлячісь на те, що з технічної точки зору це допустимо, таке використання робить код меньш читабельним. Один рядок робить кілька речей -- не є добре.
344
+
Не дивлячись на те, що з технічної точки зору це допустимо, таке використання робить код менш читабельним. Коли один рядок робить кілька речей -- це не добре.
345
345
346
346
При читанні коду швидке "вертикальне" сканування оком може легко пропустити щось подібне до `counter++` і не буде очевидним, що змінна була збільшена.
347
347
@@ -370,11 +370,11 @@ counter++;
370
370
- RIGHT SHIFT ( `>>` )
371
371
- ZERO-FILL RIGHT SHIFT ( `>>>` )
372
372
373
-
Ці оператори використовуються дуже рідко. Цоб їх зрозуміти, нам потрібно заглибитись у представлення числа на низькому рівні і зараз не самий оптимальний час для цього, тим більше, що нам вони не будуть потрібні найближчим часом. Якщо вам цікаво, ви можете прочитати статтю [Bitwise Operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Це було би більш практично зробити, коли виникне реальна потреба.
373
+
Ці оператори використовуються дуже рідко. Щоб їх зрозуміти, нам потрібно заглибитись у представлення числа на низькому рівні і зараз не самий оптимальний час для цього, тим більше, що нам вони не будуть потрібні найближчим часом. Якщо вам цікаво, ви можете прочитати статтю [Bitwise Operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Це було би більш практично зробити, коли виникне реальна потреба.
374
374
375
-
## Змінити-на-місці
375
+
## Оператор "модифікувати та присвоїти"
376
376
377
-
Часто нам потрібно застосувати оператор до змінної та зберегти новий результат у ту ж саму змінну.
377
+
Часто нам потрібно застосувати оператор до змінної і зберегти новий результат у ту ж саму змінну.
378
378
379
379
Наприклад:
380
380
@@ -389,12 +389,12 @@ n = n * 2;
389
389
```js run
390
390
let n =2;
391
391
n +=5; // тепер n = 7 (теж саме, що і n = n + 5)
392
-
n *=2; //now n = 14 (теж саме, що і n = n * 2)
392
+
n *=2; //тепер n = 14 (теж саме, що і n = n * 2)
393
393
394
394
alert( n ); // 14
395
395
```
396
396
397
-
Короткий "модифікуй-та-присвоюй" оператор існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо.
397
+
Короткий оператор "модифікувати та присвоїти" існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо.
398
398
399
399
Такі оператори мають таку ж перевагу, як і звичайне присвоєння, тому вони виконуються після більшості інших обчисленнь:
Зверніть увагу, що оператор кома має дуже низький пріоритет, нижчий за `=`, тому дужки є важливими в наведеному вище прикладі.
429
429
430
-
Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоєння `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється, тому його ігнорують.
430
+
Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоєння `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється та ігнорується.
431
431
```
432
432
433
433
Чому нам потрібен оператор, що викидає все, окрім останньої частини?
0 commit comments