Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9ee6c5e

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /