Шесть месяцев назад мы в Vernacular.ai решили, что перейдем с React.js (с Redux и Typescript) на Elm (Восхитительный язык для надежных веб-приложений). В этой статье мы попытаемся обобщить наш опыт на данный момент, который будет состоять из некоторых проблем, с которыми мы столкнулись, решений, которые мы придумали, и является ли Elm хорошей альтернативой Javascript.

Введение

Elm - это строго типизированный язык, который использует статическую типизацию, обеспечивает неизменяемость и компилируется до оптимизированного Javascript. Elm - это чисто функциональный реактивный язык.

Вяз Архитектура

Архитектура состоит из трех частей:

Модель: по сути, состояние вашего приложения.

Обновление: способ обновить свое состояние.

Просмотр: способ увидеть ваш HTML-контент со значениями состояния.

Если вы знакомы с Redux, то вы уже это знаете, поскольку архитектура ELM повлияла на redux.

Наш опыт

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

  1. Https://medium.com/@rgoomar/why-i-think-elm-is-the-future-of-front-end-development-21e9b091fa05
  2. Https://elm-lang.org/

Итак, для начала, если вы работали с Javascript и любыми фреймворками, основанными на нем, вы, вероятно, знаете термин «Усталость от Javascript», поскольку существует множество библиотек, из которых вы можете выбрать, какая из них работает для вас. быть проблемой. С React вам может потребоваться несколько библиотек для настройки полностью реализованного веб-приложения, redux, response-router, Http-библиотека (например, Axios), машинописный текст, если вам нужны типы ... - несколько примеров.

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

Компилятор

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

Кроме того, чтобы не оправдывать ваши надежды, ходят слухи, что компилятор Elm сможет компилировать в Web Assembly, что может изменить правила игры, но опять же, это может занять некоторое время, годы. .

Отладка

Это намного приятнее по сравнению с Javascript, где вы либо настраиваете точки отладки, запуская свое приложение и выполняя его в браузере, либо через console.logs, тогда как компилятор Elm указывает на значительные вопросы.

Вызовы

Переход на новый язык может быть немного сложным, и да, поскольку это язык программирования FP, кривая обучения может быть немного крутой. Самая большая проблема, с которой разработчик может столкнуться с Elm, - это ограниченная поддержка его библиотек / пакетов по сравнению с экосистемой Javascript. В таких случаях вам, возможно, придется полагаться на Javascript, например, когда вам нужно использовать библиотеку, а альтернативы в Elm нет.

Есть несколько способов сделать это:

  1. Передача значений при загрузке приложения Elm. (Флаги)
  2. Использование сообщений для общения с Javascript и приложением Elm с помощью Портов.
  3. Наконец, с Custom Elements.

Работая с тремя вышеупомянутыми, мы осознали, что настраиваемые элементы являются самым мощным активом, и да, вы полностью полагаетесь на Javascript. Таким образом, полное приложение Elm может быть не полностью возможным.

В зависимости от вашего приложения вам может потребоваться доступ к самому элементу dom, который снова не поддерживается Elm.

Что касается стиля, вы зависите от традиционного стиля на основе классов CSS и связываете его с вашим файлом HTML или полагаетесь на встроенные стили.

Придирчивый

Давайте начнем с очевидного: Elm все еще находится в стадии разработки, и последним крупным обновлением было критическое изменение (0,18 - ›0,19, это привело к некоторой путанице, когда мы впервые начали работать с Elm).

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

Кроме того, чтение ответа API, в отличие от Javascript, где вы можете легко читать объекты JSON (JavaScript Object Notation, хотя бы раз в названии). Вам нужно явно написать для него парсеры, что в конечном итоге окупается, особенно если вы пользуетесь встроенным Maybe Type, но это, безусловно, может немного раздражать, особенно если объект большие или вложенные, вам часто может потребоваться написать несколько синтаксических анализаторов для работы с такими случаями.

Вывод

Причина, по которой приведенный выше раздел был назван Nitpicking, потому что, на мой взгляд, это небольшая цена, которую мы платим за стабильное веб-приложение, и, конечно, вы всегда можете добиться этого с помощью Javascript (и всех его фреймворков / библиотек), во всей красе Javascript - это один из самых уникальных языков, но у него есть немало проблем, мы все видели ошибку:

Неопределенный - это не функция.

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

Разработчики Elm утверждают:

Нет исключения времени выполнения

но это не совсем так; вы все равно можете разделить число на 0 или передать неверные типы при синтаксическом анализе структуры JSON. Как и в любом другом языке программирования, есть крайние случаи, с которыми вам нужно справиться.

Итак, стоит ли вам использовать Elm, мы не можем сказать, что для вас это все-таки ваше приложение, но является ли это хорошей альтернативой Javascript? Абсолютно.

Если вы хотите изучить FP и вас пугают Haskell, PureScript и т. Д., Elm может стать началом.

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

Если вас интересуют эксперименты с новыми технологиями или функциональным программированием, приходите к нам в разговоре с нами. Мы нанимаем. Напишите нам письмо по адресу [email protected].