HTML Diff
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>