Некоторые говорят, что эпоха объектно-ориентированного программирования (ООП) закончилась. Что бум, который он пережил в середине 90-х, далеко позади, и одна парадигма программирования уже здесь, чтобы занять свое место в качестве доминирующей силы, и этой парадигмой является функциональное программирование (ФП). Хотя этой точки зрения придерживается все большее число инженеров и разработчиков, я здесь, чтобы предложить точку зрения инженера-программиста, искренне заинтересованного в взвешивании плюсов и минусов функционального программирования, чтобы исследовать, как/почему я мог бы реализовать его в будущем. проекты.

Что такое функциональное программирование?

Функциональное программирование — это парадигма программирования, такая же, как ООП. Чтобы помочь нам понять, что подразумевается под «парадигмой», мы можем использовать следующую аналогию. Рассмотрите возможность общения с помощью устной речи и языка жестов. Это разные парадигмы общения, поскольку они полагаются на разные чувства для общения (звук для произносимого слова и зрение для языка жестов), но, в конце концов, они оба могут передавать идеи из головы одного человека другому. Итак, возвращаясь к парадигмам программирования, функциональное программирование может делать почти то же самое, что и ООП, только немного по-другому.

Чем функциональное программирование отличается от ООП?

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

Ладно, Прелюдия Не по пути. В чем преимущества ООП?

  • Удобочитаемость. Многие языки FP имеют функции, которые помогают улучшить удобочитаемость, например операторы F# Composition and Pipe. Это помогает нам лучше видеть поток данных в программе, что помогает нам выявлять ошибки и понимать новые основы кода. Самые популярные языки FP, F# и Haskell, также отформатированы с помощью пробелов, а не квадратных скобок (по крайней мере, не полностью), что также способствует удобочитаемости.
  • Сопоставление с образцом. Сопоставление с образцом — это, по сути, понимание списка на стероидах. Это позволяет нам преобразовывать ввод множеством различных способов, как правило, в меньшем количестве строк, чем в языке ООП. Если совпадение не найдено, мы переходим к следующему условию, пока все условия не будут исчерпаны, и языки FP заставят нас проверять все возможности! Это помогает нашему коду стать менее подверженным ошибкам. Подробнее смотрите здесь и здесь.
  • Меньше ошибок.Вы просто получаете меньше ошибок на языках FP! Это потому, что вы можете сделать незаконные состояния непредставимыми. Говоря человеческим языком, это все равно, что сказать, что вас не могут арестовать за продажу наркотиков в мире, где наркотиков не существует.
  • Мечтательный параллелизм.Из-за неизменного состояния мы получаем функции, которые являются потокобезопасными. Это означает, что мы можем гарантировать, что никакие два разных потока не смогут получить доступ к одним и тем же данным одновременно (состояние гонки). Неизменяемость означает, что функции не обмениваются информацией ни с какими другими частями кода, поэтому по определению функциональные языки потокобезопасны.

А что насчет минусов?

  • Это «сложно»:Это совершенно новая парадигма, о которой мы говорим здесь! Многие люди начинают свою карьеру программиста в парадигме ООП, и после этого может быть трудно перейти к функциональному программированию из-за того, что они полностью полагаются на математические термины, такие как «Монадическое связывание» и так далее. .
  • Масштабирование может быть сложным.Написать чистую функцию просто, но попытка соединить их все вместе в продукте производственного уровня может стать сложной задачей, если вы не знакомы.
  • Концепция чистоты и неизменности означает отсутствие побочных эффектов, поэтому FP плохо сочетается с IO:Чтобы хорошо играть, мы должны нарушить некоторые правила функциональное программирование! Угу. 😬

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

По причинам, перечисленным выше, я думаю, что вы должны по крайней мере рассмотреть функциональный язык программирования для своего следующего проекта, в конце концов «Чтобы попасть в топ распределения производительности, вы должны убежать от толпы» — Говард Маркс,основатель Oaktree Capital.

Узнайте больше и развивайте свои навыки, используя некоторые из ссылок ниже.