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

  Рет қаралды 9,875

Sergey Arkhipov Java Tutorials

Sergey Arkhipov Java Tutorials

Жыл бұрын

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

Пікірлер: 70
@ZamalSpace
@ZamalSpace 7 ай бұрын
Спасибо за отличное объеснение! Хотелось бы еще больше видео на эту тему
@user-jk9yz7gi1h
@user-jk9yz7gi1h Жыл бұрын
Самое понятное объяснение монад, так держать!)
@RenderDragon
@RenderDragon Жыл бұрын
Очень интересно, как вам идея сделать видео про асинхронное программирование в Java?
@arhitutorials
@arhitutorials Жыл бұрын
Давно собираюсь, но все не могу придумать подходящий пример, на котором можно все доходчиво показать.
@liamfreezo6680
@liamfreezo6680 Жыл бұрын
@@arhitutorials так придумывать может не нужно, просто взять пример готовый и разобрать :)
@Skaiiur
@Skaiiur Жыл бұрын
Отличный контент! Спасибо! Повседневно использую Optional, но не думал о нём как о монаде.
@alftrd
@alftrd 10 ай бұрын
Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂
@AndreyDelay
@AndreyDelay Жыл бұрын
Спасибо за видео 🙌🏻
@Irina-cw4lw
@Irina-cw4lw Жыл бұрын
Офигеть! Очень надеюсь дойти до такого уровня, чтобы писать подобные штуки. Спасибо огромное!
@simplename2787
@simplename2787 Жыл бұрын
Спасибо за полезный урок! Для переименования нескольких переменных попробуй shift + F6
@user-xq4wc1ge7r
@user-xq4wc1ge7r 2 ай бұрын
Вау, спасибо. Прям на пальцах все разложено. Эх, хотелось бы погрузиться в теорию, но куча отговорок мешает)
@user-cg4ly2ey6p
@user-cg4ly2ey6p Жыл бұрын
Очень круто , спасибо
@valeriyemelyanov9090
@valeriyemelyanov9090 Жыл бұрын
Спасибо!!!
@olegshirko5456
@olegshirko5456 Жыл бұрын
Спасибо! Норм объяснил, многое стало на место. Снимай исчо!
@1SkyMan11
@1SkyMan11 Жыл бұрын
дай тебе бог здоровья
@phil2964
@phil2964 Жыл бұрын
👍👍👍 спасибо
@sergeyka347
@sergeyka347 Жыл бұрын
полезно. лайк
@EEEppt
@EEEppt Жыл бұрын
Вот теперь стало понятнее, что билдер и монада не одно и то же )
@Libra7by
@Libra7by Жыл бұрын
Что только джависты не придумают, что бы Котлином не пользоваться! :)
@edwardfreedom
@edwardfreedom Жыл бұрын
так котлин на джаве написан, смысл этой прослойки?
@user-oi7xs9st3i
@user-oi7xs9st3i Жыл бұрын
😂😂😂😂
@Libra7by
@Libra7by Жыл бұрын
@@edwardfreedom Залет на собесе за такой ответ, Николай.
@dddsss12345
@dddsss12345 Жыл бұрын
@@edwardfreedom а java на С написан.
@edwardfreedom
@edwardfreedom Жыл бұрын
@@dddsss12345 а с на асэмблере
@DHARMA252
@DHARMA252 3 күн бұрын
Услышал про монады сразу подумал про Haskell.
@mksmsmirnov
@mksmsmirnov Жыл бұрын
"Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!
@BigIdler
@BigIdler Жыл бұрын
Теория категорий в математике
@Eduard.Kardashov
@Eduard.Kardashov Жыл бұрын
монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг
@vital_63_
@vital_63_ 7 ай бұрын
После просмотра твоего видоса про генерацию шума хочется спросить: а эти облака на конечной заставке - настоящие? )
@maksim33rus
@maksim33rus Жыл бұрын
Хотел бы увидеть обзор на плагин Advanced Custom Fields
@qwerty-hc7od
@qwerty-hc7od Жыл бұрын
Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому. Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.
@Ann_Askerova
@Ann_Askerova Жыл бұрын
100 лайков этому джентльмену
@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, как я понимаю, в другом типе аргумента.
@user-cy3yi3cw4f
@user-cy3yi3cw4f 9 ай бұрын
Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список. В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat. Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.
@dzianishrip5139
@dzianishrip5139 Жыл бұрын
А если в Lazy я хочу также и Option, есть какое-то объединение монад? Т.е. пример не совсем практический.
@user-jd4rl7im6d
@user-jd4rl7im6d Жыл бұрын
Я так понимаю это собственно то, на чем основан Stream API?
@kosbarable
@kosbarable Жыл бұрын
5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?
@alexxxyzzz
@alexxxyzzz Жыл бұрын
Здравствуйте. Строка 27 это реализация тела метода apply из строки 23. А в строке 23 в вызываемый метод передается поле value конкретного экземпляра.
@sergeyka347
@sergeyka347 Жыл бұрын
Только не пойму, в чем преимущество, в этом способе лейзи, перед тем если мы просто напишем саплайер?
@user-xc5cx7lh4l
@user-xc5cx7lh4l Жыл бұрын
Гораздо больше напоминает не билддера а цепочку (chain of responsibility)
@kartushinav
@kartushinav Жыл бұрын
скорее декоратор
@mitruslatovous6
@mitruslatovous6 Жыл бұрын
Константы именуются в стиле CONSTANT_CASE. За все остальное - спасибо! )
@andreymanankov7423
@andreymanankov7423 Жыл бұрын
Анекдот чуть более закрученный на самом деле Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели. Снизились они и спрашивают мужика: - Скажите, сэр, где мы находимся? - На воздушном шаре. - Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит: - Ватсон, мы в Росиии! - Холмс, а с чего вы взяли, что мы в России? - Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его ответ был абсолютно точен. И в третьих - абсолютно бесполезен! Значит это был програмист. А только в России программист может работать пастухом.
@sjavaoradev
@sjavaoradev 9 ай бұрын
получается каждый раз когда мы вызваем map - мы возращаем новый инстанс Monad ?
@arhitutorials
@arhitutorials 9 ай бұрын
Да.
@sjavaoradev
@sjavaoradev 9 ай бұрын
а это правильно ? @@arhitutorials
@arhitutorials
@arhitutorials 9 ай бұрын
@@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.
@sjavaoradev
@sjavaoradev 9 ай бұрын
а, ок забыл что монад должен быть обязательно Immutable . Спасибо !@@arhitutorials
@eternalgreed6715
@eternalgreed6715 Жыл бұрын
А как поглубже и пофундаментальнее изучить монады?
@eternalgreed6715
@eternalgreed6715 Жыл бұрын
Интересно было бы послушать более научное объяснение. И ещё вопрос у вас математическое образование?)
@arhitutorials
@arhitutorials Жыл бұрын
@@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное. У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)
@eternalgreed6715
@eternalgreed6715 Жыл бұрын
@@arhitutorials круто, спасибо большое. А какой вуз ?
@arhitutorials
@arhitutorials Жыл бұрын
Сейчас этот вуз называется СевГУ
@caffeinejavacode1475
@caffeinejavacode1475 Жыл бұрын
Как углубиться в функциональщину, чтоб лучше понмать написаные вами функции flatmap и map? У меня больше аналитическое мышление чем абстрактное
@user-mg8md7xw2w
@user-mg8md7xw2w Жыл бұрын
Cпасибо за хорошую ,легкую подачу. Хочется про JavaFx(еще актуальна?) и lambok maven(gradle)
@user-ib8rv1vr4r
@user-ib8rv1vr4r Жыл бұрын
Не ленюсь даже комментарий оставить.
@YWNWA-ZXC
@YWNWA-ZXC 10 ай бұрын
так Optional это и есть Monad? зачем создавать отдельный?
@user-mt2if1ht8n
@user-mt2if1ht8n Жыл бұрын
17:21 содержимое flatMapSingle (contacts -> SalonsService.getApiImpl().getMeCustomer(getSessionKey()))/ andThen(Single.defer(() -> {...}))
Java. Распараллеливаем вычисления на пуле потоков.
21:37
LOVE LETTER - POPPY PLAYTIME CHAPTER 3 | GH'S ANIMATION
00:15
DO YOU HAVE FRIENDS LIKE THIS?
00:17
dednahype
Рет қаралды 92 МЛН
THEY WANTED TO TAKE ALL HIS GOODIES 🍫🥤🍟😂
00:17
OKUNJATA
Рет қаралды 21 МЛН
Java. Класс Object. Разбор вопросов на собеседование.
21:16
Sergey Arkhipov Java Tutorials
Рет қаралды 30 М.
Java. Enum на примерах.
18:34
Sergey Arkhipov Java Tutorials
Рет қаралды 9 М.
Зачем нужны указатели в C++?
8:14
Dima
Рет қаралды 3,5 М.
Java. Многопоточность. Как устроить Deadlock.
14:39
Sergey Arkhipov Java Tutorials
Рет қаралды 9 М.
What is a monad? (Design Pattern)
2:30
A Byte of Code
Рет қаралды 317 М.
ВОПРОС-ОТВЕТ. В чём разница между Душой, Монадой и Высшим Я?
7:49
Квант Звездного Семени Starseed Quantum
Рет қаралды 800