Слайд 7Функции высших порядков
Трактование функций как значений
Над функциями можно проводить операции
Их
можно комбинировать
Преимущества:
Создание переиспользуемых модулей
У объектов в ООП с этим проблемы
Оптимизация
Слайд 8Чистые функции
Результат вычисления функции зависит только от аргументов
Преимущества:
Возможность возврата ранее
посчитанного значения без пересчёта
Возможность перезапуска вычисления в случае аппаратного сбоя
В
том числе на другом вычислительном узле
Слайд 9Рекурсия
Решение задачи через саму себя, но с более простыми условиями
Преимущества:
Порой
проще и нагляднее
Меньшее количество присваиваний
Автоматическая оптимизация хвостовой рекурсии к итерации
Слайд 10Ленивые вычисления
Выполнение вычислений только при первом непосредственном использовании результата
List allFriendsFriends
= null
if (friendsFriendsCountRequired) {
allFriendsFriends = consumingFunc()
print(allFriendsFriends.count)
}
if (friendsFriendsPrintRequired) {
if (allFriendsFriends ==
null)
allFriendsFriends = consumingFunc()
printAll(allFriendsFriends)
}
Слайд 11Ленивые вычисления
Выполнение вычислений только при первом непосредственном использовании результата
lazy List
allFriendsFriends = consumingFunc()
if (friendsFriendsCountRequired) { print(allFriendsFriends.count)
}
if (friendsFriendsPrintRequired) { printAll(allFriendsFriends)
}
Слайд 12Ленивые вычисления
Выполнение вычислений только при первом непосредственном использовании результата
Преимущества:
Отделение вычислений
от логики вывода
Упрощение структуры кода
Возможность организации бесконечных структур данных
Фибоначчи fibs
= 0 : 1 : zipWith (+) fibs (tail fibs)
Слайд 13Сопоставление с образцом
Использование типов, адекватных предметной области, и упрощённое их
сопоставление
case class Address(street: String, number: Int)
case class Person(name: String, age:
Int, address: Address)
List
namesOfPeopleOnBukireva =
people.map(person match
case Person(name, _, Address(‘Букирева’, _)) => name
case _ =>
)
Слайд 14Сопоставление с образцом
Использование типов, адекватных предметной области, и упрощённое их
сопоставление
Преимущества:
Повышение читаемости кода
Адекватность задачам обработки данных
Простота конвертации в JSON, XML
Слайд 15Языки с функциональной парадигмой
Haskell
Erlang
F#
Scala
Слайд 16Haskell
https://www.haskell.org/
Разработан сообществом
Чистый функциональный язык программирования
Преподаётся в университетах
Университет Эдинбурга
ИТМО
Используется в
коммерческой среде
Финансовая аналитика
Разработка электроники
Слайд 17Erlang
http://www.erlang.org/
Разработан компанией Ericsson
Функциональный ЯП для распределённых систем
Используется в коммерческой
среде
Телекоммуникационные системы
Back-end для чата
NoSQL БД (язык реализации)
Слайд 18F#
http://fsharp.org/
Разработан компанией Microsoft
Объектно-функциональный ЯП
OCaml поверх .NET
Слайд 19Scala
http://scala-lang.org/
Разработан в университете Лозанны (EPFL)
Объектно-функциональный ЯП
Компилируется в Java-байткод
Слайд 20Тренды
Аналитика Больших Данных
Распределённые системы
Слайд 21Большие данные
Что?
Серия подходов, инструментов и методов обработки структурированных и неструктурированных
данных огромных объёмов и значительного многообразия
При каких условиях?
Непрерывный прирост данных
Распределение
по многочисленным узлам вычислительной сети
Слайд 22Средства для анализа
Big Data
MapReduce
Стек Apache Spark
Spark
Spark Streaming
Spark SQL
MLlib
Слайд 23Resilient Distributed Datasets в Spark
Слайд 24Распределённые системы
Модель акторов
Автономные вычислительные процессы
Коммуникация только посредством сообщений
Преимущества:
Масштабируемость
Отказоустойчивость (перезапуск)
Реализация -
Akka
Слайд 25Что дальше?
Introduction to Functional Programming, edX
Functional Programming Principles in Scala,
Coursera
Learn you some Erlang
Learn You a Haskell for Great Good!
Слайд 26Контакты
Школа функционального программирования (г. Пермь)
https://vk.com/tryfuture
Игорь Постаногов
ipostanogov@outlook.com
https://vk.com/ipostanogov