React: лекарство, открывающее путь к функциональному программированию

Просто некоторые случайные мысли о функциональном программировании и влиянии React на отдельных инженеров (начиная с меня самого).

tl;dr:

React открывает двери к шаблонам функционального программирования, чего раньше не было для разработчиков JavaScript. В результате мы получаем возможность более тщательно изучать функциональные шаблоны, поскольку они кажутся более доступными.

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

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

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

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

(data) -> ui 

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

Причина, по которой я поднимаю это, заключается в том, что это основная задача React: класс, созданный в React, должен принимать данные и выводить пользовательский интерфейс. У него не должно быть побочных эффектов.

React раскрывает самую основную суть функционального программирования. Он предоставляет абстракции, такие как компоненты, которые в основном (чистые) функции, и уводит вас от императивного прикосновения к DOM. источник

Дело в том, что React - это создание составных идемпотентных функций. Это задействует несколько ключевых принципов функционального программирования: возможность компоновки и чистые функции.

Это оставляет нас здесь:

  1. ReactJS - это лекарство, открывающее путь к функциональному программированию, потому что он использует и обеспечивает соблюдение основных концепций функционального программирования при его использовании для борьбы с изменением состояния с течением времени в современных веб-приложениях.
  2. Знакомя инженеров / разработчиков JavaScript с концепциями функционального программирования, ReactJS открывает дверь для более глубокого изучения функциональных шаблонов.

Недавно открывшаяся дверь в функциональное программирование может привести современного разработчика JavaScript в разные стороны:

Это может быть похоже на падение в кроличью нору в Стране чудес, только для того, чтобы обнаружить, что она все глубже и глубже, и у человека кружится голова.

Монады, аппликативы, функторы! Чего это все ?!?

Это также может показаться следованием очень простому рецепту (например, приготовление простого сиропа для коктейля… 1 часть воды, 1 часть чистого / элегантного кода).

Пара замечательных библиотек, которые могут открыть вам двери, - это RamdaJS и FP-Lodash (функциональная версия всеми любимой библиотеки Lodash).

Еще одна важная вещь, которая начинает открываться и становиться понятной, - это RxJS. RxJS - это библиотека, созданная на основе функционального реактивного программирования. Самая простая разбивка, которую я могу сделать, это: программирование с использованием потоков событий.

Бен Леш сказал: «RxJS - это Lodash для асинхронного программирования». Я думаю, что это довольно хорошее резюме того, на что способен RxJS.

Дело в том, что это еще одна область функционального программирования, которая возникает после того, как эта дверь была открыта.

Другие источники:

  1. Redux Observable
  2. RxJS
  3. Почему Рамда?