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

  Рет қаралды 10,629

Sergey Arkhipov Java Tutorials

Sergey Arkhipov Java Tutorials

Күн бұрын

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

Пікірлер: 73
@ZamalSpace
@ZamalSpace Жыл бұрын
Спасибо за отличное объеснение! Хотелось бы еще больше видео на эту тему
@sd1-df
@sd1-df 2 жыл бұрын
Самое понятное объяснение монад, так держать!)
@Skaiiur
@Skaiiur 2 жыл бұрын
Отличный контент! Спасибо! Повседневно использую Optional, но не думал о нём как о монаде.
@Irina-cw4lw
@Irina-cw4lw Жыл бұрын
Офигеть! Очень надеюсь дойти до такого уровня, чтобы писать подобные штуки. Спасибо огромное!
@RenderDragon
@RenderDragon 2 жыл бұрын
Очень интересно, как вам идея сделать видео про асинхронное программирование в Java?
@arhitutorials
@arhitutorials 2 жыл бұрын
Давно собираюсь, но все не могу придумать подходящий пример, на котором можно все доходчиво показать.
@liamfreezo6680
@liamfreezo6680 Жыл бұрын
@@arhitutorials так придумывать может не нужно, просто взять пример готовый и разобрать :)
@alftrd
@alftrd Жыл бұрын
Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂
@olegshirko5456
@olegshirko5456 2 жыл бұрын
Спасибо! Норм объяснил, многое стало на место. Снимай исчо!
@1SkyMan11
@1SkyMan11 2 жыл бұрын
дай тебе бог здоровья
@ВладиНайз
@ВладиНайз 2 жыл бұрын
Очень круто , спасибо
@Николай-х3б4ф
@Николай-х3б4ф 8 ай бұрын
Вау, спасибо. Прям на пальцах все разложено. Эх, хотелось бы погрузиться в теорию, но куча отговорок мешает)
@simplename2787
@simplename2787 2 жыл бұрын
Спасибо за полезный урок! Для переименования нескольких переменных попробуй shift + F6
@AndreyDelay
@AndreyDelay 2 жыл бұрын
Спасибо за видео 🙌🏻
@valeriyemelyanov9090
@valeriyemelyanov9090 2 жыл бұрын
Спасибо!!!
@darkyver2708
@darkyver2708 2 жыл бұрын
Такой вопрос. Не совсем понятен смысл именно метода 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, как я понимаю, в другом типе аргумента.
@phil2964
@phil2964 2 жыл бұрын
👍👍👍 спасибо
@vital_63_
@vital_63_ Жыл бұрын
После просмотра твоего видоса про генерацию шума хочется спросить: а эти облака на конечной заставке - настоящие? )
@dzianishrip5139
@dzianishrip5139 Жыл бұрын
А если в Lazy я хочу также и Option, есть какое-то объединение монад? Т.е. пример не совсем практический.
@kosbarable
@kosbarable Жыл бұрын
5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?
@alexxxyzzz
@alexxxyzzz Жыл бұрын
Здравствуйте. Строка 27 это реализация тела метода apply из строки 23. А в строке 23 в вызываемый метод передается поле value конкретного экземпляра.
@EEEppt
@EEEppt 2 жыл бұрын
Вот теперь стало понятнее, что билдер и монада не одно и то же )
@ЮрийКлименко-к3щ
@ЮрийКлименко-к3щ 2 жыл бұрын
Я так понимаю это собственно то, на чем основан Stream API?
@user-mt2if1ht8n
@user-mt2if1ht8n 2 жыл бұрын
17:21 содержимое flatMapSingle (contacts -> SalonsService.getApiImpl().getMeCustomer(getSessionKey()))/ andThen(Single.defer(() -> {...}))
@Eduard.Kardashov
@Eduard.Kardashov Жыл бұрын
монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг
@maksim33rus
@maksim33rus 2 жыл бұрын
Хотел бы увидеть обзор на плагин Advanced Custom Fields
@sergeyka347
@sergeyka347 2 жыл бұрын
Только не пойму, в чем преимущество, в этом способе лейзи, перед тем если мы просто напишем саплайер?
@sjavaoradev
@sjavaoradev Жыл бұрын
получается каждый раз когда мы вызваем map - мы возращаем новый инстанс Monad ?
@arhitutorials
@arhitutorials Жыл бұрын
Да.
@sjavaoradev
@sjavaoradev Жыл бұрын
а это правильно ? @@arhitutorials
@arhitutorials
@arhitutorials Жыл бұрын
@@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.
@sjavaoradev
@sjavaoradev Жыл бұрын
а, ок забыл что монад должен быть обязательно Immutable . Спасибо !@@arhitutorials
@sergeyka347
@sergeyka347 2 жыл бұрын
полезно. лайк
@ДаниилМонахов-р8ч
@ДаниилМонахов-р8ч Жыл бұрын
Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список. В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat. Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.
@qwerty-hc7od
@qwerty-hc7od Жыл бұрын
Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому. Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.
@andreymanankov7423
@andreymanankov7423 Жыл бұрын
Анекдот чуть более закрученный на самом деле Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели. Снизились они и спрашивают мужика: - Скажите, сэр, где мы находимся? - На воздушном шаре. - Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит: - Ватсон, мы в Росиии! - Холмс, а с чего вы взяли, что мы в России? - Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его ответ был абсолютно точен. И в третьих - абсолютно бесполезен! Значит это был програмист. А только в России программист может работать пастухом.
@Libra7by
@Libra7by 2 жыл бұрын
Что только джависты не придумают, что бы Котлином не пользоваться! :)
@edwardfreedom
@edwardfreedom 2 жыл бұрын
так котлин на джаве написан, смысл этой прослойки?
@АлексейА-ц5м
@АлексейА-ц5м 2 жыл бұрын
😂😂😂😂
@Libra7by
@Libra7by 2 жыл бұрын
@@edwardfreedom Залет на собесе за такой ответ, Николай.
@dddsss12345
@dddsss12345 2 жыл бұрын
@@edwardfreedom а java на С написан.
@edwardfreedom
@edwardfreedom 2 жыл бұрын
@@dddsss12345 а с на асэмблере
@Ann_Askerova
@Ann_Askerova 2 жыл бұрын
100 лайков этому джентльмену
@DHARMA252
@DHARMA252 5 ай бұрын
Услышал про монады сразу подумал про Haskell.
@dmaberlin
@dmaberlin 3 ай бұрын
чат в тг не находит
@arhitutorials
@arhitutorials 3 ай бұрын
@@dmaberlin t.me/+TH9AoBq_ct6RYZgz
@mksmsmirnov
@mksmsmirnov 2 жыл бұрын
"Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!
@BigIdler
@BigIdler 2 жыл бұрын
Теория категорий в математике
@eternalgreed6715
@eternalgreed6715 2 жыл бұрын
А как поглубже и пофундаментальнее изучить монады?
@eternalgreed6715
@eternalgreed6715 2 жыл бұрын
Интересно было бы послушать более научное объяснение. И ещё вопрос у вас математическое образование?)
@arhitutorials
@arhitutorials 2 жыл бұрын
@@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное. У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)
@eternalgreed6715
@eternalgreed6715 2 жыл бұрын
@@arhitutorials круто, спасибо большое. А какой вуз ?
@arhitutorials
@arhitutorials 2 жыл бұрын
Сейчас этот вуз называется СевГУ
@caffeinejavacode1475
@caffeinejavacode1475 2 жыл бұрын
Как углубиться в функциональщину, чтоб лучше понмать написаные вами функции flatmap и map? У меня больше аналитическое мышление чем абстрактное
@ЮрійАндрашко-у8я
@ЮрійАндрашко-у8я 2 жыл бұрын
Гораздо больше напоминает не билддера а цепочку (chain of responsibility)
@kartushinav
@kartushinav Жыл бұрын
скорее декоратор
@СергейЮшкевич-в5ь
@СергейЮшкевич-в5ь Жыл бұрын
Cпасибо за хорошую ,легкую подачу. Хочется про JavaFx(еще актуальна?) и lambok maven(gradle)
@БогданЗараник
@БогданЗараник 2 жыл бұрын
Не ленюсь даже комментарий оставить.
@mitruslatovous6
@mitruslatovous6 2 жыл бұрын
Константы именуются в стиле CONSTANT_CASE. За все остальное - спасибо! )
@KyivanEnjoyer
@KyivanEnjoyer Жыл бұрын
так Optional это и есть Monad? зачем создавать отдельный?
Java. Распараллеливаем вычисления на пуле потоков.
21:37
Java. Стирание типов.
14:07
Sergey Arkhipov Java Tutorials
Рет қаралды 16 М.
I Sent a Subscriber to Disneyland
0:27
MrBeast
Рет қаралды 104 МЛН
Маусымашар-2023 / Гала-концерт / АТУ қоштасу
1:27:35
Jaidarman OFFICIAL / JCI
Рет қаралды 390 М.
Hilarious FAKE TONGUE Prank by WEDNESDAY😏🖤
0:39
La La Life Shorts
Рет қаралды 44 МЛН
🎈🎈🎈😲 #tiktok #shorts
0:28
Byungari 병아리언니
Рет қаралды 4,5 МЛН
Java. Методы equals и hashCode.
15:05
Sergey Arkhipov Java Tutorials
Рет қаралды 40 М.
Java. Класс Object. Разбор вопросов на собеседование.
21:16
Sergey Arkhipov Java Tutorials
Рет қаралды 31 М.
Reflection. Часть 1 (прокачанная Java)
19:34
Програмания
Рет қаралды 7 М.
Java. Многопоточность. Как устроить Deadlock.
14:39
Sergey Arkhipov Java Tutorials
Рет қаралды 10 М.
I Sent a Subscriber to Disneyland
0:27
MrBeast
Рет қаралды 104 МЛН