Тёмный

Java. Разбираемся с монадами. 

Sergey Arkhipov Java Tutorials
Подписаться 20 тыс.
Просмотров 10 тыс.
50% 1

В этом видео я объясняю на примерах монады, и какая польза от них для Java разработчика. Разбираем что такое монады, как они устроены и для чего применяются. Упор делается на практическую сторону вопроса.
Исходные коды:
github.com/Arhiser/java_tutor...
Поддержать канал на Boosty:
boosty.to/arhitutorials
Наш чатик в Telegram:
t.me/ArhiTutorials
#arhitutorialsjava #ityoutubersru

Опубликовано:

 

1 ноя 2022

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 69   
@ZamalSpace
@ZamalSpace 6 месяцев назад
Спасибо за отличное объеснение! Хотелось бы еще больше видео на эту тему
@alftrd
@alftrd 9 месяцев назад
Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂
@user-xq4wc1ge7r
@user-xq4wc1ge7r Месяц назад
Вау, спасибо. Прям на пальцах все разложено. Эх, хотелось бы погрузиться в теорию, но куча отговорок мешает)
@user-jk9yz7gi1h
@user-jk9yz7gi1h Год назад
Самое понятное объяснение монад, так держать!)
@RenderDragon
@RenderDragon Год назад
Очень интересно, как вам идея сделать видео про асинхронное программирование в Java?
@arhitutorials
@arhitutorials Год назад
Давно собираюсь, но все не могу придумать подходящий пример, на котором можно все доходчиво показать.
@liamfreezo6680
@liamfreezo6680 Год назад
@@arhitutorials так придумывать может не нужно, просто взять пример готовый и разобрать :)
@Irina-cw4lw
@Irina-cw4lw Год назад
Офигеть! Очень надеюсь дойти до такого уровня, чтобы писать подобные штуки. Спасибо огромное!
@Skaiiur
@Skaiiur Год назад
Отличный контент! Спасибо! Повседневно использую Optional, но не думал о нём как о монаде.
@1SkyMan11
@1SkyMan11 Год назад
дай тебе бог здоровья
@simplename2787
@simplename2787 Год назад
Спасибо за полезный урок! Для переименования нескольких переменных попробуй shift + F6
@AndreyDelay
@AndreyDelay Год назад
Спасибо за видео 🙌🏻
@user-cg4ly2ey6p
@user-cg4ly2ey6p Год назад
Очень круто , спасибо
@olegshirko5456
@olegshirko5456 Год назад
Спасибо! Норм объяснил, многое стало на место. Снимай исчо!
@vital_63_
@vital_63_ 6 месяцев назад
После просмотра твоего видоса про генерацию шума хочется спросить: а эти облака на конечной заставке - настоящие? )
@valeriyemelyanov9090
@valeriyemelyanov9090 Год назад
Спасибо!!!
@phil2964
@phil2964 Год назад
👍👍👍 спасибо
@EEEppt
@EEEppt Год назад
Вот теперь стало понятнее, что билдер и монада не одно и то же )
@sergeyka347
@sergeyka347 Год назад
полезно. лайк
@Eduard.Kardashov
@Eduard.Kardashov Год назад
монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг
@maksim33rus
@maksim33rus Год назад
Хотел бы увидеть обзор на плагин Advanced Custom Fields
@qwerty-hc7od
@qwerty-hc7od Год назад
Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому. Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.
@Ann_Askerova
@Ann_Askerova Год назад
100 лайков этому джентльмену
@dzianishrip5139
@dzianishrip5139 Год назад
А если в Lazy я хочу также и Option, есть какое-то объединение монад? Т.е. пример не совсем практический.
@user-jd4rl7im6d
@user-jd4rl7im6d Год назад
Я так понимаю это собственно то, на чем основан Stream API?
@darkyver2708
@darkyver2708 Год назад
Такой вопрос. Не совсем понятен смысл именно метода flatMap. Почему нельзя просто в методе map создать и вернуть новую монаду без дополнительного шага с созданием функции которая создаст монаду во flatMap? конкретнее, на 5:00 в 27 строке заменить return flatMap(val -> new Monad(mapFunc.apply(val))); на return new Monad(mapFunc.apply(value));
@anatoliymartsenyuk861
@anatoliymartsenyuk861 Год назад
Если попытаться заинлайнить реализацию flatMap() в метод map(), то идея сначала создаёт такую конструкцию: return ((Function) val -> new Monad(mapFunc.apply(val))).apply(value); и тут же предлагает упростить до: return new Monad(mapFunc.apply(value)); т.е. эффективно это одно и то же. Т.е. на вопрос "почему нельзя" ответ - "можно". И да, получается, что в варианте с вызовом flatMap() дополнительно создаётся промежуточная лямбда. А смысл flatMap, как я понимаю, в другом типе аргумента.
@sergeyka347
@sergeyka347 Год назад
Только не пойму, в чем преимущество, в этом способе лейзи, перед тем если мы просто напишем саплайер?
@user-cy3yi3cw4f
@user-cy3yi3cw4f 7 месяцев назад
Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список. В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat. Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.
@Libra7by
@Libra7by Год назад
Что только джависты не придумают, что бы Котлином не пользоваться! :)
@edwardfreedom
@edwardfreedom Год назад
так котлин на джаве написан, смысл этой прослойки?
@user-oi7xs9st3i
@user-oi7xs9st3i Год назад
😂😂😂😂
@Libra7by
@Libra7by Год назад
@@edwardfreedom Залет на собесе за такой ответ, Николай.
@dzmitryshalukhov1681
@dzmitryshalukhov1681 Год назад
@@edwardfreedom а java на С написан.
@edwardfreedom
@edwardfreedom Год назад
@@dzmitryshalukhov1681 а с на асэмблере
@kosbarable
@kosbarable Год назад
5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?
@alexxxyzzz
@alexxxyzzz Год назад
Здравствуйте. Строка 27 это реализация тела метода apply из строки 23. А в строке 23 в вызываемый метод передается поле value конкретного экземпляра.
@mksmsmirnov
@mksmsmirnov Год назад
"Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!
@BigIdler
@BigIdler Год назад
Теория категорий в математике
@sjavaoradev
@sjavaoradev 8 месяцев назад
получается каждый раз когда мы вызваем map - мы возращаем новый инстанс Monad ?
@arhitutorials
@arhitutorials 8 месяцев назад
Да.
@sjavaoradev
@sjavaoradev 8 месяцев назад
а это правильно ? @@arhitutorials
@arhitutorials
@arhitutorials 8 месяцев назад
@@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.
@sjavaoradev
@sjavaoradev 8 месяцев назад
а, ок забыл что монад должен быть обязательно Immutable . Спасибо !@@arhitutorials
@eternalgreed6715
@eternalgreed6715 Год назад
А как поглубже и пофундаментальнее изучить монады?
@eternalgreed6715
@eternalgreed6715 Год назад
Интересно было бы послушать более научное объяснение. И ещё вопрос у вас математическое образование?)
@arhitutorials
@arhitutorials Год назад
@@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное. У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)
@eternalgreed6715
@eternalgreed6715 Год назад
@@arhitutorials круто, спасибо большое. А какой вуз ?
@arhitutorials
@arhitutorials Год назад
Сейчас этот вуз называется СевГУ
@caffeinejavacode1475
@caffeinejavacode1475 Год назад
Как углубиться в функциональщину, чтоб лучше понмать написаные вами функции flatmap и map? У меня больше аналитическое мышление чем абстрактное
@andreymanankov7423
@andreymanankov7423 Год назад
Анекдот чуть более закрученный на самом деле Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели. Снизились они и спрашивают мужика: - Скажите, сэр, где мы находимся? - На воздушном шаре. - Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит: - Ватсон, мы в Росиии! - Холмс, а с чего вы взяли, что мы в России? - Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его ответ был абсолютно точен. И в третьих - абсолютно бесполезен! Значит это был програмист. А только в России программист может работать пастухом.
@user-ib8rv1vr4r
@user-ib8rv1vr4r Год назад
Не ленюсь даже комментарий оставить.
@user-mt2if1ht8n
@user-mt2if1ht8n Год назад
17:21 содержимое flatMapSingle (contacts -> SalonsService.getApiImpl().getMeCustomer(getSessionKey()))/ andThen(Single.defer(() -> {...}))
@user-xc5cx7lh4l
@user-xc5cx7lh4l Год назад
Гораздо больше напоминает не билддера а цепочку (chain of responsibility)
@kartushinav
@kartushinav Год назад
скорее декоратор
@user-mg8md7xw2w
@user-mg8md7xw2w Год назад
Cпасибо за хорошую ,легкую подачу. Хочется про JavaFx(еще актуальна?) и lambok maven(gradle)
@mitruslatovous6
@mitruslatovous6 Год назад
Константы именуются в стиле CONSTANT_CASE. За все остальное - спасибо! )
@YWNWA-ZXC
@YWNWA-ZXC 9 месяцев назад
так Optional это и есть Monad? зачем создавать отдельный?
Далее
Tragic Moments 😥 #2
00:30
Просмотров 4 млн
RxJava. Неформальное введение.
23:15
Type Erasure
2:47
Просмотров 3,4 тыс.
Java. Для чего нужен Optional?
18:26
Просмотров 11 тыс.
Java. Сортировка пузырьком.
8:12
Просмотров 54 тыс.
Java. Searching for files in folders.
9:02
Просмотров 17 тыс.