HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В предыдущих курсах мы уже научились работать с составными данными и поняли, зачем они нужны. Также мы изучили концептуальные способы работы, которые не зависят от конкретного языка программирования.</p>
1 <p>В предыдущих курсах мы уже научились работать с составными данными и поняли, зачем они нужны. Также мы изучили концептуальные способы работы, которые не зависят от конкретного языка программирования.</p>
2 <p>В этом курсе мы разберем конкретные приемы, которые используются для работы с коллекциями в языке JavaScript. При этом они будут подходить и ко многим другим языкам.</p>
2 <p>В этом курсе мы разберем конкретные приемы, которые используются для работы с коллекциями в языке JavaScript. При этом они будут подходить и ко многим другим языкам.</p>
3 <h2>Какие темы будем изучать</h2>
3 <h2>Какие темы будем изучать</h2>
4 <p>Списки есть везде и их бывает много. Они окружают нас повсеместно. Например, в Хекслете есть списки:</p>
4 <p>Списки есть везде и их бывает много. Они окружают нас повсеместно. Например, в Хекслете есть списки:</p>
5 <ul><li>Пользователей</li>
5 <ul><li>Пользователей</li>
6 <li>Курсов</li>
6 <li>Курсов</li>
7 <li>Уроков</li>
7 <li>Уроков</li>
8 <li>Топиков</li>
8 <li>Топиков</li>
9 <li>Комментариев</li>
9 <li>Комментариев</li>
10 </ul><p>Еще есть не связанные с конкретными вещами списки, которые вводятся на сайте. Они существуют только внутри кода.</p>
10 </ul><p>Еще есть не связанные с конкретными вещами списки, которые вводятся на сайте. Они существуют только внутри кода.</p>
11 <p>В этом курсе мы изучим несколько новых типов данных: массивы, ассоциативные массивы и множества.</p>
11 <p>В этом курсе мы изучим несколько новых типов данных: массивы, ассоциативные массивы и множества.</p>
12 <p>Также мы познакомимся со следующими темами:</p>
12 <p>Также мы познакомимся со следующими темами:</p>
13 <ul><li><strong>Передача параметров по ссылке и по значению</strong>- более сложный механизм, чем мы изучали до этого</li>
13 <ul><li><strong>Передача параметров по ссылке и по значению</strong>- более сложный механизм, чем мы изучали до этого</li>
14 <li><strong>Функции высшего порядка</strong>- встроены в JavaScript и являются каноническим способом работы с коллекциями</li>
14 <li><strong>Функции высшего порядка</strong>- встроены в JavaScript и являются каноническим способом работы с коллекциями</li>
15 <li><strong>Spread- и rest-операции</strong>- распространены в других языках программирования и позволяют сократить шаблонный код</li>
15 <li><strong>Spread- и rest-операции</strong>- распространены в других языках программирования и позволяют сократить шаблонный код</li>
16 <li><strong>Destructing assignment</strong>- деструктуризация. Техника, которая используется в функциональных программированиях и языках. Она часто соприкасается с другой техникой, которая называется pattern matching</li>
16 <li><strong>Destructing assignment</strong>- деструктуризация. Техника, которая используется в функциональных программированиях и языках. Она часто соприкасается с другой техникой, которая называется pattern matching</li>
17 </ul><p>Также в этом курсе мы познакомимся с новыми техниками программирования, которые не относятся напрямую к работе с коллекциями. Это будет связано с проектом, который мы будем делать.</p>
17 </ul><p>Также в этом курсе мы познакомимся с новыми техниками программирования, которые не относятся напрямую к работе с коллекциями. Это будет связано с проектом, который мы будем делать.</p>
18 <p>Мы поговорим о техниках:</p>
18 <p>Мы поговорим о техниках:</p>
19 <ul><li><strong>Lazy Evaluation</strong>- ленивые вычисления</li>
19 <ul><li><strong>Lazy Evaluation</strong>- ленивые вычисления</li>
20 <li><strong>Memoization</strong>- мемоизация</li>
20 <li><strong>Memoization</strong>- мемоизация</li>
21 <li><strong>Fluent interface</strong>- текучий интерфейс</li>
21 <li><strong>Fluent interface</strong>- текучий интерфейс</li>
22 </ul><p>Еще мы познакомимся с понятием<strong>DSL - Domain-specific language</strong>. Это специализированный язык для конкретной области применения. Здесь речь не о языке программирования, хотя это тоже возможно, но с некоторыми ограничениями.</p>
22 </ul><p>Еще мы познакомимся с понятием<strong>DSL - Domain-specific language</strong>. Это специализированный язык для конкретной области применения. Здесь речь не о языке программирования, хотя это тоже возможно, но с некоторыми ограничениями.</p>
23 <p>DSL делится на два типа:</p>
23 <p>DSL делится на два типа:</p>
24 <ul><li><strong>Внешний</strong>. Сюда входят языки запросов SQL и XPath, языки разметки HTML и Markdown, регулярные выражения. Они не пишутся на целевом языке, а формируются как текст, который разбирается специальными инструментами</li>
24 <ul><li><strong>Внешний</strong>. Сюда входят языки запросов SQL и XPath, языки разметки HTML и Markdown, регулярные выражения. Они не пишутся на целевом языке, а формируются как текст, который разбирается специальными инструментами</li>
25 <li><strong>Внутренний</strong>. Сюда входит методика создания внутренних DSL - Fluent Interface. Внутренний DSL написан на целевом языке - на котором мы программируем. Этот DSL обычно является библиотекой. Ее API выглядит как естественный язык, при этом детали реализации спрятаны</li>
25 <li><strong>Внутренний</strong>. Сюда входит методика создания внутренних DSL - Fluent Interface. Внутренний DSL написан на целевом языке - на котором мы программируем. Этот DSL обычно является библиотекой. Ее API выглядит как естественный язык, при этом детали реализации спрятаны</li>
26 </ul><p>DSL - важный механизм, который позволяет создавать специализированные языки. Они уменьшают вероятность появления ошибок и позволяют эффективно и быстро выражать и формировать понятия для определенной предметной области.</p>
26 </ul><p>DSL - важный механизм, который позволяет создавать специализированные языки. Они уменьшают вероятность появления ошибок и позволяют эффективно и быстро выражать и формировать понятия для определенной предметной области.</p>
27 <h2>С каким проектом будем работать</h2>
27 <h2>С каким проектом будем работать</h2>
28 <p>В этом курсе мы будем делать проект, который называется Linq. Это библиотека, которая пришла из мира .NET - из языка C-sharp. Она позволяет описывать, как мы хотим обработать коллекцию и выдавать результат.</p>
28 <p>В этом курсе мы будем делать проект, который называется Linq. Это библиотека, которая пришла из мира .NET - из языка C-sharp. Она позволяет описывать, как мы хотим обработать коллекцию и выдавать результат.</p>
29 <p>Сразу рассмотрим пример:</p>
29 <p>Сразу рассмотрим пример:</p>
30 <p>Здесь мы формируем некоторую структуру - список машин. Каждая машина представлена некоторым объектом с определенным набором данных: бренд, модель и год выпуска.</p>
30 <p>Здесь мы формируем некоторую структуру - список машин. Каждая машина представлена некоторым объектом с определенным набором данных: бренд, модель и год выпуска.</p>
31 <p>После этого с помощью нашей библиотеки мы формируем эту коллекцию через HexletLinq.from(cars) - здесь происходит оборачивание или враппинг массива.</p>
31 <p>После этого с помощью нашей библиотеки мы формируем эту коллекцию через HexletLinq.from(cars) - здесь происходит оборачивание или враппинг массива.</p>
32 <p>У этой коллекции есть большое количество методов, которые позволяют ее обрабатывать.</p>
32 <p>У этой коллекции есть большое количество методов, которые позволяют ее обрабатывать.</p>
33 <p>Например, мы хотим получить все модели машин, отсортированных в обратном порядке по году и принадлежащие бренду Kia:</p>
33 <p>Например, мы хотим получить все модели машин, отсортированных в обратном порядке по году и принадлежащие бренду Kia:</p>
34 <p>Чтобы выполнить эту задачу, мы пишем код так, что он читается почти как английский язык. Мы говорим, что нужно отсортировать (order by) по году выпуска (year) в обратном порядке (desc). При этом нам нужно выбрать из этих машин только те, у которых бренд Kia (where brand kia).</p>
34 <p>Чтобы выполнить эту задачу, мы пишем код так, что он читается почти как английский язык. Мы говорим, что нужно отсортировать (order by) по году выпуска (year) в обратном порядке (desc). При этом нам нужно выбрать из этих машин только те, у которых бренд Kia (where brand kia).</p>
35 <p>Результат должен представлять не коллекцию машин, а коллекцию моделей. Поэтому достаем из машин их модели (select model).</p>
35 <p>Результат должен представлять не коллекцию машин, а коллекцию моделей. Поэтому достаем из машин их модели (select model).</p>
36 <p>Дальше у нас есть специальный метод toArray, который преобразует список к обычному массиву, и на выходе получаем [ 'sorento', 'sportage', 'rio' ]. Массив содержит все модели бренда Kia, которые отсортированы по году в обратном порядке.</p>
36 <p>Дальше у нас есть специальный метод toArray, который преобразует список к обычному массиву, и на выходе получаем [ 'sorento', 'sportage', 'rio' ]. Массив содержит все модели бренда Kia, которые отсортированы по году в обратном порядке.</p>
37 <h2>Почему этот курс</h2>
37 <h2>Почему этот курс</h2>
38 <p>Какие преимущества есть при изучении этого курса:</p>
38 <p>Какие преимущества есть при изучении этого курса:</p>
39 <ul><li>Будем писать настоящий канонический JS-код с помощью функции высших порядков. Это код, который в реальности пишут в продакшене</li>
39 <ul><li>Будем писать настоящий канонический JS-код с помощью функции высших порядков. Это код, который в реальности пишут в продакшене</li>
40 <li>Будем обучаться через рефакторинг, а код будет эволюционировать. Значит, проект будет становиться лучше - меняться по урокам</li>
40 <li>Будем обучаться через рефакторинг, а код будет эволюционировать. Значит, проект будет становиться лучше - меняться по урокам</li>
41 <li>Будем разрабатывать проект через тесты</li>
41 <li>Будем разрабатывать проект через тесты</li>
42 <li>Нужно будет думать и включаться в каждое упражнение, которое мы предоставляем</li>
42 <li>Нужно будет думать и включаться в каждое упражнение, которое мы предоставляем</li>
43 </ul>
43 </ul>