Java. Разбираемся с монадами.
Vložit
- čas přidán 1. 11. 2022
- В этом видео я объясняю на примерах монады, и какая польза от них для Java разработчика. Разбираем что такое монады, как они устроены и для чего применяются. Упор делается на практическую сторону вопроса.
Исходные коды:
github.com/Arhiser/java_tutor...
Поддержать канал на Boosty:
boosty.to/arhitutorials
Наш чатик в Telegram:
t.me/ArhiTutorials
#arhitutorialsjava #ityoutubersru
Вау, спасибо. Прям на пальцах все разложено. Эх, хотелось бы погрузиться в теорию, но куча отговорок мешает)
Спасибо за отличное объеснение! Хотелось бы еще больше видео на эту тему
Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂
Самое понятное объяснение монад, так держать!)
Офигеть! Очень надеюсь дойти до такого уровня, чтобы писать подобные штуки. Спасибо огромное!
Отличный контент! Спасибо! Повседневно использую Optional, но не думал о нём как о монаде.
Спасибо за видео 🙌🏻
Очень интересно, как вам идея сделать видео про асинхронное программирование в Java?
Давно собираюсь, но все не могу придумать подходящий пример, на котором можно все доходчиво показать.
@@arhitutorials так придумывать может не нужно, просто взять пример готовый и разобрать :)
Спасибо за полезный урок! Для переименования нескольких переменных попробуй shift + F6
Очень круто , спасибо
Спасибо!!!
Спасибо! Норм объяснил, многое стало на место. Снимай исчо!
дай тебе бог здоровья
👍👍👍 спасибо
полезно. лайк
Услышал про монады сразу подумал про Haskell.
Вот теперь стало понятнее, что билдер и монада не одно и то же )
После просмотра твоего видоса про генерацию шума хочется спросить: а эти облака на конечной заставке - настоящие? )
Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список.
В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat.
Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.
монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг
Хотел бы увидеть обзор на плагин Advanced Custom Fields
Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому.
Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.
"Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!
Теория категорий в математике
Такой вопрос. Не совсем понятен смысл именно метода flatMap. Почему нельзя просто в методе map создать и вернуть новую монаду без дополнительного шага с созданием функции которая создаст монаду во flatMap?
конкретнее, на 5:00 в 27 строке заменить
return flatMap(val -> new Monad(mapFunc.apply(val)));
на
return new Monad(mapFunc.apply(value));
Если попытаться заинлайнить реализацию flatMap() в метод map(), то идея сначала создаёт такую конструкцию:
return ((Function) val -> new Monad(mapFunc.apply(val))).apply(value);
и тут же предлагает упростить до:
return new Monad(mapFunc.apply(value));
т.е. эффективно это одно и то же. Т.е. на вопрос "почему нельзя" ответ - "можно". И да, получается, что в варианте с вызовом flatMap() дополнительно создаётся промежуточная лямбда.
А смысл flatMap, как я понимаю, в другом типе аргумента.
Только не пойму, в чем преимущество, в этом способе лейзи, перед тем если мы просто напишем саплайер?
А если в Lazy я хочу также и Option, есть какое-то объединение монад? Т.е. пример не совсем практический.
Я так понимаю это собственно то, на чем основан Stream API?
Что только джависты не придумают, что бы Котлином не пользоваться! :)
так котлин на джаве написан, смысл этой прослойки?
😂😂😂😂
@@edwardfreedom Залет на собесе за такой ответ, Николай.
@@edwardfreedom а java на С написан.
@@dddsss12345 а с на асэмблере
17:21 содержимое flatMapSingle (contacts -> SalonsService.getApiImpl().getMeCustomer(getSessionKey()))/ andThen(Single.defer(() -> {...}))
100 лайков этому джентльмену
5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?
Здравствуйте. Строка 27 это реализация тела метода apply из строки 23. А в строке 23 в вызываемый метод передается поле value конкретного экземпляра.
Анекдот чуть более закрученный на самом деле
Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются
над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели.
Снизились они и спрашивают мужика:
- Скажите, сэр, где мы находимся?
- На воздушном шаре.
- Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит:
- Ватсон, мы в Росиии!
- Холмс, а с чего вы взяли, что мы в России?
- Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его
ответ был абсолютно точен. И в третьих - абсолютно бесполезен!
Значит это был програмист. А только в России программист может работать пастухом.
Cпасибо за хорошую ,легкую подачу. Хочется про JavaFx(еще актуальна?) и lambok maven(gradle)
получается каждый раз когда мы вызваем map - мы возращаем новый инстанс Monad ?
Да.
а это правильно ? @@arhitutorials
@@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.
а, ок забыл что монад должен быть обязательно Immutable . Спасибо !@@arhitutorials
А как поглубже и пофундаментальнее изучить монады?
Интересно было бы послушать более научное объяснение. И ещё вопрос у вас математическое образование?)
@@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное.
У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)
@@arhitutorials круто, спасибо большое. А какой вуз ?
Сейчас этот вуз называется СевГУ
Как углубиться в функциональщину, чтоб лучше понмать написаные вами функции flatmap и map?
У меня больше аналитическое мышление чем абстрактное
Константы именуются в стиле CONSTANT_CASE. За все остальное - спасибо! )
Гораздо больше напоминает не билддера а цепочку (chain of responsibility)
скорее декоратор
Не ленюсь даже комментарий оставить.
так Optional это и есть Monad? зачем создавать отдельный?