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

Поділитися
Вставка
  • Опубліковано 18 гру 2024

КОМЕНТАРІ • 72

  • @ZamalSpace
    @ZamalSpace Рік тому +1

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

  • @sd1-df
    @sd1-df 2 роки тому +4

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

  • @Irina-cw4lw
    @Irina-cw4lw Рік тому +1

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

  • @Skaiiur
    @Skaiiur 2 роки тому +2

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

  • @alftrd
    @alftrd Рік тому +3

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

  • @1SkyMan11
    @1SkyMan11 2 роки тому +1

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

  • @RenderDragon
    @RenderDragon 2 роки тому +23

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

    • @arhitutorials
      @arhitutorials  2 роки тому +10

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

    • @liamfreezo6680
      @liamfreezo6680 Рік тому +2

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

  • @olegshirko5456
    @olegshirko5456 2 роки тому

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

  • @Николай-х3б4ф
    @Николай-х3б4ф 8 місяців тому

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

  • @ВладиНайз
    @ВладиНайз 2 роки тому

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

  • @simplename2787
    @simplename2787 2 роки тому

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

  • @user-mt2if1ht8n
    @user-mt2if1ht8n 2 роки тому

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

  • @AndreyDelay
    @AndreyDelay 2 роки тому

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

  • @EEEppt
    @EEEppt 2 роки тому

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

  • @darkyver2708
    @darkyver2708 2 роки тому +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 конкретного экземпляра.

  • @Eduard.Kardashov
    @Eduard.Kardashov Рік тому

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

  • @valeriyemelyanov9090
    @valeriyemelyanov9090 2 роки тому

    Спасибо!!!

  • @andreymanankov7423
    @andreymanankov7423 Рік тому +1

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

  • @Ann_Askerova
    @Ann_Askerova 2 роки тому

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

  • @DHARMA252
    @DHARMA252 5 місяців тому

    Услышал про монады сразу подумал про Haskell.

  • @ДаниилМонахов-р8ч

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

  • @phil2964
    @phil2964 2 роки тому

    👍👍👍 спасибо

  • @sjavaoradev
    @sjavaoradev Рік тому

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

    • @arhitutorials
      @arhitutorials  Рік тому +1

      Да.

    • @sjavaoradev
      @sjavaoradev Рік тому

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

    • @arhitutorials
      @arhitutorials  Рік тому

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

    • @sjavaoradev
      @sjavaoradev Рік тому

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

  • @dzianishrip5139
    @dzianishrip5139 Рік тому

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

  • @vital_63_
    @vital_63_ Рік тому

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

  • @Libra7by
    @Libra7by 2 роки тому +14

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

    • @edwardfreedom
      @edwardfreedom 2 роки тому +1

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

    • @АлексейА-ц5м
      @АлексейА-ц5м 2 роки тому

      😂😂😂😂

    • @Libra7by
      @Libra7by 2 роки тому +1

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

    • @dddsss12345
      @dddsss12345 2 роки тому +2

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

    • @edwardfreedom
      @edwardfreedom 2 роки тому +1

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

  • @maksim33rus
    @maksim33rus 2 роки тому

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

  • @ЮрийКлименко-к3щ
    @ЮрийКлименко-к3щ 2 роки тому +1

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

  • @qwerty-hc7od
    @qwerty-hc7od Рік тому

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

  • @eternalgreed6715
    @eternalgreed6715 2 роки тому +1

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

    • @eternalgreed6715
      @eternalgreed6715 2 роки тому

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

    • @arhitutorials
      @arhitutorials  2 роки тому +3

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

    • @eternalgreed6715
      @eternalgreed6715 2 роки тому

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

    • @arhitutorials
      @arhitutorials  2 роки тому +2

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

    • @caffeinejavacode1475
      @caffeinejavacode1475 2 роки тому +3

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

  • @sergeyka347
    @sergeyka347 2 роки тому

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

  • @mksmsmirnov
    @mksmsmirnov 2 роки тому +1

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

    • @BigIdler
      @BigIdler 2 роки тому

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

  • @sergeyka347
    @sergeyka347 2 роки тому

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

  • @dmaberlin
    @dmaberlin 2 місяці тому

    чат в тг не находит

    • @arhitutorials
      @arhitutorials  2 місяці тому

      @@dmaberlin t.me/+TH9AoBq_ct6RYZgz

  • @ЮрійАндрашко-у8я
    @ЮрійАндрашко-у8я 2 роки тому +1

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

    • @kartushinav
      @kartushinav Рік тому

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

  • @СергейЮшкевич-в5ь

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

  • @БогданЗараник
    @БогданЗараник 2 роки тому

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

  • @mitruslatovous6
    @mitruslatovous6 2 роки тому

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

  • @KyivanEnjoyer
    @KyivanEnjoyer Рік тому

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