Добавил:
study@slavapmk.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Все Лекции

.pdf
Скачиваний:
0
Добавлен:
12.05.2026
Размер:
15.98 Mб
Скачать

Функциональное программирование. Неизменяемые значения

Значения не изменяются (Data are immutable):

Любая операция в программе отображает входные значения на выходные, но не изменяет данные «по месту».

Иными словами, функции не вызывают побочных эффектов.

Функции взаимодействуют со своим окружением, принимая аргументы и возвращая результат.

Для любых входных данных вызов функции может быть заменен на ее результат без изменения семантики программы.

18

Функциональное программирование. Неизменяемые значения

Обычная(mutable) переменная

Короткая форма объявления. Тип x не задается явно, а выводится (deduced, inferenced) из типа инициализатора.

Неизменяемая(Immutable) переменная

Короткая форма объявления. Тип x не задается явно, а выводится(deduced, inferenced)из типа инициализатора.

19

Функциональное программирование. Неизменяемые значения

Преимущества:

Программы легко тестируются.

Программы (потенциально) верифицируемы.

Программы могут быть распараллелены.

Недостатки:

Повышенное потребление памяти.

20

Функциональное программирование. Императивный и функциональный подходы

def gcd (x: Long, y: Long) : Long =

{

var a= x var b= y

while (a!= 0) {

val temp= a a= b % a b= temp}

b

}

Императивный подход: while-цикл с var.

While-циклы поддерживаются, но не рекомендуются: они, как правило, используются вместе с var.

21

Функциональное программирование. Императивный и функциональный подходы

def gcd (x:Long, y:Long) : Long = if (y==0) x else gcd (y, x%y)

Функциональный подход: рекурсия.

Нет присваиваний и mutable-переменных.

if возвращает значение. Это значение становится результатом вызова функции (не нужен return).

Тело функции состоит из единственного if, можно опустить фигурные скобки.

22

Функциональное программирование. Функции и операции

FunName (argument1,argument2) – Общая форма записи функции.

Какова семантика вызова функции?

Запускается алгоритм, заданный FunName, который вычисляет значение результата для переданных аргументов.

operand1 OpSign operand2 – Форма записи операции

Какова семантика операции?

Запускается алгоритм, заданный операцией OpSign, вычисляющий значение результата для заданных операндов.

23

Функциональное программирование. Функции и операции

Традиционные (инфиксная, префиксная, постфиксная) операции считаются альтернативными формами более общей конструкции вызова функции/метода.

Таким образом, можно считать знак операции синонимом (alias) имени соответствующей функции/метода, а традиционную запись – альтернативной формой вызова.

Можно вводить собственные версии стандартных операций для пользовательских типов.

24

Функциональное программирование. Функции и операции

Система типов С++ гетерогенная (неоднородная): существуют предопределенные и пользовательские типы.

Для базовых типов есть стандартные операции.

Для пользовательских типов (классов) можно задать собственные версии стандартных операций.

Арность и приоритеты операций нельзя изменять.

Не допускается введение новых операций. Язык должен быть расширяемым, но не изменяемым (Б.Страуструп)

Могут быть заданы собственные версии всех общеупотребительных операций, а также операции индексации [], операции вызова (), операции new и delete.

25

Функциональное программирование. Функции и операции

26

Функциональное программирование. Функции и операции

Нотация вызова

Традиционная инфиксная нотация

Можно вводить собственные знаки операций

Любой метод можно вызвать27