0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы познакомимся с фичей, которую представляют нам динамические языки. Она называется rest operator или операция rest.</p>
1
<p>В этом уроке мы познакомимся с фичей, которую представляют нам динамические языки. Она называется rest operator или операция rest.</p>
2
<h2>Разоблачение списков</h2>
2
<h2>Разоблачение списков</h2>
3
<p>Вспомним пример со списками. В курсе Последовательности мы использовали специальный конструктор l, который принимает на вход любое количество параметров:</p>
3
<p>Вспомним пример со списками. В курсе Последовательности мы использовали специальный конструктор l, который принимает на вход любое количество параметров:</p>
4
<p>Количество параметров динамическое. Мы можем не передать ни одного, и тогда у нас получится пустой список. А можем передать их сколько угодно, и тогда они превращаются в один список.</p>
4
<p>Количество параметров динамическое. Мы можем не передать ни одного, и тогда у нас получится пустой список. А можем передать их сколько угодно, и тогда они превращаются в один список.</p>
5
<p>Если мы посмотрим определение этой функции, то увидим внутри новую синтаксическую конструкцию. Она выглядит как три точки, и после нее идет идентификатор. В данном случае это элемент. А три точки - это и есть rest operator.</p>
5
<p>Если мы посмотрим определение этой функции, то увидим внутри новую синтаксическую конструкцию. Она выглядит как три точки, и после нее идет идентификатор. В данном случае это элемент. А три точки - это и есть rest operator.</p>
6
<p>Operator переводится как операция, а не оператор. Это разные вещи.</p>
6
<p>Operator переводится как операция, а не оператор. Это разные вещи.</p>
7
<p>При использовании этой операции все элементы помещаются в один массив. В комментарии // elements [1, 10, 23, 234] видно его содержимое для этого списка. И после этого мы работаем с ним как с обычным массивом. В нашем примере мы вызываем reverse(), reduce() и постепенно добавляем элементы в null через cons. В итоге получаем список.</p>
7
<p>При использовании этой операции все элементы помещаются в один массив. В комментарии // elements [1, 10, 23, 234] видно его содержимое для этого списка. И после этого мы работаем с ним как с обычным массивом. В нашем примере мы вызываем reverse(), reduce() и постепенно добавляем элементы в null через cons. В итоге получаем список.</p>
8
<p>В этом примере много элементов, которые были бы непонятны на тот момент, когда мы знакомились со списками. Поэтому в тот момент мы не рассказывали о том, как они устроены внутри. Это было бы довольно сложно понять. Но теперь мы знаем это и можем читать и писать такой код.</p>
8
<p>В этом примере много элементов, которые были бы непонятны на тот момент, когда мы знакомились со списками. Поэтому в тот момент мы не рассказывали о том, как они устроены внутри. Это было бы довольно сложно понять. Но теперь мы знаем это и можем читать и писать такой код.</p>
9
<h2>Общая форма</h2>
9
<h2>Общая форма</h2>
10
<p>Операцию rest можно комбинировать и с позиционными аргументами:</p>
10
<p>Операцию rest можно комбинировать и с позиционными аргументами:</p>
11
<p>В данном случае видно, что мы можем передавать первый и второй, третий параметры и так далее. И в конце можем использовать rest operator.</p>
11
<p>В данном случае видно, что мы можем передавать первый и второй, третий параметры и так далее. И в конце можем использовать rest operator.</p>
12
<p><strong>Rest</strong>- это остаток. Он используется только в конце. Его нельзя использовать в середине или в начале. Поэтому если он есть в определении функции, то будет в самом конце этой функции. Причем перед ним может быть любое количество аргументов.</p>
12
<p><strong>Rest</strong>- это остаток. Он используется только в конце. Его нельзя использовать в середине или в начале. Поэтому если он есть в определении функции, то будет в самом конце этой функции. Причем перед ним может быть любое количество аргументов.</p>
13
<p>Эта функция принимает на вход параметры, которые соберутся в один массив. Если мы попытаемся вызвать эту функцию с одним параметром, то первый параметр будет first. Второй - undefined, потому что он не был передан.</p>
13
<p>Эта функция принимает на вход параметры, которые соберутся в один массив. Если мы попытаемся вызвать эту функцию с одним параметром, то первый параметр будет first. Второй - undefined, потому что он не был передан.</p>
14
<p>В случае с rest ситуация другая. theArgs будет не undefined, а пустой массив. И это правильно, так как нам не придется делать внутри проверки на undefined. То есть если мы ничего не передали, массив будет пустой, что обычно является желаемым поведением. И дальше уже можно строить работу на основе этого подхода.</p>
14
<p>В случае с rest ситуация другая. theArgs будет не undefined, а пустой массив. И это правильно, так как нам не придется делать внутри проверки на undefined. То есть если мы ничего не передали, массив будет пустой, что обычно является желаемым поведением. И дальше уже можно строить работу на основе этого подхода.</p>
15
<h2>Массив</h2>
15
<h2>Массив</h2>
16
<p>В стандартной библиотеке JavaScript операция rest периодически встречается. Один из самых популярных примеров - добавление элементов в массив. Функция push у массива работает так:</p>
16
<p>В стандартной библиотеке JavaScript операция rest периодически встречается. Один из самых популярных примеров - добавление элементов в массив. Функция push у массива работает так:</p>
17
<p>Здесь мы вызываем push без аргументов, и ничего не происходит. Также можем передать один, два и более аргументов. В итоге массив наполнится и будет выглядеть так:</p>
17
<p>Здесь мы вызываем push без аргументов, и ничего не происходит. Также можем передать один, два и более аргументов. В итоге массив наполнится и будет выглядеть так:</p>
18
<h2>Выводы</h2>
18
<h2>Выводы</h2>
19
<p>В этом уроке мы познакомились с фичей, которая представляет нам динамические языки. Она называется rest operator или операция rest. Operator переводится как операция. При ее использовании все элементы помещаются в один массив rest - это остаток. Он используется только в конце. Его нельзя использовать в середине или в начале. Поэтому если он есть в определении функции, то будет в самом конце этой функции. Причем перед ним может быть любое количество аргументов.</p>
19
<p>В этом уроке мы познакомились с фичей, которая представляет нам динамические языки. Она называется rest operator или операция rest. Operator переводится как операция. При ее использовании все элементы помещаются в один массив rest - это остаток. Он используется только в конце. Его нельзя использовать в середине или в начале. Поэтому если он есть в определении функции, то будет в самом конце этой функции. Причем перед ним может быть любое количество аргументов.</p>