Все Лекции
.pdf
Функциональное программирование
•Языки программирования LISP, Clojure, Haskell и т.п.
•Язык программирования Scala
•Функциональный стиль в C++, Python, Java
8
Функциональное программирование. Основные понятия
•Функциональное программирование — это стиль программирования, в котором особое значение придается использованию функций и неизменяемых данных
9
Функциональное программирование. Основные понятия
В функциональном программировании применяются такие основные подходы:
•функции как основные используемые конструкции;
•выражения вместо инструкций;
•неизменяемые значения имеют приоритет перед переменными;
•декларативное программирование имеет приоритет перед императивным программированием.
10
Функциональное программирование – это тренд!
Практически любой современный язык программирования поддерживает по крайней мере некоторые «функциональные» свойства:
•C++: лямбда-выражения, функция как тип данных, функции без побочных эффектов, определение типа (type inference).
•C#: функция как тип данных (“делегаты”), функции-литералы
(function literals), определение типа (type inference).
•Java 8: лямбда-выражения.
•Swift: функция как значение, замыкания и локальные функции.
•Rust: функция как переменная, как аргумент, как тип возвращаемого значения, анонимные функции.
11
Функциональное программирование. Основные понятия
•Неизменяемые значения (Immutable objects)
•Функции как объекты (Functions as
“first-class entities”)
•Функции и операции
•Функции-литералы
•Замыкания (closures)
12
Функциональное программирование. Основные понятия
•Неизменяемость
— означает, что значение нельзя изменить на месте.
•Но переменные можно изменить на месте.
13
Функциональное программирование. Основные понятия
•Функция — это конструкция, которая возвращает выходные данные при наличии входных данных.
•Это самое простое (и важное) понятие в функциональном программировании.
•Фактически она сопоставляет элемент из
одного набора с другим набором.
add = lambda x,y: x+y
Примеры вызова:
>>>add(2,3)
5
>>> add(‘Hello’, ‘World’) ‘HelloWorld’
14
Функциональное программирование. Основные понятия
•Выражение — это конструкция в коде, которая возвращает значение. Выражение можно легко заменить вызовом функции.
•Чистота — это свойство функции, которое означает, что возвращаемое значение всегда будет одним и тем же при использовании одних и тех же аргументов, а ее выполнение не имеет побочных эффектов. Чистая функция полностью зависит от своих аргументов.
•Ссылочная прозрачность — это свойство выражений,
которое означает, что их можно заменить выходными данными без изменения поведения программы.
15
Функциональное программирование. Основные понятия
Свойства функционального стиля программирования:
•Функции являются объектами первого класса (First Class Object). С функциями можно работать, также как и с данными: передавать их в качестве аргументов другим функциям, присваивать переменным и т.п.
•В функциональных языках не используются переменные (как именованные ячейки памяти), т.к. там нет состояний, а т.к. нет переменных, то и нет операции присваивания, как это понимается в императивном программировании.
•Основным подходом для управления вычислениями является рекурсия, а не циклы и условные операторы.
16
Функциональное программирование. Основные понятия
Свойства функционального стиля программирования:
•Используются функции высшего порядка (High Order Functions), т.е. функции, которые могут в качестве аргументов принимать другие функции.
•Функции являются “чистыми” (Pure Functions) – т.е. не имеют побочных эффектов.
•Акцент на том, что должно быть вычислено, а не на том, как вычислять.
17
