3. теория категорий- исчисление
Основы
λ
Чистые функции
Функции высшего
порядка
Неизменяемость
Каррирование Рекурсия Композиция функций
Алгебраические
типы данных
Pattern matching
Специализированные
функции
Функторы
Параметрический
полиморфизм
Монады
8. Чистые функции (pure functions)
λ
Побочные эффекты
•Запись в файл
•Чтение из файла
•Запрос к базе данных
•Глобальные переменные
•console.log(‘Hello’)
77...
9. Чистые функции (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]
}
11. Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
console.log('Pushing to arrayEE...');
12. Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
saveToDatabase(array);
13. Чистые функции (pure functions)
λ
var pushed = push100(
function push100(
);
) {
array.push(100);
array
[1, 2, 3]
return array;
}
launch(🚀🚀🚀🚀);
14. λ Функции высшего порядка (higher-order)
•Функции обычные значения
•Функции принимают функции
•Функции возвращают функции
•Абстракция над действием
•Callbacks, promises
•Filter, map, reduce
•Похоже на DI в OOP
15. λ Функции высшего порядка (higher-order)
function delay5(launch) {
setTimeout(function() {
launch();
}, 5000);
}
delay5(function() {
console.log("Launching 🚀🚀🚀🚀");
});
E// Через 5 секунд
E// Launching 🚀🚀🚀🚀
16. λ Каррирование (curring)
•Преобразует функцию с
несколькими аргументами, в
функцию с меньшим количеством
аргументов
•Создает функции с
“предзаполненными” аргументами
•Rambda.js
17. λ Каррирование (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 🚀
19. λ Рекурсия (recursion)
•Функция вызывает сама себя
•Проверяется условие для выхода
•Нет побочных эффектов
•Локальные переменные не
изменяются
•Оптимизация часть стандарта, но
реализованные еще нет на всех
платформах
23. λ Что с этим делать ?
Императивная
оболочка
Функциональное
ядро
24. λ С чего начать ?
JavaScript
Разделить вычисления
и побочные эффекты
Заменить все циклы на
filter, map и reduce
Библиотеки
Ramda
Immutable.js
Lodash
Underscore.js
Типизация
Flow
Транскомпиляция
С типами Без типов
ClojureScript
TypeScript
Elm
ReasonML
PureScript
25. Сложностиλ
•Другая парадигма, нужно время
чтобы привыкнуть
•Много библиотек, плохое
взаимодействие
•Примеры и документация часто в
императивном стиле