Функциональные объекты, функторы и монады в JavaScript

preview_player
Показать описание


#функтор #монада #javascript #программирование #кпи
Рекомендации по теме
Комментарии
Автор

00:00:00 Определение функтора
00:01:40 Функтор из прототипа
00:08:17 Функтор из прототипа (упрощенный)
00:09:14 Функтор из замыкания
00:11:49 Функтор из замыкания с тернарным оператором
00:12:44 Аппликативный функтор из прототипа
00:18:08 Аппликативный функтор из замыкания (монада)
00:23:11 Пример применения монады
00:28:37 Функциональный объект
00:39:44 Пример применения функционального объекта
00:45:27 Обобщение

anatolykobzisty
Автор

Лучшее объяснение с примерами функторов и монад для реального применения в JS, а не голая теория из математики, чтобы потом голову сломать где, как и зачем это применять. У вас классные уроки !

avikbox
Автор

немного не хватает определений. Функтор - это, Аппликативный функтор это. Приходится свойства паттерна извлекать из реализации, рискуя спутать конкретную реализацию и сам концепт.

romanmakarov
Автор

Спасибо!
Интересно мозги потренировать...
Я пока не написал упрощенную функцию для считывания параметра из конфинга, не мог понять, как ваша монада работает (примерно 28 минута).
Вот моя функция, которая не монада, но делает тоже.
Может кому-то поможет лучше понять про монады:
const fp = obj => txt => txt.split('.').reduce((prev, key) => (prev[key]), obj);

ultexplorer
Автор

12 к просмотров и так мало лайков! Жадюги!

mazy
Автор

14:14 -- такое опредление map категорически не соответствует требованию функтора. Нельзя превентить повторную запаковку после мапа. Я понимаю, что это попытка сделать рабочим apply. Но строго говоря, это нарушает требование:

F(x).map(f) => F(f(x)).

А вот в конструкторе такое сделать ... -- вроде, как должно получится.

dimitro.cardellini
Автор

Хм, неплохо, или я за год поумнел или лекции стали неплохо так подробными.

dimanadko
Автор

Пример "7-path.js".

Императивный код хорошо отрабатывает, если мы не найдем нужный код, ничего не валится с ошибками.

А вот функциональный код не работает при передаче неверного пути или если в объекте не будет нужного ключа. Я даже специально попробовал запустить именно ваш код, в надежде, что я ошибся, но нет) И в итоге, получается пример бессмысленный) Еще и с учетом того, что проверку ключей можно чейнить, по принципу:

{}

alexandrmerser
Автор

В последнем примере с коллектором данных после вызова `collector.callback` нужно устанавливать `collector.finished = true`?

drmonochromer
Автор

28:08 не понятно где это условие, при котором "вычисления дальше не пойдут", ведь при отсутствии поля по ключу, мы возвращаем пустой объекти и делаем следующий шаг редьюса, т.о. редьюс пробежит по всем распарсенным ключам, только каждый раз будет возвращаться пустой объект и попытка взять у него поле. Не понятен этот момент(

sergey
Автор

28:38 -- кое-что важное потерялось )

function Counter() {}
Counter.prototype = Object.create(Function); // a то у нас перестанут работать apply, bind, и call.

dimitro.cardellini
Автор

Интересно а вы сами где все это учили?)

ilnurryazhapov
Автор

Отличный обзор.

Вот ссылка на алгебраические структуры: монады, функторы и кучу другого )

dimitro.cardellini
Автор

А зачем примешивать в map методы ap и chain в функциональном стиле? Ведь на прототипах не было примеси только отдельные методы

РоманВоловик-зд
Автор

Есть ли ссылка на список прикладных задач по данной теме?

pavelgnedoy
Автор

Зачем усложнять жизнь, добавляя всякие ненужные монады и функторы?

AkkayHT
Автор

По моему не особо правильно показывать монады и функторы в js...
Это не функциональное мышление...
Мы думаем что делает объект, а не что мы делаем с алгебраическим типом данных...
Проблема в том, что слушатель незнакомый с хаскеллем может подумать, что функторы и монады это контейнеры, что является грубейшей ошибкой...
Это скорее видео для тех, кто хочет реализовать монады и функторы в js, а не для тех, кто с ними не знаком...

П.с.
Ничего не имею против видео, отличный урок...
Хотя, тут вопрос спорный ибо функторы и монады понятия не из haskell, а из теории категорий, и как их лучше перевести в программирование, это уже субъективщина....

mechmaker
Автор

~19 минута --> 6-closure-ap.js --> // Usage --> 2й fp.maybe это просто ... совсем не понятно !

ИванПетров-бвщ
Автор

Мне интересно ваши студенты понимают материал сразу же на паре? Я изучаю js примерно год и не посидев над таким кодом минут 20 я ничего не пойму из этого. Не вижу большого смысла, так усложнять код (функторами и монадами), если это все можно также сделать и императивным путем, но это не будет выглядеть так же пафосно. Читаемость кода сильно падает, если тоже самое написать на условном ООП. Конечно, если это придумывали умные дядьки, значит им видней что истинна, а кто я такой? Я же обычный смертный, которому критиковать такой священный код не по силам.

ЕвгенийКраев-яж