За прошедшие каникулы, когда все проекты замедлились, а моя жена проводила больше времени дома, чтобы помочь с младенцем, у меня наконец-то появилось время, чтобы сесть, чтобы выучить функциональный язык, что было моей целью в течение нескольких месяцев с опоздания. 2016. Попробовав несколько из них, таких как Haskell, Scala, Erlang и Elixir, я хотел язык, который ...

это просто

или не вводит много новых концепций и конструкций.

практично

у него должен быть только один четкий способ что-то сделать.

продуктивен

его следует использовать с самого начала, пока я учусь.

не универсальный

Я уже программирую на Python и Go, и мне хотелось бы выучить язык, на котором есть что-то особенное.

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

Это не учебник по коду. Если он когда-нибудь станет похож на брошюру, не стесняйтесь набирать меня на ступеньку ниже.

Это позволяет мне играть с моим ребенком

Я хотел выучить новый язык, но, будучи отцом с младенцем, мое время дома довольно фрагментировано (невозможно сделать что-либо дольше 30 минут за один присест, не расстроив мою девочку). Большинству функциональных языков или любого другого языка в этом отношении требуется огромное количество времени, чтобы изучить и понять его идею, прежде чем я смогу начать что-то с его помощью.

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

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

Это скучно

Возможно, у меня не так много опыта в программировании, но у меня были дни, когда я увлекался Ruby. Я уже писал код на Python, но в молодости я искал следующий Святой Грааль и занялся Ruby. Я поклялся, что покончил с Python и провел три месяца, взламывая Ruby, ничего не получая. У Ruby есть способ сделать другой язык скучным, особенно если вы литературовед. Однако это не прижилось. Когда я вскоре начал изучать Rails, я не был увлечен его магией и быстро вернулся на Python.

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

Его документы красивы

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

Попался: руководство и документ все еще довольно молоды, и им можно было бы добавить больше.

Имеет REPL и площадку.

Для меня это очень и очень важно. Я запускаю и отлаживаю сниппеты Go на его игровой площадке до ста раз в день. Наличие REPL и игровой площадки означает, что вы можете попробовать код и быстро запустить его, чтобы увидеть, что сломается, и продолжать повторять это, пока он не сработает.

Это снова заставляет меня ❤ интерфейс

Кхм, никто в этом не признается, но я все равно это делаю. Мне не всегда нравится работать с HTML и JavaScript. Я не ненавижу их, но ненавижу себя работать с ними. HTML слишком декларативен, и огромное количество и быстро заполняет мой когнитивный стек. Я в шутку сказал другим, что, по моему мнению, W3C следует просто отказаться от HTML и объявить Jade или расширить Markdown как новую де-факто новую модель DOM (очевидно, они не могут этого сделать).

Я не думаю, что могу упомянуть, почему мне не нравится работать с JavaScript, не начав потенциально языковой войны, что я часто нахожу совершенно спорным. Однако, поскольку Elm нацелен на создание реактивных веб-приложений, я расскажу о своем опыте работы с React и Angular.

Когда я впервые познакомился с React и Angular, я был немного разочарован. Я не эксперт ни в одном из них, и я не из тех, кто осмелится критиковать их, созданные Google и Facebook. Но для тех, кто уже противостоит HTML / Javascript, они кажутся хакерскими. Подход React JSX к компонуемым компонентам DOM не изобретает новый способ описания структуры DOM, а не просто расширение, позволяющее писать HTML вместе с Javascript, не превращая его в строку. И что ж, подход Angular к надорванным компонентам HTML выглядит моим надоедливым питомцем в шкуре загадочного существа.

Вяз функциональный, чистый и простой. Вот код Elm, который пишет браузеру привет, мир:

import Html exposing (text)
main =
 text “Hello, World!”

Среда выполнения Elm берет на себя грязную работу по рендерингу DOM и позволяет нам выразительно объявлять HTML как компонуемые функции:

import Html exposing (ul, text)
import Html.Attributes exposing (class)
ul [class "grocery-list"]
  [ li [] [text "Pamplemousse"]
  , li [] [text "Ananas"]
  , li [] [text "Jus d'orange"]
  ]

Функция ul принимает в качестве аргументов два элемента List, первый из которых содержит атрибуты HTML, а второй - все элементы внутри него. И это снова функции. Приведенный выше код приводит к следующему HTML:

<ul class="grocery-list">
  <li>Pamplemousse</li>
  <li>Ananas</li>
  <li>Jus d'orange</li>
</ul>

Чтобы выполнить итерацию по списку и отобразить элемент li для каждого члена, обычно в React это делается что-то вроде…

{this.props.menu.map((dish) =>
  <li>{dish}</li>
)}

В Elm это звучит как ...

List.map ( \dish -> li [][text dish] ) menu

Обратите внимание, что в Elm оператор map не является методом типа списка. Он принадлежит модулю Список. Это потому, что у Elm нет класса, и, что удивительно, у Go тоже.

Учит функциональному

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

Он разговаривает с Javascript

Elm можно скомпилировать в файл HTML или скомпилировать и встроить в другой файл HTML как код Javascript. Вы можете просто вставить его в DOM по вашему выбору и иметь соседний DOM, принадлежащий React. Эта совместимость действительно интересна, учитывая, что Javascript более зрелый и имеет гораздо больше полезных библиотек в вашем распоряжении.

Продуктивно, продуктивно, продуктивно

Как веб-инженер, я горжусь тем, что не знаю языка и инструментов. Один из первых вопросов, который я задаю себе, когда беру что-то новое, - как скоро я смогу работать с этим продуктивно. Речь идет не только о самой вещи, но и о ее экосистеме. Большое количество крошечных повторных выигрышей также очень важно; небольшое нарушение процесса раннего обучения в лучшем случае может демотивировать.

Наконец-то я нашел не только функциональный язык, которым я смогу, наконец, придерживаться в новом 2017 году, но и язык, который снова сделает мышление в HTML увлекательным. в Javascribut для React, Angular, Ember и всех фреймворков Javascript. Все это построено на простом языке, что делает обучение параллельно с его использованием плавным, без разочарований. Сдвинуть свое мышление к функциональному программированию может быть действительно ошеломляющим, и я осмелюсь сказать, что Elm дает мне необходимый мне мягкий переход.

Если бы вы могли выбрать новый язык или новый инструмент для изучения в 2017 году, что бы это было и почему? Оставьте отзыв и хороший ❤, прежде чем отправиться в путь.