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 3cb8d13

Browse files
fixed typos and simplified explanation
**In chapter 01-06-02 rest-parameters-spread** Some of sentences were correct, but they were "unnatural" in Ukrainian and make understanding more difficult.
1 parent a62746d commit 3cb8d13

File tree

1 file changed

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

1 file changed

+44
-44
lines changed

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

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66

77
- `Math.max(arg1, arg2, ..., argN)` -- повертає найбільший з аргументів.
88
- `Object.assign(dest, src1, ..., srcN)` -- копіює властивості з `src1..N` до `dest`.
9-
- ...і багато ще.
9+
- ...і багато інших.
1010

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

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

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

17-
Як тут:
17+
Як от тут:
1818
```js run
1919
function sum(a, b) {
2020
return a + b;
@@ -23,9 +23,9 @@ function sum(a, b) {
2323
alert(sum(1, 2, 3, 4, 5));
2424
```
2525

26-
Помилки "надмірних" аргументів у цьому випадку не буде. Але, звичайно, будуть враховані лише перші два, тому результатом у коді вище є `3`.
26+
Помилки із-за "надмірних" аргументів у цьому випадку не буде. Але, звісно ж, враховані будуть лише перші два, тому результатом у коді вище є `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 ?!
@@ -75,7 +75,7 @@ function f(arg1, ...rest, arg2) { // arg2 після ...rest ?!
7575

7676
## Змінна "arguments"
7777

78-
Існує також спеціальний об’єкт, подібний масиву `arguments` який містить усі аргументи за їх індексом.
78+
Існує також спеціальний псевдомасив, об'єкт`arguments`, який містить усі аргументи з їх індексами.
7979

8080
Наприклад:
8181

@@ -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

92-
// показує: 2, Julius, Caesar
93-
showName("Julius", "Caesar");
92+
// показує: 2, Юлій, Цезар
93+
showName("Юлій", "Цезар");
9494

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

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

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

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

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

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

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

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

121-
Як ми пам’ятаємо, стрілочні функції не мають власних `this`. Тепер ми знаємо, що у них також немає особливого об'єкту `arguments`.
121+
Як ми пам’ятаємо, стрíлкові функції не мають власних `this`. Тепер ми знаємо, що у них також немає особливого об'єкту `arguments`.
122122
````
123123
124124
125-
## Синтаксис розширення [#spread-syntax]
125+
## Синтаксис розширення [#spread-syntax] (з англ. spread syntax)
126126
127-
Ми тільки що побачили, як отримати масив зі списку параметрів.
127+
Ми щойно побачили, як отримати масив зі списку параметрів.
128128
129129
Але іноді нам потрібно зробити зворотнє.
130130
@@ -134,7 +134,7 @@ f(1); // 1
134134
alert( Math.max(3, 5, 1) ); // 5
135135
```
136136
137-
Тепер припустимо, що у нас є масив `[3, 5, 1]`. Як нам викликати `Math.max` з цим?
137+
Тепер припустімо, що у нас є масив `[3, 5, 1]`. Як нам викликати `Math.max` з цим?
138138
139139
Передати "як є" не вийде, бо `Math.max` очікує список числових аргументів, а не єдиний масив:
140140
@@ -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
@@ -189,10 +189,10 @@ let arr2 = [8, 9, 15];
189189
let merged = [0, ...arr, 2, ...arr2];
190190
*/!*
191191
192-
alert(merged); // 0,3,5,1,2,8,9,15 (0, then arr, then 2, then arr2)
192+
alert(merged); // 0,3,5,1,2,8,9,15 (0, тоді arr, тоді 2, тоді arr2)
193193
```
194194
195-
У наведених вище прикладах ми використовували масив для демонстрації синтаксису розширення, але підходить будь-який повторюванний об'єкт.
195+
У наведених вище прикладах для демонстрації синтаксису розширення ми використовували масив, але підходить будь-який ітеровуваний (перебираваний) об'єкт.
196196
197197
Наприклад, тут ми використовуємо синтаксис розширення, щоб перетворити рядок у масив символів:
198198
@@ -202,32 +202,32 @@ 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
218-
Результат такий самий як `[...str]`.
218+
Результат такий самий як при `[...str]`.
219219
220220
Але між `Array.from(obj)` та `[...obj]` є тонка різниця:
221221
222-
- `Array.from` працює як з масиво-подібними об'єктами, так і з об'єктами, що ітеруються.
223-
- Синтаксис розширення працює тільки з ітераторами.
222+
- `Array.from` працює як з псевдомасивами, так і з перебираваними об'єктами.
223+
- Синтаксис розширення працює тільки з перебираваними об'єктами.
224224
225-
Отже, для завдання перетворити щось на масив `Array.from` буде більш універсальним.
225+
Отже, якщо треба перетворити щось на масив, то `Array.from` буде більш універсальним.
226226
227227
228228
## Створити копію масива/об’єкта
229229
230-
Пригадайте, коли ми говорили `Object.assign()` [в минулому розділі](info:object-copy#cloning-and-merging-object-assign)?
230+
Пам'ятаєте ми раніше говорили про `Object.assign()` [в минулому розділі](info:object-copy#cloning-and-merging-object-assign)?
231231
232232
Те ж саме можна зробити і з синтаксисом розширення.
233233
@@ -273,23 +273,23 @@ alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4}
273273
alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
274274
```
275275
276-
Цей спосіб копіювання об’єкта набагато коротший, ніж `let objCopy = Object.assign({}, obj)` чи для масиву `let arrCopy = Object.assign([], arr)` тому ми вважаємо за краще використовувати його, коли це можливо.
276+
Цей спосіб копіювання об’єкта набагато коротший, ніж `let objCopy = Object.assign({}, obj)` чи для масиву `let arrCopy = Object.assign([], arr)`. Тому ми вважаємо за краще використовувати його, коли це можливо.
277277
278278
279279
## Підсумки
280280
281-
Коли ми бачимо `"..."` у коді це або залишкові параметри, або синтаксис розширення.
281+
Коли ми бачимо `"..."` у коді - це або залишкові параметри, або синтаксис розширення.
282282
283283
Існує простий спосіб відрізнити їх:
284284
285-
- Коли `...` находиться в кінці параметрів функції, це "залишкові параметри" і він збирає решту переданих аргументів у масив.
285+
- Коли `...` знаходиться в кінці параметрів функції, це "залишкові параметри" і він збирає решту переданих аргументів у масив.
286286
- Коли `...` виникає під час виклику функції чи чогось подібного, це називається "синтаксисом розширення" і розширює масив у список.
287287
288-
Використовуйте паттерни:
288+
Паттерни використання:
289289
290290
- Залишкові параметри використовуються для створення функцій, які приймають будь-яку кількість аргументів.
291291
- Синтаксис розширення використовується для передачі масиву у функції, які зазвичай вимагають список із багатьох аргументів.
292292
293293
Разом вони допомагають легко переміщатися між списком та масивом параметрів.
294294
295-
Усі аргументи виклику функції також доступні в "олдскульному" ітерабельному об’єкті `arguments`.
295+
Усі аргументи виклику функції також доступні в "олдскульному" ітеровуваному об’єкті `arguments`.

0 commit comments

Comments
(0)

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