Изучите основы функционального программирования

Как разработчики, теперь мы должны создавать, тестировать, поддерживать и масштабировать сложные приложения, которые ежедневно затрагивают миллионы людей. Для этого мы должны создавать хорошо структурированный код, который легко понять, написать, отладить, повторно использовать и поддерживать.
Это может быть особенно пугающим для начинающих, потому что мы только начинаем осваивать написание кода, который действительно работает, не говоря уже о написании кода, который “легко понять, написать, отладить, повторно использовать и поддерживать.”
Почему каждый разработчик должен выучить функциональное программирование
Выучив функциональное программирование ты сможешь научиться писать чистый, простой в обслуживании и масштабируемый код.
Даже если мы не используем функциональный язык программирования на работе или в своих проектах, знание основ функционального программирования вооружит нас мощным набором инструментов для написания лучшего кода.
Что такое функциональное программирование?
Итак. Что такое "функциональное программирование"?
Функциональное программирование - это не фреймворк или инструмент, а способ написания кода. В функциональном программировании мы уделяем большое внимание написанию кода, используя функции как "строительные блоки".
Ваша программа определяется в условиях одной основной функции. Эта главная функция определяется в условиях других функций, которые, в свою очередь, определяются в условиях еще большего количества функций - до тех пор, пока на нижнем уровне функции не станут просто примитивами языка, такими как "число" или «строка".

Если ты читаешь это, думая: "Хм, но подожди? Разве не каждый язык использует функции для написания кода?" тогда хорошо. Это значит, что вы обращаете внимание.
Вы правы - у каждого языка программирования есть функции. Но функциональное программирование выводит его на совершенно иной уровень.
Чтобы понять, что я имею в виду, давайте перемотаем и начнем с основ.
В каждой программе есть две вещи:
1) Поведение (то, что делает программа).
2) Данные
Когда мы изучаем парадигму программирования - например функциональное программирование - часто полезно рассмотреть, как парадигма подходит к поведению и данным соответственно.
Поведение, в функциональном программировании, рассматривается исключительно с использованием функций в функциональном программировании. Функции - это "самодостаточные" куски кода, выполняющие конкретную задачу. Она определяет связь между набором возможных входов и набором возможных выходов - они обычно принимают данные, обрабатывают их и возвращают результат. После записи, функция может использоваться снова и снова.
Данные, в функциональном программировании неизменны, и это значит, что их нельзя изменить. Вместо того, чтобы изменять данные, которые они принимают, функции функционального программирования принимают данные как входные и производят новые значения как выходные. Всегда.
Функции и неизменяемые данные - это единственные две вещи, с которыми вам необходимо иметь дело в функциональном программировании. Чтобы сделать это еще проще, к функциям относятся не иначе, чем к данным.
Другими словами, функции в функциональном программировании могут передаваться так же легко, как и данные. На них можно ссылаться из констант и переменных, передавать их как параметры другим функциям и возвращать их как результаты других функций.
Это самая важная вещь для понимания при подходе к функциональному программированию.
Рассматривая функции как ничто иное, как кусок данных, и используя только неизменяемые данные, мы получаем гораздо больше свободы в отношении того, как мы можем использовать функции.
А именно, это позволяет нам создавать небольшие независимые функции, которые можно повторно использовать и объединять вместе для построения все более сложной логики. Мы можем разбить любую сложную проблему на более мелкие подзадачи, решать их с помощью функций и, наконец, объединять их вместе для решения более крупной проблемы.
Учитывая постоянно растущую сложность программных приложений, подобный "конструктивно-блочный" подход имеет огромное значение для сохранения простоты, модульности и понятности программ. Именно поэтому разработчики стремятся сделать свои функции как можно более универсальными, чтобы их можно было комбинировать для решения больших, сложных задач и повторно использовать для ускорения разработки последующих программ.

В конечном счете, причина, по которой функции являются настолько мощными в функциональном программировании, заключается в том, что они следуют определенным основным принципам:
1) Функции используют неизменяемые данные
2) Функции гарантируют ссылочную прозрачность
3) Функции являются первоклассными сущностями
PS: Чтобы понять функциональное программирование, вам сначала нужно будет разобраться в алгоритмах. А как лучше всего понять какую-либо тему? Правильно, через книги. Поэтому я хочу вам порекомендовать эти книги по алгоритмам. Благодаря ним вы точно сможете изучить алгоритмы!