Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂
Такой вопрос. Не совсем понятен смысл именно метода flatMap. Почему нельзя просто в методе map создать и вернуть новую монаду без дополнительного шага с созданием функции которая создаст монаду во flatMap? конкретнее, на 5:00 в 27 строке заменить return flatMap(val -> new Monad(mapFunc.apply(val))); на return new Monad(mapFunc.apply(value));
Если попытаться заинлайнить реализацию flatMap() в метод map(), то идея сначала создаёт такую конструкцию: return ((Function) val -> new Monad(mapFunc.apply(val))).apply(value); и тут же предлагает упростить до: return new Monad(mapFunc.apply(value)); т.е. эффективно это одно и то же. Т.е. на вопрос "почему нельзя" ответ - "можно". И да, получается, что в варианте с вызовом flatMap() дополнительно создаётся промежуточная лямбда. А смысл flatMap, как я понимаю, в другом типе аргумента.
монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг
5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?
@@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.
Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список. В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat. Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.
Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому. Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.
@@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное. У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)
"Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!
Анекдот чуть более закрученный на самом деле Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели. Снизились они и спрашивают мужика: - Скажите, сэр, где мы находимся? - На воздушном шаре. - Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит: - Ватсон, мы в Росиии! - Холмс, а с чего вы взяли, что мы в России? - Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его ответ был абсолютно точен. И в третьих - абсолютно бесполезен! Значит это был програмист. А только в России программист может работать пастухом.
Спасибо за отличное объеснение! Хотелось бы еще больше видео на эту тему
Самое понятное объяснение монад, так держать!)
Отличный контент! Спасибо! Повседневно использую Optional, но не думал о нём как о монаде.
Офигеть! Очень надеюсь дойти до такого уровня, чтобы писать подобные штуки. Спасибо огромное!
Очень интересно, как вам идея сделать видео про асинхронное программирование в Java?
Давно собираюсь, но все не могу придумать подходящий пример, на котором можно все доходчиво показать.
@@arhitutorials так придумывать может не нужно, просто взять пример готовый и разобрать :)
Проще говоря монады - это шаблон проектирования, когда есть обёртка для значений, функция оборачивания, и функция маппинга обёрнутых значений(flatMap в данном случае). Всё остальное это нюансы применения. Стримы, флаксы, опшиналы применяют этот шаблон - поэтому название у всех на слуху. Сложность обычно вызывает потому что всё сразу сваливают в одну кашу 🙂
дай тебе бог здоровья
Очень круто , спасибо
Спасибо за видео 🙌🏻
Спасибо! Норм объяснил, многое стало на место. Снимай исчо!
Спасибо!!!
17:21 содержимое flatMapSingle (contacts -> SalonsService.getApiImpl().getMeCustomer(getSessionKey()))/ andThen(Single.defer(() -> {...}))
Вау, спасибо. Прям на пальцах все разложено. Эх, хотелось бы погрузиться в теорию, но куча отговорок мешает)
Спасибо за полезный урок! Для переименования нескольких переменных попробуй shift + F6
👍👍👍 спасибо
Такой вопрос. Не совсем понятен смысл именно метода flatMap. Почему нельзя просто в методе map создать и вернуть новую монаду без дополнительного шага с созданием функции которая создаст монаду во flatMap?
конкретнее, на 5:00 в 27 строке заменить
return flatMap(val -> new Monad(mapFunc.apply(val)));
на
return new Monad(mapFunc.apply(value));
Если попытаться заинлайнить реализацию flatMap() в метод map(), то идея сначала создаёт такую конструкцию:
return ((Function) val -> new Monad(mapFunc.apply(val))).apply(value);
и тут же предлагает упростить до:
return new Monad(mapFunc.apply(value));
т.е. эффективно это одно и то же. Т.е. на вопрос "почему нельзя" ответ - "можно". И да, получается, что в варианте с вызовом flatMap() дополнительно создаётся промежуточная лямбда.
А смысл flatMap, как я понимаю, в другом типе аргумента.
А если в Lazy я хочу также и Option, есть какое-то объединение монад? Т.е. пример не совсем практический.
монада с Optional похожа на Maybe из RxJava - и когда первый раз работаешь с Rx и код перестает работать, в том, смысле, что код запустился и ничего не произошло - это выносит мозг
5:06 flatMap понятный метод, ясно что получает параметром Function и возвращает результат работы этой Function, но с методом map, который внутри себя вызывает flatMap появляется вопрос -- что в этом случае есть val на строке 27? откуда возьмётся эта переменная?
Здравствуйте. Строка 27 это реализация тела метода apply из строки 23. А в строке 23 в вызываемый метод передается поле value конкретного экземпляра.
полезно. лайк
После просмотра твоего видоса про генерацию шума хочется спросить: а эти облака на конечной заставке - настоящие? )
Вот теперь стало понятнее, что билдер и монада не одно и то же )
Хотел бы увидеть обзор на плагин Advanced Custom Fields
Я так понимаю это собственно то, на чем основан Stream API?
получается каждый раз когда мы вызваем map - мы возращаем новый инстанс Monad ?
Да.
а это правильно ? @@arhitutorials
@@sjavaoradev ну конечно. В функциональном программировании, к которому относятся монады, вообще все переменные считаются иммутабельными. Поменять значение переменной нельзя, можно только создать новую.
а, ок забыл что монад должен быть обязательно Immutable . Спасибо !@@arhitutorials
Только не пойму, в чем преимущество, в этом способе лейзи, перед тем если мы просто напишем саплайер?
Кто, интересно, первый решил, что надо монадный метод называть flatMap? Flat это flattening, уплощение. Когда был список списков списков, а стал просто список.
В Хаскеле есть понятие Functor, что, в общем, по сути, монада, и такая функция называется там называется fmap. 'F' от Functor, а не от flat.
Здесь, подозреваю, кто-то что-то однажды неправильно услышал, понял, додумал, а теперь все повторяют.
Услышал про монады сразу подумал про Haskell.
Спасибо за видео. Интересно было посмотреть, как можно сделать это в Java самому.
Но... Монады - эндофункторы! А не "интерфункторы" )) Приставка "эндо" как раз и говорит о направленности внутрь себя.
чат в тг не находит
@@dmaberlin t.me/+TH9AoBq_ct6RYZgz
А как поглубже и пофундаментальнее изучить монады?
Интересно было бы послушать более научное объяснение. И ещё вопрос у вас математическое образование?)
@@eternalgreed6715 Фундаментальнее - это надо в теорию категорий смотреть. Еще можно попробовать писать на Хаскеле, там без монад никуда, так как все иммутабельное.
У меня около-математическое образование. Специальность - системы автоматики - это как раз на стыке техники, математики и программирования. По этому я из тех, кто знает всего понемногу)
@@arhitutorials круто, спасибо большое. А какой вуз ?
Сейчас этот вуз называется СевГУ
Как углубиться в функциональщину, чтоб лучше понмать написаные вами функции flatmap и map?
У меня больше аналитическое мышление чем абстрактное
100 лайков этому джентльмену
"Моноид в категории интерфункторов" - сделайте видео с более глубоким погружением в математику, пожалуйста. Это теория полей? Какие книги по математике для программиста Вы бы посоветовали? Практичные книги по математике для программистов, непрактичные и понятные, непрактичные и интересные с уклоном в математику? Спасибо за урок!
Теория категорий в математике
Анекдот чуть более закрученный на самом деле
Летят Холмс с Ватсоном на воздушном шаре. И спят в полете. Просыпаются
над какой-то незнакомой землей, видят - внизу какой-то хрен коров пасет. Хотят узнать куда они прилетели.
Снизились они и спрашивают мужика:
- Скажите, сэр, где мы находимся?
- На воздушном шаре.
- Спасибо, сэр! - и летят вверх. Холмс задумчиво говорит:
- Ватсон, мы в Росиии!
- Холмс, а с чего вы взяли, что мы в России?
- Это элементарно! Во-первых, он долго думал над ответом. Во-вторых, его
ответ был абсолютно точен. И в третьих - абсолютно бесполезен!
Значит это был програмист. А только в России программист может работать пастухом.
Что только джависты не придумают, что бы Котлином не пользоваться! :)
так котлин на джаве написан, смысл этой прослойки?
😂😂😂😂
@@edwardfreedom Залет на собесе за такой ответ, Николай.
@@edwardfreedom а java на С написан.
@@dddsss12345 а с на асэмблере
Cпасибо за хорошую ,легкую подачу. Хочется про JavaFx(еще актуальна?) и lambok maven(gradle)
Гораздо больше напоминает не билддера а цепочку (chain of responsibility)
скорее декоратор
Не ленюсь даже комментарий оставить.
Константы именуются в стиле CONSTANT_CASE. За все остальное - спасибо! )
так Optional это и есть Monad? зачем создавать отдельный?