SlideShare a Scribd company logo
Процедурный
Объектно-ориентированный
Стили программирования:
Функциональное программирование
(Functional programming)
λ
λ
λ λ
теория категорий- исчисление
Основы
λ
Чистые функции
Функции высшего
порядка
Неизменяемость
Каррирование Рекурсия Композиция функций
Алгебраические
типы данных
Pattern matching
Специализированные
функции
Функторы
Параметрический
полиморфизм
Монады
λ
x = x + 1
Основы
x = y + 1 👍
🤔
Языкиλ
Чистые
(pure)
Haskell
Elm
…
В первую очередь
(functional first)
Scala
F#
OCaml
…
С возможностями
Java
C#
C7++
JavaScript
…
λ Чистые функции (pure functions)
f(x)
1
2
3
4
5
6
1
1
2
3
5
8
Чистые функции (pure functions)
λ
f(x)
1
2
3
4
5
6
1
1
2
3
5
8
Чистые функции (pure functions)
λ
Побочные эффекты
•Запись в файл
•Чтение из файла
•Запрос к базе данных
•Глобальные переменные
•console.log(‘Hello’)
77...
Чистые функции (pure functions)
λ
var pushed = push100(
var array = [1, 2, 3];
function push100(
);
) {
return array;
array.push(100);
E//[1, 2, 3, 100]
E//[1, 2, 3, 100, 100]
}
Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
E//[1, 2, 3, 100]
E//[1, 2, 3, 100]
Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
console.log('Pushing to arrayEE...');
Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
saveToDatabase(array);
Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
launch(🚀🚀🚀🚀);
λ Функции высшего порядка (higher-order)
•Функции обычные значения
•Функции принимают функции
•Функции возвращают функции
•Абстракция над действием
•Callbacks, promises
•Filter, map, reduce
•Похоже на DI в OOP
λ Функции высшего порядка (higher-order)
function delay5(launch) {
setTimeout(function() {
launch();
}, 5000);
}
delay5(function() {
console.log("Launching 🚀🚀🚀🚀");
});
E// Через 5 секунд
E// Launching 🚀🚀🚀🚀
λ Каррирование (curring)
•Преобразует функцию с
несколькими аргументами, в
функцию с меньшим количеством
аргументов
•Создает функции с
“предзаполненными” аргументами
•Rambda.js
λ Каррирование (curring)
var logo = function(main) {
return function(second) {
console.log("Logo is: ".concat(main, " and ", second));
}
}
var bearLogo = logo(“🐻”);
var bearAndBeerLogo = bearLogo(“🍺");
E// Logo is: 🐻 and 🍺
var bearAndRocketLogo = bearLogo("🚀");
E// Logo is: 🐻 and 🚀
λ Неизменяемость (immutability)
•Значения не меняется после
создания
•Убирает скрытые зависимости
•String, Number
•Для остального Immutable.js
λ Рекурсия (recursion)
•Функция вызывает сама себя
•Проверяется условие для выхода
•Нет побочных эффектов
•Локальные переменные не
изменяются
•Оптимизация часть стандарта, но
реализованные еще нет на всех
платформах
λ Рекурсия (recursion)
var countdown = function(i) {
if (i E<= 0) {
console.log("Launching 🚀🚀🚀🚀");
return i;
}
console.log(i + "EE...")
return countdown(i - 1);
}
countdown(3)
E// 3EE...
E// 2EE...
E// 1EE...
E// Launching 🚀🚀🚀🚀
λ Специализированные функции
•Filter, map, reduce
•Нет побочных эффектов
•Лучше читаемость
λ Специализированные функции
var count = drinks.filter(elem E=> elem E!= “🍷")
var drinks = ["🍺", "🍻", "🍻", "🍺", “🍷"]
E// ["🍺", "🍻", "🍻", "🍺"]
.map ( elem E=> elem EE=== "🍻" ? 2 : 1 )
.reduce((result, elem) E=> result + elem, 0)
E// [1, 2, 2, 1]
E// 6
λ Что с этим делать ?
Императивная
оболочка
Функциональное
ядро
λ С чего начать ?
JavaScript
Разделить вычисления
и побочные эффекты
Заменить все циклы на
filter, map и reduce
Библиотеки
Ramda
Immutable.js
Lodash
Underscore.js
Типизация
Flow
Транскомпиляция
С типами Без типов
ClojureScript
TypeScript
Elm
ReasonML
PureScript
Сложностиλ
•Другая парадигма, нужно время
чтобы привыкнуть
•Много библиотек, плохое
взаимодействие
•Примеры и документация часто в
императивном стиле
Вопросы ?
λ
λ λ
λ

More Related Content

PPTX
Урок 8. Введение в редукцию графов
PPTX
PHP7 - что ожидать?
PDF
JavaScript. Basics (in russian)
PPTX
Statements in VHDL - Concurrent Statements
PPTX
TMPA-2013 Tsytelov Trifanov Devexperts
PDF
Why Ruby?
PPTX
Statements in VHDL - Sequential Statements
PPTX
Subprograms in VHDL, Procedures in VHDL
Урок 8. Введение в редукцию графов
PHP7 - что ожидать?
JavaScript. Basics (in russian)
Statements in VHDL - Concurrent Statements
TMPA-2013 Tsytelov Trifanov Devexperts
Why Ruby?
Statements in VHDL - Sequential Statements
Subprograms in VHDL, Procedures in VHDL

What's hot (20)

PPTX
Subprograms in VHDL, Functions in VHDL
PPTX
стандартная библиотека с++: введение
PPTX
алгоритмы stl
PDF
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
PPTX
Cpp/cli types
PPTX
особенности программирования на с++
PPT
Кратко о Mac OS X
PPTX
PHP7 - Предрелизный обзор
PPTX
1 Презентация функциональное программирование
PDF
JPoint 2015 - Javassist на службе Java-разработчика
PDF
fp intro
PPTX
Всё ли ты знаешь о JavaScript ООП?
PPTX
Structural project description in VHDL
PDF
Reform: путь к лучшему ORM
PPTX
контейнеры STL
PPTX
Введение в теорию автоматов и вычислений. 1.12 дорожная карта 2 - ДКА
PPTX
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
PDF
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
PPT
практика 4
PPTX
Reactive extensions
Subprograms in VHDL, Functions in VHDL
стандартная библиотека с++: введение
алгоритмы stl
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)
Cpp/cli types
особенности программирования на с++
Кратко о Mac OS X
PHP7 - Предрелизный обзор
1 Презентация функциональное программирование
JPoint 2015 - Javassist на службе Java-разработчика
fp intro
Всё ли ты знаешь о JavaScript ООП?
Structural project description in VHDL
Reform: путь к лучшему ORM
контейнеры STL
Введение в теорию автоматов и вычислений. 1.12 дорожная карта 2 - ДКА
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
практика 4
Reactive extensions
Ad

Similar to Functional (20)

PDF
2014-11-01 03 Николай Линкер. Open your clojure
PPTX
Clojure: Lisp for the modern world (русская версия)
PDF
Clojure – есть ли жизнь после Java
ODP
Scala: introduction
PDF
Как приручить дракона: введение в LLVM
PDF
Tech Talks @NSU: Как приручить дракона: введение в LLVM
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
PPTX
Зачем нужна Scala?
PDF
Back to the future: Функциональное программирование вчера и сегодня
PDF
C++ Базовый. Занятие 04.
PDF
Формальная верификация кода на языке Си
PDF
Формальная верификация кода на языке Си
PDF
Formal verification of C code
PDF
ОПК № 2 – Алгоритмы и структуры данных, язык C
PDF
Scala, SBT & Play! for Rapid Application Development
PDF
Ecma script 6 in action
PDF
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
PPTX
Some Elements of Functional Porgamming Languages
PPT
Инструментация среды исполнения в арсенале тестировщика
PDF
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
2014-11-01 03 Николай Линкер. Open your clojure
Clojure: Lisp for the modern world (русская версия)
Clojure – есть ли жизнь после Java
Scala: introduction
Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Зачем нужна Scala?
Back to the future: Функциональное программирование вчера и сегодня
C++ Базовый. Занятие 04.
Формальная верификация кода на языке Си
Формальная верификация кода на языке Си
Formal verification of C code
ОПК № 2 – Алгоритмы и структуры данных, язык C
Scala, SBT & Play! for Rapid Application Development
Ecma script 6 in action
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Some Elements of Functional Porgamming Languages
Инструментация среды исполнения в арсенале тестировщика
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Ad

More from Andrey Volobuev (9)

PDF
Prompt engineering for iOS developers (How LLMs and GenAI work)
PDF
Protocols and generics in Swift
PDF
State machines in iOS
PDF
Mobile architectures
PDF
How React works
PDF
Unit testing iOS Applications
PDF
Архитектура компилятора Swift
PDF
Преимущества и недостатки языка Swift
Prompt engineering for iOS developers (How LLMs and GenAI work)
Protocols and generics in Swift
State machines in iOS
Mobile architectures
How React works
Unit testing iOS Applications
Архитектура компилятора Swift
Преимущества и недостатки языка Swift

Functional