4. Императивное
программирование
• Изменение состояния с помощью
последовательности команд
• Состояния изменяются присваиванием
• Программа – последовательность
инструкций по изменению состояния
5. Императивное
программирование
начальное состояние конечное состояние
(входные данные) (результат)
7. Функциональное
программирование
• Нет состояний;
• Нет присваиваний;
• Нет последовательного выполнения команд;
• Подобия циклов с помощью рекурсии;
• Функции высших порядков.
8. Достоинства ФП
• Более ясная семантика;
• Большее соответствие математическим
моделям;
• льшая свобода исполнения операций.
9. Достоинства ФП
• Выразительность и элегантность;
• Параметризация и модульность;
• Удобные способы представления
бесконечных данных.
11. λ -исчисление — основа ФП
• 1930-е г. – А. Чѐрч разработал теорию λ-
исчисления;
• 1958 г. – Дж. Маккарти изобрѐл LISP;
• 1973 г. – Создан язык ML;
• 1985 г. – На основе ML создан Oсaml;
• 2002 г. – На основе OCaml создан F#
12. λ -нотация
Пишем
λx.F[x]
чтобы определить функцию от x, которая
возвращает F[x]
17. Основные элементы функциональных
языков программирования
• Type inference (вывод типов);
• Higher-order function (функция высшего
порядка);
• Pattern matching (сопоставление с
образцом);
18. Type inference
• Нет необходимости использовать явные
декларации типов;
• Автоматический вывод типов;
• Модель типизации Хиндли-Милнера;
• Работает не всегда.
20. Pattern matching
let xor x y =
match x, y with
| true, true -> false
| true, false -> true
| false, true -> true
| false, false -> false
;;
val xor : bool -> bool -> bool
21. F# killer features:
• Мультипарадигменный язык с упором на
функциональное программирование;
• Статическая типизация;
• Интероперабельность с .NET;
• Ленивые вычисления.
22. Начало работы с F#
• .fs – файл с исходным кодом;
• fsi.exe – REPL;
• fsc.exe;
• Mono.
23. Система типов F#
• Типы значений
• System.byte, System.Int32, System.Char и т.д.
• Типы функций
• string -> string -> string
• Присвоение значений
• let value = 15;;
• let mutable value = 77;;
24. Некоторые встроенные типыF#
• Кортеж – экземпляр класса Tuple
>let tuple = “first”, 15, 16.8;;
val tuple : string * int * float = (“first”, 15, 16.8)
• Список – неизменяемый тип
>let lst = [1; 1; 2; 3; 5; 8; 13];;
val lst : int lst = [1; 1; 2; 3; 5; 8; 13]
>let abc = [1 .. 5];;
val abc : int lst = [1, 2, 3, 4, 5]
25. Объекты и классы
type Book =
val title : string
val author : string
val publishDate : DateTime
new (t, a, pd) = {
title = t
author = a
publishDate = pd}
26. Объекты и классы
type Book =
val title : string
val author : string
val publishDate : DateTime
new (t:string, a:string, pd) =
//произвольный код
{ title = t
author = a
publishDate = pd }
//произвольный код
27. Объекты и классы
type Book = (title : string,
author : string,) =
member this.Title = title
member this.Author = author
28. Методы
• Начинаются с ключевого слова member
• Модификаторы public, private, internal
• Нет модификатора protected
• Поддержка перегрузки методов