День двести пятьдесят четвёртый. #Оффтоп #97Вещей

97 Вещей, Которые Должен Знать Каждый Программист

2. Применяйте принципы функционального программирования

Не так давно в сообществе программистов стал возрождаться интерес к функциональному программированию. Одна из причин – то, что

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

Чистые функции - очень желательное свойство кода. Оно подразумевает, что функции дают одинаковые результаты при одинаковых входных данных, независимо от того, где и когда они вызываются. Таким образом, выполнение функции мало зависит (а в идеале, совсем не зависит) от изменяемого состояния приложения.

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

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

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

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

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



Источник: https://www.oreilly.com/library/view/97-things-every/9780596809515/