Функциональное программирование - Введение
Языки функционального программирования специально разработаны для обработки символьных вычислений и приложений обработки списков. Функциональное программирование основано на математических функциях. Некоторые из популярных языков функционального программирования включают: Lisp, Python, Erlang, Haskell, Clojure и т. Д.
Функциональные языки программирования делятся на две группы:
Pure Functional Languages- Эти типы функциональных языков поддерживают только функциональные парадигмы. Например - Haskell.
Impure Functional Languages- Эти типы функциональных языков поддерживают функциональные парадигмы и императивный стиль программирования. Например - LISP.
Функциональное программирование - Характеристики
Наиболее важные характеристики функционального программирования следующие:
Языки функционального программирования разработаны на основе концепции математических функций, которые используют условные выражения и рекурсию для выполнения вычислений.
Функциональное программирование поддерживает higher-order functions и lazy evaluation функции.
Функциональные языки программирования не поддерживают элементы управления потоком, такие как операторы цикла и условные операторы, такие как If-Else и Switch Statements. Они напрямую используют функции и функциональные вызовы.
Как и ООП, языки функционального программирования поддерживают популярные концепции, такие как абстракция, инкапсуляция, наследование и полиморфизм.
Функциональное программирование - преимущества
Функциональное программирование предлагает следующие преимущества -
Bugs-Free Code - Функциональное программирование не поддерживает state, поэтому побочных эффектов нет, и мы можем писать безошибочные коды.
Efficient Parallel Programming- В функциональных языках программирования НЕТ изменяемого состояния, поэтому нет проблем с изменением состояния. Можно запрограммировать «Функции» на параллельную работу как «инструкции». Такие коды поддерживают возможность повторного использования и тестирования.
Efficiency- Функциональные программы состоят из независимых модулей, которые могут выполняться одновременно. В результате такие программы более эффективны.
Supports Nested Functions - Функциональное программирование поддерживает вложенные функции.
Lazy Evaluation - Функциональное программирование поддерживает ленивые функциональные конструкции, такие как ленивые списки, ленивые карты и т. Д.
С другой стороны, функциональное программирование требует большого объема памяти. Поскольку у него нет состояния, вам нужно каждый раз создавать новые объекты для выполнения действий.
Функциональное программирование используется в ситуациях, когда нам приходится выполнять множество различных операций с одним и тем же набором данных.
Lisp используется для приложений искусственного интеллекта, таких как машинное обучение, языковая обработка, моделирование речи и зрения и т. Д.
Встроенные интерпретаторы Lisp добавляют возможность программирования некоторым системам, таким как Emacs.
Функциональное программирование против объектно-ориентированного программирования
В следующей таблице показаны основные различия между функциональным программированием и объектно-ориентированным программированием.
Функциональное программирование | ООП |
---|---|
Использует неизменяемые данные. | Использует изменяемые данные. |
Следует модели декларативного программирования. | Следует модели императивного программирования. |
В центре внимания: «Что вы делаете» | Акцент делается на «Как дела» |
Поддерживает параллельное программирование | Не подходит для параллельного программирования |
Его функции не имеют побочных эффектов | Его методы могут вызвать серьезные побочные эффекты. |
Управление потоком выполняется с использованием вызовов функций и вызовов функций с рекурсией | Управление потоком осуществляется с помощью циклов и условных операторов. |
Он использует концепцию «рекурсии» для итерации данных коллекции. | Он использует концепцию «цикла» для итерации данных сбора. Например: для каждого цикла в Java |
Порядок выполнения заявлений не так важен. | Порядок выполнения заявлений очень важен. |
Поддерживает как «абстракцию над данными», так и «абстракцию над поведением». | Поддерживает только «Абстракцию над данными». |
Эффективность программного кода
Эффективность программного кода прямо пропорциональна алгоритмической эффективности и скорости выполнения. Хорошая эффективность обеспечивает более высокую производительность.
Факторы, влияющие на эффективность программы, включают:
- Скорость машины
- Скорость компилятора
- Операционная система
- Выбор правильного языка программирования
- Способ данных в программе организован
- Алгоритм, использованный для решения проблемы
Эффективность языка программирования можно повысить, выполнив следующие задачи:
Удалив ненужный код или код, который переходит в избыточную обработку.
За счет использования оптимальной памяти и энергонезависимой памяти
За счет использования компонентов многократного использования, где это применимо.
Используя обработку ошибок и исключений на всех уровнях программы.
Создавая программный код, обеспечивающий целостность и согласованность данных.
Путем разработки программного кода, соответствующего логике проектирования и последовательности операций.
Эффективный программный код может максимально сократить потребление ресурсов и время выполнения с минимальным риском для операционной среды.