Что мне нравится в Elm (и то, что вы тоже должны)
Не секрет, что я большой поклонник Elm. Вот что делает его таким замечательным.
Практически полное отсутствие ошибок во время выполнения
В JavaScript TypeError: b is null
— довольно обычная ошибка, которую трудно исправить. Наличие минимизированной сборки без исходной карты также не очень помогает. В некоторых случаях вы смотрите на дни потраченного впустую времени на поиск решения.
Но Elm избегает этого, быстро терпя неудачу. Другими словами, если что-то сломалось, вам не нужно ждать отзывов пользователей, чтобы узнать об этом. Если он успешно скомпилируется, то его можно смело отправлять в продакшн.
Легко учить
Если вы любите Redux так же, как и я, вам будет приятно узнать, что он был вдохновлен архитектурой Elm (TEA). Понять, как изменяется состояние и как изменения проходят через «компоненты», легко и просто.
Кроме того, в наши дни функциональность является большой тенденцией, и вы, возможно, уже понимаете многие концепции, из которых состоит Elm.
А для любых пробелов в знаниях Руководство по Elm — это фантастический ресурс для изучения таких концепций Elm, как декодирование/кодирование JSON, HTTP-запросы и многое другое.
Ресурсы:
- Ричард — столп сообщества ELM https://frontendmasters.com/courses/intro-elm/
- Руководства/Статьи: https://github.com/isRuslan/awesome-elm
- Игры, встроенные в ELM: https://github.com/rofrol/elm-games
Функциональный
Попытка написать функциональный код на JavaScript может оказаться сложной задачей. Вы не можете доверять const
в отношении неизменности, поэтому написание функций без побочных эффектов требует некоторого терпения.
Вот пример функции с побочным эффектом:
function hello(age) { if(age > 21) { return "hello, " + this.state.name; } else { return "Yo, " + this.state.nickname; } }
В Elm все значения можно определить только один раз (что делает их неизменяемыми). Вот что происходит, когда вы пытаетесь скомпилировать:
У Elm есть побочные эффекты (взаимодействие с пользователем, отсчет времени, HTTP-запрос/ответ и т. д.), но он обрабатывает их за вас во время выполнения, прежде чем передать результат логике приложения. Вы можете прочитать это, чтобы узнать больше.
Стройте быстро и стройте мало
Я провел тест для сборки, используя приложение реального мира в React, а также в Elm. Результаты довольно убедительны:
Реакция 16.3.0:
- Получение зависимостей: 20 с
- Создание производственной сборки: 7,5 с.
- Размер производственной сборки: 296 КБ
ELM 0.19:
- Получение зависимостей: 12 с
- Сборка производственной сборки: 2,4 с.
- Размер производственной сборки: 92 КБ
Бенчмаркинг VDOM с использованием js-framework-benchmark[1]
Значимые ошибки
Когда приходит время компилировать, Elm предоставляет приятные, значимые ошибки, которые облегчают исправление вашего кода.
Посмотрите на эту ошибку JavaScript для сравнения (одна из самых распространенных ошибок):
Uncaught TypeError: Cannot read property
Включенный менеджер пакетов и компилятор
Хотите писать современный Javascript? Вам нужно скачать NodeJS, NPM и упаковщик. Затем у вас, скорее всего, будет несколько МБ узловых модулей (create-react-app загружает 293 МБ узловых модулей). Наконец, вам придется потратить несколько часов на выбор библиотеки AJAX и среды тестирования.
Но Elm поставляется в комплекте с менеджером пакетов и компилятором. Модули кэшируются и повторно используются в проектах, AJAX включен в ядро, и существует только одна среда тестирования.
В целом, такой комплексный подход позволяет намного проще сосредоточиться исключительно на том, что действительно важно: на разработке приложения.
Бесстрашный рефакторинг
Попытка реорганизовать кодовую базу JavaScript может превратиться в кошмар. Единственный способ быть уверенным, что код не выдаст ошибку, — протестировать все функции, связанные с этим изменением кода.
(Если у вас есть спагетти-код, вас может ждать долгая ночь.)
С Elm компилятор выдаст вам ошибки красного цвета и советы по их исправлению, что упростит перекомпиляцию. Повторив этот шаг несколько раз, вы увидите зеленую надпись «Успех! Скомпилирован 1 модуль» — что означает «Ваш рефакторинг выполнен, и в продакшене не будет закрадываться никаких ошибок».
Не уверены, что в ELM можно делать все, что нужно? Попробуйте порты и флаги
Если вам нужно использовать JS SDK или API браузера, вам может помочь система ELM interop
. Вы можете отправлять данные в Elm во время загрузки с помощью flags
и публиковать данные в ELM через ports
.
Порты просты, они похожи на Pub/Sub как в Elm, так и в JavaScript (Elm может отправлять и получать данные из JavaScript). Вот пример использования ports
С ним также интересно программировать
С Elm очень весело разрабатывать, потому что вы можете сосредоточиться на том, что действительно важно, создавая что-то, что работает намного быстрее, чем с любой другой платформой JS.
Вы также сталкиваетесь с интересными проблемами, такими как представление состояния вашего приложения, преобразование ваших данных через конвейеры или убедитесь, что у вас нет невозможного состояния.
Закрытие
Elm — это весело, интуитивно понятно, быстро и эффективно. Я был в восторге от его использования, и я действительно рекомендую вам подумать о том, чтобы попробовать его самостоятельно.
[1]