Skip to content

Commit 9ee6c5e

Browse files
authored
Apply suggestions from code review
1 parent 3cb8d13 commit 9ee6c5e

File tree

1 file changed

+24
-24
lines changed
  • 1-js/06-advanced-functions/02-rest-parameters-spread

1 file changed

+24
-24
lines changed

1-js/06-advanced-functions/02-rest-parameters-spread/article.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
- `Object.assign(dest, src1, ..., srcN)` -- копіює властивості з `src1..N` до `dest`.
99
- ...і багато інших.
1010

11-
У цьому розділі ми дізнаємось, як зробити те саме в власній функції. А також, як передати таким функціям в якості параметрів масиви.
11+
У цьому розділі ми дізнаємось, як зробити те саме у власній функції. А також, як передавати таким функціям масиви як параметри.
1212

13-
## Залишкові параметри `...` (з англ. rest parameters)
13+
## Залишкові параметри `...` (з англ. "Rest Parameters")
1414

1515
Функцію можна викликати з будь-якою кількістю аргументів, незалежно від того, як вона оголошена.
1616

@@ -25,7 +25,7 @@ alert(sum(1, 2, 3, 4, 5));
2525

2626
Помилки із-за "надмірних" аргументів у цьому випадку не буде. Але, звісно ж, враховані будуть лише перші два, тому результатом у коді вище є `3`.
2727

28-
Решту параметрів можна включити до визначення функції за допомогою трьох крапок `...` і після них ім'я масив, в який вони передадуться. Точки буквально означають "зібрати решту параметрів у масив".
28+
Решту переданих параметрів можна можна зібрати разом за допомогою трьох крапок `...` і після них ім'я змінної з масивом, в який вони передадуться. Ці три крапки буквально означають "зібрати решту параметрів у масив".
2929

3030
Наприклад, щоб зібрати всі аргументи в масив `args`:
3131

@@ -43,7 +43,7 @@ alert( sumAll(1, 2) ); // 3
4343
alert( sumAll(1, 2, 3) ); // 6
4444
```
4545

46-
Ми можемо вказати щоб перші параметри отримувались як аргументи, а в масив пішли всі інші.
46+
Ми можемо задати щоб перші два аргументи мали свої персональні змінні, а в масив пішли всі решта.
4747

4848
У цьому прикладі перші два аргументи переходять у змінні, а решта -- в масив `titles`:
4949

@@ -62,7 +62,7 @@ showName("Юлій", "Цезар", "Консул", "Полководець");
6262
```
6363

6464
````warn header="Залишкові параметри повинні бути в кінці"
65-
Залишкові параметри збирають усі залишені аргументи, тому такий код не спрацює і викличе помилку:
65+
Залишкові параметри збирають усі додаткові аргументи, тому такий код не спрацює і викличе помилку:
6666
6767
```js
6868
function f(arg1, ...rest, arg2) { // arg2 після ...rest ?!
@@ -85,27 +85,27 @@ function showName() {
8585
alert(arguments[0]);
8686
alert(arguments[1]);
8787

88-
// він ітеровуваний (перебираваний)
89-
// for(let arg of arguments) alert(arg); працюватиме
88+
// ми можемо ітерувати по ньому, код нижче працюватиме
89+
// for(let arg of arguments) alert(arg);
9090
}
9191

9292
// показує: 2, Юлій, Цезар
9393
showName("Юлій", "Цезар");
9494

95-
// показує: 1, Ілля, undefined (другого аргументу нема)
95+
// показує: 1, Ілля, undefined (другого аргументу немає)
9696
showName("Ілля");
9797
```
9898

9999
В стародавні часи такої можливості як залишкові параметри в JavaScript не існувало. Тому єдиним способом отримати всі аргументи функції було за допомогою `arguments`. І він все ще працює, ми можемо знайти його в старому коді.
100100

101-
Але недоліком є те, що хоч `arguments` є одночасно і псевдомасивом, і ітеровуваним (перебираваним) об'єктом, та все ж це об'єкт, а не масив. Він не підтримує методи масиву, тому ми не можемо наприклад викликати `arguments.map(...)`.
101+
Але недоліком є те, що хоч `arguments` є одночасно і псевдомасивом, і ітерованим об'єктом, та все ж це об'єкт, а не масив. Він не підтримує методи масиву, тому ми не можемо наприклад викликати `arguments.map(...)`.
102102

103103
Крім того, він завжди містить усі аргументи. Ми не можемо отримати лише частину з них, як це можна робити з допомогою залишкових параметрів.
104104

105105
Тому, коли нам потрібні вбудовані методи масивів, тоді краще використати залишкові параметри.
106106

107-
````smart header="Стрíлкові функції не мають `\"arguments\"`"
108-
Якщо ми викличемо `arguments` об'єкта всередині стрíлкової функції, він візьме їх із зовнішньої "звичайної" функції.
107+
````smart header="Стрілкові функції не мають `\"arguments\"`"
108+
Якщо ми спробуємо звернутись до об'єкта `arguments` всередині стрілкової функції, то отримаємо його з зовнішньої "звичайної" функції.
109109

110110
Ось приклад:
111111

