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

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

Комментарии • 69

  • @ZamalSpace
    @ZamalSpace 6 месяцев назад +1

    Спасибо за отличное объеснение! Хотелось бы еще больше видео на эту тему

  • @user-jk9yz7gi1h
    @user-jk9yz7gi1h Год назад +3

    Самое понятное объяснение монад, так держать!)

  • @Irina-cw4lw
    @Irina-cw4lw Год назад +1

    Офигеть! Очень надеюсь дойти до такого уровня, чтобы писать подобные штуки. Спасибо огромное!

  • @Skaiiur
    @Skaiiur Год назад +2

    Отличный контент! Спасибо! Повседневно использую Optional, но не думал о нём как о монаде.

  • @alftrd
    @alftrd 9 месяцев назад +3

    Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂

  • @user-xq4wc1ge7r
    @user-xq4wc1ge7r 2 месяца назад

    Вау, спасибо. Прям на пальцах все разложено. Эх, хотелось бы погрузиться в теорию, но куча отговорок мешает)

  • @RenderDragon
    @RenderDragon Год назад +23

    Очень интересно, как вам идея сделать видео про асинхронное программирование в Java?

    • @arhitutorials
      @arhitutorials  Год назад +9

      Давно собираюсь, но все не могу придумать подходящий пример, на котором можно все доходчиво показать.

    • @liamfreezo6680
      @liamfreezo6680 Год назад +2

      @@arhitutorials так придумывать может не нужно, просто взять пример готовый и разобрать :)

  • @simplename2787
    @simplename2787 Год назад

    Спасибо за полезный урок! Для переименования нескольких переменных попробуй shift + F6

  • @AndreyDelay
    @AndreyDelay Год назад

    Спасибо за видео 🙌🏻

  • @1SkyMan11
    @1SkyMan11 Год назад +1

    дай тебе бог здоровья

  • @user-cg4ly2ey6p
    @user-cg4ly2ey6p Год назад

    Очень круто , спасибо

  • @olegshirko5456
    @olegshirko5456 Год назад

    Спасибо! Норм объяснил, многое стало на место. Снимай исчо!

  • @valeriyemelyanov9090
    @valeriyemelyanov9090 Год назад

    Спасибо!!!

  • @sergeyka347
    @sergeyka347 Год назад

    полезно. лайк

  • @phil2964
    @phil2964 Год назад

    👍👍👍 спасибо

  • @EEEppt
    @EEEppt Год назад

    Вот теперь стало понятнее, что билдер и монада не одно и то же )

  • @vital_63_
    @vital_63_ 6 месяцев назад

    После просмотра твоего видоса про генерацию шума хочется спросить: а эти облака на конечной заставке - настоящие? )

  • @Eduard.Kardashov
    @Eduard.Kardashov Год назад

    монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг

  • @maksim33rus
    @maksim33rus Год назад

    Хотел бы увидеть обзор на плагин Advanced Custom Fields

  • @Ann_Askerova
    @Ann_Askerova Год назад

    100 лайков этому джентльмену

  • @dzianishrip5139
    @dzianishrip5139 Год назад

    А если в Lazy я хочу также и Option, есть какое-то объединение монад? Т.е. пример не совсем практический.

  • @user-cy3yi3cw4f
    @user-cy3yi3cw4f 8 месяцев назад

    Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список.
    В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat.
    Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.

  • @Libra7by
    @Libra7by Год назад +13

    Что только джависты не придумают, что бы Котлином не пользоваться! :)

    • @edwardfreedom
      @edwardfreedom Год назад +1

      так котлин на джаве написан, смысл этой прослойки?

    • @user-oi7xs9st3i
      @user-oi7xs9st3i Год назад

      😂😂😂😂

    • @Libra7by
      @Libra7by Год назад +1

      @@edwardfreedom Залет на собесе за такой ответ, Николай.

    • @dzmitryshalukhov1681
      @dzmitryshalukhov1681 Год назад +2

      @@edwardfreedom а java на С написан.

    • @edwardfreedom
      @edwardfreedom Год назад +1

      @@dzmitryshalukhov1681 а с на асэмблере

  • @qwerty-hc7od
    @qwerty-hc7od Год назад

    Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому.
    Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.

  • @mksmsmirnov
    @mksmsmirnov Год назад +1

    "Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!

    • @BigIdler
      @BigIdler Год назад

      Теория категорий в математике

  • @sergeyka347
    @sergeyka347 Год назад

    Только не пойму, в чем преимущество, в этом способе лейзи, перед тем если мы просто напишем саплайер?

  • @user-jd4rl7im6d
    @user-jd4rl7im6d Год назад +1

    Я так понимаю это собственно то, на чем основан Stream API?

  • @darkyver2708
    @darkyver2708 Год назад +1

    Такой вопрос. Не совсем понятен смысл именно метода 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, как я понимаю, в другом типе аргумента.

  • @kosbarable
    @kosbarable Год назад

    5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?

    • @alexxxyzzz
      @alexxxyzzz Год назад

      Здравствуйте. Строка 27 это реализация тела метода apply из строки 23. А в строке 23 в вызываемый метод передается поле value конкретного экземпляра.

  • @sjavaoradev
    @sjavaoradev 9 месяцев назад

    получается каждый раз когда мы вызваем map - мы возращаем новый инстанс Monad ?

    • @arhitutorials
      @arhitutorials  9 месяцев назад +1

      Да.

    • @sjavaoradev
      @sjavaoradev 9 месяцев назад

      а это правильно ? @@arhitutorials

    • @arhitutorials
      @arhitutorials  9 месяцев назад

      @@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.

    • @sjavaoradev
      @sjavaoradev 9 месяцев назад

      а, ок забыл что монад должен быть обязательно Immutable . Спасибо !@@arhitutorials

  • @user-mg8md7xw2w
    @user-mg8md7xw2w Год назад

    Cпасибо за хорошую ,легкую подачу. Хочется про JavaFx(еще актуальна?) и lambok maven(gradle)

  • @eternalgreed6715
    @eternalgreed6715 Год назад +1

    А как поглубже и пофундаментальнее изучить монады?

    • @eternalgreed6715
      @eternalgreed6715 Год назад

      Интересно было бы послушать более научное объяснение. И ещё вопрос у вас математическое образование?)

    • @arhitutorials
      @arhitutorials  Год назад +3

      @@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное.
      У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)

    • @eternalgreed6715
      @eternalgreed6715 Год назад

      @@arhitutorials круто, спасибо большое. А какой вуз ?

    • @arhitutorials
      @arhitutorials  Год назад +2

      Сейчас этот вуз называется СевГУ

    • @caffeinejavacode1475
      @caffeinejavacode1475 Год назад +3

      Как углубиться в функциональщину, чтоб лучше понмать написаные вами функции flatmap и map?
      У меня больше аналитическое мышление чем абстрактное

  • @mitruslatovous6
    @mitruslatovous6 Год назад

    Константы именуются в стиле CONSTANT_CASE. За все остальное - спасибо! )

  • @user-ib8rv1vr4r
    @user-ib8rv1vr4r Год назад

    Не ленюсь даже комментарий оставить.

  • @user-xc5cx7lh4l
    @user-xc5cx7lh4l Год назад +1

    Гораздо больше напоминает не билддера а цепочку (chain of responsibility)

    • @kartushinav
      @kartushinav Год назад

      скорее декоратор

  • @andreymanankov7423
    @andreymanankov7423 Год назад +1

    Анекдот чуть более закрученный на самом деле
    Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются
    над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели.
    Снизились они и спрашивают мужика:
    - Скажите, сэр, где мы находимся?
    - На воздушном шаре.
    - Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит:
    - Ватсон, мы в Росиии!
    - Холмс, а с чего вы взяли, что мы в России?
    - Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его
    ответ был абсолютно точен. И в третьих - абсолютно бесполезен!
    Значит это был програмист. А только в России программист может работать пастухом.

  • @YWNWA-ZXC
    @YWNWA-ZXC 9 месяцев назад

    так Optional это и есть Monad? зачем создавать отдельный?

  • @user-mt2if1ht8n
    @user-mt2if1ht8n Год назад

    17:21 содержимое flatMapSingle (contacts -> SalonsService.getApiImpl().getMeCustomer(getSessionKey()))/ andThen(Single.defer(() -> {...}))