Декларативный код в JavaScript | OTUS
🔥 Начинаем BLACK FRIDAY!
Максимальная скидка -25% на всё. Успейте начать обучение по самой выгодной цене.
Выбрать курс

Курсы

Программирование
iOS Developer. Basic
-25%
Python Developer. Professional
-25%
Разработчик на Spring Framework
-25%
Golang Developer. Professional
-25%
Python Developer. Basic
-25%
iOS Developer. Professional
-25%
Highload Architect
-25%
JavaScript Developer. Basic
-25%
Kotlin Backend Developer
-25%
JavaScript Developer. Professional
-25%
Android Developer. Basic
-25%
Unity Game Developer. Basic
-25%
Разработчик C#
-25%
Программист С Web-разработчик на Python Алгоритмы и структуры данных Framework Laravel PostgreSQL Reverse-Engineering. Professional CI/CD Vue.js разработчик VOIP инженер Программист 1С Flutter Mobile Developer Супер - интенсив по Kubernetes Symfony Framework Advanced Fullstack JavaScript developer Супер-интенсив "Azure для разработчиков"
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-25%
DevOps практики и инструменты
-25%
Архитектор сетей
-25%
Инфраструктурная платформа на основе Kubernetes
-25%
Супер-интенсив «IaC Ansible»
-16%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-25%
Administrator Linux. Professional MS SQL Server Developer Безопасность Linux PostgreSQL Reverse-Engineering. Professional CI/CD VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Administrator Linux.Basic Супер-интенсив «ELK»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Декларативный код в JavaScript

Императивный стиль программирования описывает набор шагов, которые нужно выполнить для достижения желаемого результата. Что касается декларативного стиля, то он описывает не конкретные инструкции, а желаемый результат. Примеры часто применяемых декларативных языков — HTML, SQL и даже JSX в React.

Допустим, базе данных не сообщают точные шаги получения данных. Вместо этого применяют SQL для описания того, что надо получить из базы.

SELECT * FROM Users WHERE Country='USA';

Примерно то же самое можно представить и в императивном JavaScript:

let user = null;

for (const u of users) {
  if (u.country === 'USA') {
    user = u;
    break;
  }
}

А вот, как это выглядит в декларативном JavaScript, если применять экспериментальный оператор конвейера:

import { filter, first } from 'lodash/fp';

const filterByCountry =
  country => filter( user => user.country === country );

const user =
  users
  |> filterByCountry('USA')
  |> first;

Предпочтение выражений над операторами

Если наша цель — декларативный код, то выражения должны быть предпочтительнее, чем операторы. Выражения возвращают значение всегда, а операторы применяются для выполнения действий, не возвращая никаких результатов. Это ещё называют побочными эффектами функционального программирования.

Как известно, чаще всего мы используем следующие операторы: for, switch, if, return, while.

Посмотрим на простой пример:

const calculateStuff = input => {
  if (input.x) {
    return superCalculator(input.x); 
  }

  return dumbCalculator(input.y);
};

Этот же код мы можем переписать в виде тройного выражения, которое является декларативным:

const calculateStuff = input => {
  return input.x
          ? superCalculator(input.x)
          : dumbCalculator(input.y);
};

Если же return — это единственный оператор в лямбда-функции, то язык программирования JavaScript даёт возможность также и полностью избавиться от лямбда-выражения:

const calculateStuff = input =>
  input.x ? superCalculator(input.x) : dumbCalculator(input.y);

При этом тело функции мы можем сократить с 5 строк кода до 2-х.

Есть и другие недостатки применения операторов. К примеру, они вызывают побочные эффекты и изменения, свойственные недетерминизму, в результате чего код делается менее надёжным и читаемым. Также операторы небезопасны и для переупорядочивания, т. к. они полагаются на порядок, в котором были использованы. Кроме того, операторы (в том числе и циклы) трудно распараллелить, т. к. они меняют состояние за пределами своей области видимости. В итоге, при работе с операторами следует понимать, что потребуются дополнительные умственные затраты, что связано с повышенной сложностью.

Что касается выражений, то их можно безопасно переупорядочивать и не вызывать побочных эффектов, также их можно без труда распараллелить.

Декларативное программирование потребует усилий

Декларативное программирование нельзя изучить за одну ночь. Особенно, если учесть, что многие обучались императивному программированию. Декларативное программирование — это, прежде всего, дисциплина и умение мыслить совершенно по-новому. Неплохой первый шаг в декларативном программировании — научиться создавать код без изменяемого состояния, а также не используя ключевое слово let.

Но факт остаётся фактом: если вы сами попробуете декларативное программирование, вы удивитесь тому, насколько элегантным станет код.

Осталось посмотреть на предлагаемую конфигурация ESLint:

rules:
  fp/no-let: warn
  fp/no-loops: warn
  fp/no-mutating-assign: warn
  fp/no-mutating-methods: warn
  fp/no-mutation: warn
  fp/no-delete: warn

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
🎁 Максимальная скидка!
Черная пятница уже в OTUS! Скидка -25% на всё!