@@ -118,11 +118,11 @@ function f() {
118118
f(1); // 1
119119
```
120120

121-
Як ми пам’ятаємо, стрíлкові функції не мають власних `this`. Тепер ми знаємо, що у них також немає особливого об'єкту `arguments`.
121+
Як ми пам’ятаємо, стрілкові функції не мають власних `this`. Тепер ми знаємо, що в них також немає особливого об'єкту `arguments`.
122122
````
123123
124124
125-
## Синтаксис розширення [#spread-syntax] (з англ. spread syntax)
125+
## Синтаксис розширення [#spread-syntax] (з англ. "Spread Syntax")
126126
127127
Ми щойно побачили, як отримати масив зі списку параметрів.
128128
@@ -146,11 +146,11 @@ alert( Math.max(arr) ); // NaN
146146
*/!*
147147
```
148148
149-
І, звісно ж, ми не можемо вручну перераховувати елементи в коді `Math.max(arr[0], arr[1], arr[2])`, тому що ми можемо й не знати, скільки їх існує. Під час виконання нашого сценарію їх може бути багато, а може і не бути. Та й взагалі робити це вручну було б жахливо.
149+
І, звісно ж, ми не можемо вручну перераховувати елементи в коді `Math.max(arr[0], arr[1], arr[2])`, тому що ми можемо й не знати, скільки їх існує. Під час виконання нашого сценарію їх може бути багато, а може і не бути. Та й взагалі робити це вручну було б дивно і неефективно.
150150
151151
Нам допоможе *синтаксис розширення*! Він схожий на параметри залишку, також використовуються `...`, але працює все навпаки.
152152
153-
Коли `...arr` використовується в дужках при виклику функції, він "розширює" ітеровуваний об'єкт `arr` до списку аргументів.
153+
Коли `...arr` використовується в дужках підчас виклику функції, він "розширює" ітеровуваний об'єкт `arr` до списку аргументів.
154154
155155
Для `Math.max`:
156156
@@ -192,7 +192,7 @@ let merged = [0, ...arr, 2, ...arr2];
192192
alert(merged); // 0,3,5,1,2,8,9,15 (0, тоді arr, тоді 2, тоді arr2)
193193
```
194194
195-
У наведених вище прикладах для демонстрації синтаксису розширення ми використовували масив, але підходить будь-який ітеровуваний (перебираваний) об'єкт.
195+
У наведених вище прикладах для демонстрації синтаксису розширення ми використовували масив, але підходить будь-який ітерований об'єкт.
196196
197197
Наприклад, тут ми використовуємо синтаксис розширення, щоб перетворити рядок у масив символів:
198198
@@ -202,25 +202,25 @@ let str = "Hello";
202202
alert( [...str] ); // H,e,l,l,o
203203
```
204204
205-
Синтаксис розширення під капотом працює з перебираваними об'єктами так само, як це робить `for..of`.
205+
Синтаксис розширення під капотом працює з ітерованими об'єктами так само, як це робить `for..of`.
206206
207-
Отже, для рядка, `for..of` повертає символи й `...str` перетворюється в `"H","e","l","l","o"`. Список символів передається в ініціалізатор масиву `[...str]`.
207+
Отже, для рядка, `for..of` повертає символи так само як і `...str`, врешті-решт рядок перетворюється на `"H","e","l","l","o"`. Список символів передається в ініціалізатор масиву `[...str]`.
208208
209-
Для цього конкретного завдання ми також могли б використовувати `Array.from`, бо він перетворює перебираваний об'єкт (то й же рядок, або щось інше) на масив:
209+
Для цього конкретного завдання ми також могли б використовувати `Array.from`, бо він перетворює ітерований об'єкт (то й же рядок, або щось інше) на масив:
210210
211211
```js run
212212
let str = "Hello";
213213
214-
// Array.from перетворює перебираваний об'єкт в масив
214+
// Array.from перетворює ітерований об'єкт на масив
215215
alert( Array.from(str) ); // H,e,l,l,o
216216
```
217217
218218
Результат такий самий як при `[...str]`.
219219
220220
Але між `Array.from(obj)` та `[...obj]` є тонка різниця:
221221
222-
- `Array.from` працює як з псевдомасивами, так і з перебираваними об'єктами.
223-
- Синтаксис розширення працює тільки з перебираваними об'єктами.
222+
- `Array.from` працює як з псевдомасивами, так і з ітерованими об'єктами.
223+
- Синтаксис розширення працює тільки з ітерованими об'єктами.
224224
225225
Отже, якщо треба перетворити щось на масив, то `Array.from` буде більш універсальним.
226226
@@ -278,7 +278,7 @@ alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
278278
279279
## Підсумки
280280
281-
Коли ми бачимо `"..."` у коді - це або залишкові параметри, або синтаксис розширення.
281+
Коли ми бачимо `"..."` у коді -- це або залишкові параметри, або синтаксис розширення.
282282
283283
Існує простий спосіб відрізнити їх:
284284
@@ -292,4 +292,4 @@ alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
292292
293293
Разом вони допомагають легко переміщатися між списком та масивом параметрів.
294294
295-
Усі аргументи виклику функції також доступні в "олдскульному" ітеровуваному об’єкті `arguments`.
295+
Усі аргументи виклику функції також доступні в "олдскульному" ітерованому об’єкті `arguments`.

0 commit comments

Comments
 (0)