- Мощность и гибкость: можно решить множество общих практических проблем, используя функциональные конструкции.
- Простота: большинство функциональных программ предоставляет небольшой набор ключевых слов и лаконичный синтаксис для выражения концепций.
- Подходит для параллельной обработки: благодаря неизменяемым значениям и операторам, функциональные программы подходят для асинхронной и параллельной обработки.
Функциональное программирование предполагает выполнение программ путем вычисления выражений - в отличие от императивного программирования, где программы состоят из операторов, меняющих глобальное состояние при выполнении.
В функциональном программировании, как правило, не используется изменяемое состояние. Все является математической функцией. Языки функционального программирования могут иметь объекты, но чаще всего они неизменяемые - или аргументы или возвращаемые функциями значения. Здесь не существует циклов for/next, поскольку они предполагают изменение состояния. Между тем, такая организация циклов выполняется с рекурсией, путём передачи функций как аргументов.
Функциональное программирование против императивного
Мы можем определить императивное программирование как написание кода, подробно описывающего инструкции, которым должно следовать ПО для выполнения конкретных вычислений. Обычно, такие инструкции выражаются в виде комбинации выполнения операторов, изменения состояний, циклов и условных переходов.Многие языки программирования поддерживают функциональный и императивный стили программирования, однако синтаксис и средства языка, как правило, оптимизированы лишь для одного из них. Кроме того, социальные факторы вроде стандартов кодирования подталкивают программиста выбрать один из стилей. Следовательно, языки программирования можно разделить на функциональные и императивные.
Почему функциональное программирование?
Несмотря на то, что можно разрабатывать параллельное, масштабируемое и асинхронное ПО без помощи функционального программирования, намного проще и безопасней использовать для этого соответствующий инструмент. Функциональное программирование обеспечивает поддержку мультиядерных систем, позволяет разрабатывать устойчивые параллельные алгоритмы, распараллеливать алгоритмы, требующие интенсивных вычислительных ресурсов и без труда использовать огромное количество платформ облачных вычислений.Кроме того, функциональное программирование - замечательная возможность расширить свои познания и усовершенствовать умения решать проблемы. Новые понятия, которые вы изучите, позволят взглянуть на проблемы под другим углом и стать более проницательным OO-программистом.
Я призываю всех, кто желает улучшить свои профессиональные навыки: выучите язык функционального программирования. Неплохой вариант - Haskell и OCaml, F# и Erlang. Они непростые, но это, наверняка, хороший признак. Определите трудные понятия и выясните, используют ли их остальные. Зачастую, чтобы преодолеть умственные препятствия, достаточно понять, для чего на самом деле предназначена неизвестная абстракция.
Будьте осторожны и не воспринимайте все слишком серьёзно. Как и во всем, что требует времени и усилий, здесь есть риск чрезмерного увлечения функциональным программированием. Если попадёте в такую когнитивную ловушку, считайте, что зря потратили силы. Забыть, сколько существует моделей вычислений - просто, и ещё проще забыть, сколько качественного и элегантного ПО было написано с их помощью.
Это тернистый путь, но, с другой стороны, вы вооружитесь дополнительными ключевыми понятиями и моделями. Вы будете уверенней себя чувствовать со сложным кодом и просто станете лучшим разработчиком.
Источник
Комментариев нет:
Отправить комментарий