Elm может быть как заменой JavaScript, так и дополнением к нему на вашем проекте. Elm код сохраняется в файлах с расширением .elm, компилятор языка прогоняет их через себя и на выходе выдает обычные .js файлы, которые могут быть выполнены браузером. При этом CSS стили будут работать с Elm так же, как они работают с JavaScript.

Elm файлы компилируются в обычные .js файлы

Соотношение Elm и JavaScript кода может существенно зависеть от конкретного проекта. В одном случае имеет смысл большую часть реализовать на JavaScript, а Elm оставить бизнес логику и рендеринг; в другом – наоборот все написать на Elm, и только для специфических задач использовать JavaScript, экосистема которого в разы больше. Универсального ответа нет.

Что выгодно отличает Elm от JavaScript, так это удобство сопровождения кода (maintainability). JavaScript код, как известно, сильно подвержен runtime-исключениям. Elm же имеет репутацию языка, который после компиляции проекта избавляет разработчика от этой проблемы. Практически во всех статьях и выступлениях на конференциях упоминается данное преимущество в качестве big selling point. Отсутствие runtime-исключений в скомпилированном Elm коде возможно за счет того, что сам язык спроектирован вокруг простых примитивов, таких как выражения (expressions), иммутабельные значения (immutable values) и управляемые эффекты (managed effects). Перечисленное позволяет компилятору определять скрытые ошибки на этапе "сканирования" кода. Ошибки этапа компиляции в Elm известны своей ясностью и помогают быстро решать найденные проблемы.

Сообщения об ошибках в Elm должны быть примером для любого языка – Джон Кармак

Таким образом, благодаря дружественному компилятору Elm код легче рефакторить и отлаживать. Особенно хорошо это ощущается когда кодовая база растет. Однако входный порог в Elm может быть выше, чем в JavaScript. Но его стоит рассматривать как инвестицию в активную разработку продукта.

Что делать когда у вас уже есть проект в разработке, написанный на JavaScript / TypeScript или др. языке, компилируемом в JavaScript, но вам хочется попробовать Elm без переписывания проекта? В этом случае подойдет итерационный подход, применяемый в том числе в микросервисной архитектуре. Заключается он в том, чтобы взять маленький кусочек функциональности (микросервис) и реализовать его на Elm. Если по прошествию некоторого времени возникает понимание, что язык не подходит под ваши задачи, то от этого маленького кусочка можно легко избавиться откатив изменения к предыдущей версии.

Язык Elm проще JavaScript и намного его моложе. Из этого следует, что экосистема имеет меньше готовых решений для конкретных задач. Elm может взаимодействовать с JavaScript определенным образом, но иногда это требует усилий по причине столь разного дизайна языков. К слову, реализация взаимодействия с JavaScript является одной из краеугольных тем, наиболее часто обсуждаемых в сообществе.

Решая стоит ли использовать Elm в разработке вашего продукта, стоит обратить внимание на то, для каких проектов больше всего подходит данный язык. Команда Elm выделяет его преимущества для следующих типов задач:

  • больших веб-приложений со сложной бизнес-логикой;
  • конкретной функциональности, которая может меняться и должна быть поддерживаемой в течение длительного времени;
  • проектов, на которых большая часть кода написана командой без использования сторонних библиотек и фреймворков.

Меньше всего Elm подойдет для:

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

💥 P.S. IBM выпустили приложение на Elm

***

В следующих статьях серии я попытаюсь описать более детально все перечисленные преимущества и недостатки языка Elm.

📖 Читать дальше: Выражения | Предисловие | 📚 Назад к оглавлению