Зарегистрируйтесь, чтобы продолжить обучение

Введение JS: Коллекции

В предыдущих курсах мы уже научились работать с составными данными и поняли, зачем они нужны. Также мы изучили концептуальные способы работы, которые не зависят от конкретного языка программирования.

В этом курсе мы разберем конкретные приемы, которые используются для работы с коллекциями в языке JavaScript. При этом они будут подходить и ко многим другим языкам.

Какие темы будем изучать

Списки есть везде и их бывает много. Они окружают нас повсеместно. Например, в Хекслете есть списки:

  • Пользователей
  • Курсов
  • Уроков
  • Топиков
  • Комментариев

Еще есть не связанные с конкретными вещами списки, которые вводятся на сайте. Они существуют только внутри кода.

В этом курсе мы изучим несколько новых типов данных: массивы, ассоциативные массивы и множества.

Также мы познакомимся со следующими темами:

  • Передача параметров по ссылке и по значению — более сложный механизм, чем мы изучали до этого
  • Функции высшего порядка — встроены в JavaScript и являются каноническим способом работы с коллекциями
  • Spread- и rest-операции — распространены в других языках программирования и позволяют сократить шаблонный код
  • Destructing assignment — деструктуризация. Техника, которая используется в функциональных программированиях и языках. Она часто соприкасается с другой техникой, которая называется pattern matching

Также в этом курсе мы познакомимся с новыми техниками программирования, которые не относятся напрямую к работе с коллекциями. Это будет связано с проектом, который мы будем делать.

Мы поговорим о техниках:

  • Lazy Evaluation — ленивые вычисления
  • Memoization — мемоизация
  • Fluent interface — текучий интерфейс

Еще мы познакомимся с понятием DSL — Domain-specific language. Это специализированный язык для конкретной области применения. Здесь речь не о языке программирования, хотя это тоже возможно, но с некоторыми ограничениями.

DSL делится на два типа:

  • Внешний. Сюда входят языки запросов SQL и XPath, языки разметки HTML и Markdown, регулярные выражения. Они не пишутся на целевом языке, а формируются как текст, который разбирается специальными инструментами
  • Внутренний. Сюда входит методика создания внутренних DSL — Fluent Interface. Внутренний DSL написан на целевом языке — на котором мы программируем. Этот DSL обычно является библиотекой. Ее API выглядит как естественный язык, при этом детали реализации спрятаны

DSL — важный механизм, который позволяет создавать специализированные языки. Они уменьшают вероятность появления ошибок и позволяют эффективно и быстро выражать и формировать понятия для определенной предметной области.

С каким проектом будем работать

В этом курсе мы будем делать проект, который называется Linq. Это библиотека, которая пришла из мира .NET — из языка C-sharp. Она позволяет описывать, как мы хотим обработать коллекцию и выдавать результат.

Сразу рассмотрим пример:

import HexletLinq from 'hexlet-linq';

const cars = [
  { brand: 'bmw', model: 'm5', year: 2014 },
  { brand: 'bmw', model: 'm4', year: 2013 },
  { brand: 'kia' model: 'sorento', year: 2014},
  { brand: 'kia', model: 'rio', year: 2010 },
  { brand: 'kia', model: 'sportage', year: 2012 },
];
const coll = HexletLinq.from(cars);

Здесь мы формируем некоторую структуру — список машин. Каждая машина представлена некоторым объектом с определенным набором данных: бренд, модель и год выпуска.

После этого с помощью нашей библиотеки мы формируем эту коллекцию через HexletLinq.from(cars) — здесь происходит оборачивание или враппинг массива.

У этой коллекции есть большое количество методов, которые позволяют ее обрабатывать.

Например, мы хотим получить все модели машин, отсортированных в обратном порядке по году и принадлежащие бренду Kia:

const result = coll.orderBy(car => car.year, 'desc')
  .where(car => car.brand === 'kia')
  .select(car => car.model).toArray()

// [ 'sorento', 'sportage', 'rio' ]

Чтобы выполнить эту задачу, мы пишем код так, что он читается почти как английский язык. Мы говорим, что нужно отсортировать (order by) по году выпуска (year) в обратном порядке (desc). При этом нам нужно выбрать из этих машин только те, у которых бренд Kia (where brand kia).

Результат должен представлять не коллекцию машин, а коллекцию моделей. Поэтому достаем из машин их модели (select model).

Дальше у нас есть специальный метод toArray, который преобразует список к обычному массиву, и на выходе получаем [ 'sorento', 'sportage', 'rio' ]. Массив содержит все модели бренда Kia, которые отсортированы по году в обратном порядке.

Почему этот курс

Какие преимущества есть при изучении этого курса:

  • Будем писать настоящий канонический JS-код с помощью функции высших порядков. Это код, который в реальности пишут в продакшене
  • Будем обучаться через рефакторинг, а код будет эволюционировать. Значит, проект будет становиться лучше — меняться по урокам
  • Будем разрабатывать проект через тесты
  • Нужно будет думать и включаться в каждое упражнение, которое мы предоставляем

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff