Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 165 additions & 0 deletions Courses/Functional.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,168 @@
- [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM)
- Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose
- [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc)

# Functional programming (таймкоды)

## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U)

- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0)
- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682)
- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766)
- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967)
- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003)
- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125)
- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500)
- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603)
- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886)
- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206)
- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509)
- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686)
- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042)
- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324)
- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510)
- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653)
- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687)
- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864)
- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121)
- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315)
- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456)

## [Частичное применение и каррирование в JavaScript ( Partial application )](https://youtu.be/ND8KQ5xjk7o)

- [00:00:00 Замыкание ](https://youtu.be/ND8KQ5xjk7o?t=0)
- [00:04:54 Лямбда- функция ](https://youtu.be/ND8KQ5xjk7o?t=294)
- [00:06:06 Метод bind ](https://youtu.be/ND8KQ5xjk7o?t=366)
- [00:08:30 Абстрагированный пример функции ](https://youtu.be/ND8KQ5xjk7o?t=510)
- [00:13:42 Абстрагированный пример функции (расширение) ](https://youtu.be/ND8KQ5xjk7o?t=822)
- [00:15:47 Неправильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=947)
- [00:22:22 Правильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=1342)
- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734)
- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901)
- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282)
- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705)
- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765)
- [00:51:25 Композиция с n - функциями, при помощи цикла ](https://youtu.be/ND8KQ5xjk7o?t=3085)
- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269)
- [00:57:40 Композиция асинхронных функций ](https://youtu.be/ND8KQ5xjk7o?t=3460)
- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687)

## [Функции высшего порядка, колбеки, события на JavaScript (HigherOrderFunctions, callbacks, events)](https://youtu.be/1vqATwbGHnc)

- [00:00:00 Определение ](https://youtu.be/1vqATwbGHnc?t=0)
- [00:02:03 Математическая функция ](https://youtu.be/1vqATwbGHnc?t=123)
- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357)
- [00:09:33 Замыкание ](https://youtu.be/1vqATwbGHnc?t=573)
- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651)
- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760)
- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109)
- [00:21:45 Обобщение ](https://youtu.be/1vqATwbGHnc?t=1305)
- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365)
- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532)
- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716)
- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981)
- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180)
- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339)
- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470)
- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819)
- [00:53:45 Event-imitter ](https://youtu.be/1vqATwbGHnc?t=3225)
- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468)
- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691)

## [Примеси, обертки, декораторы, мемоизация в JavaScript (Wrappers)](https://youtu.be/oRQ0kQr1N-U)

- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0)
- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175)
- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508)
- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950)
- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365)
- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538)
- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656)
- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790)
- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949)
- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343)
- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548)
- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747)
- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095)
- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455)
- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558)
- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743)
- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010)
- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050)
- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483)
- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843)
- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135)
- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470)
- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612)

## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34)

- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0)
- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70)
- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132)
- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345)
- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371)
- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714)
- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994)
- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578)
- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595)
- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228)
- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385)
- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448)
- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828)
- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164)
- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346)
- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574)
- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803)
- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038)

## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ)

## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw)

- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0)
- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100)
- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497)
- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554)
- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709)
- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764)
- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088)
- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391)
- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717)
- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384)
- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727)

## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws)

## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk)

## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0)

- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0)
- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175)
- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508)
- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950)
- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365)
- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538)
- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656)
- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790)
- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949)
- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343)
- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548)
- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747)
- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095)
- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455)
- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558)
- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743)
- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010)
- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050)
- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483)
- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843)
- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135)
- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470)
- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612)

## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg)

## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI)