Что значит моноид в программировании?

  Рет қаралды 21,642

S0ER

S0ER

Күн бұрын

Пікірлер: 106
@АртурЗарипов-ю9п
@АртурЗарипов-ю9п 2 жыл бұрын
Вы все больше превращаетесь в хорошего педагога. Стали начинать с бананов и яблок, а не сразу лезть в редактор кода. Стало намного понятнее! Большое спасибо и удачи!
@scarlatum
@scarlatum 2 жыл бұрын
Ждём теперь объяснение функторов и эндофункторов! с:
@snatvb
@snatvb 2 жыл бұрын
+
@avpmk
@avpmk Жыл бұрын
Функтор тоже очень простая штука, про монады, аппликативы, стрелки Клейсли хорошее объяснение бы
@pylounge
@pylounge 2 жыл бұрын
Если и дальше пойдём по "функциональным" приблудам, то голосую за каррирование)
@artishoo
@artishoo 2 жыл бұрын
Кст это не сложно. Главное понимать что такое лямбды и как их готовить
@МаксимХвостов-м1й
@МаксимХвостов-м1й 2 жыл бұрын
Дак у Соера есть видео про каррирование… поищите.
@Дмитрий-р4х9ю
@Дмитрий-р4х9ю 4 ай бұрын
Моноид как бинарное отношение (в вашем примере - сумма) над множеством, например R, всё-таки является коммутативным моноидом. Это не противоречит сказанному, но вносит некоторую ясность. Спасибо за видео!
@Tiolych
@Tiolych 2 жыл бұрын
Чтобы было понятнее, хорошо бы привести пример рабочего кода, или ссылочку на него.
@nikolaymatveychuk6145
@nikolaymatveychuk6145 2 жыл бұрын
Там всё просто. Например операция определения максимального числа в массиве. Можно создать функцию, в которой будем бежать по массиву и запоминать максимальный элемент, но такую функцию нельзя будет выполнять параллельно. Вот тут как раз и выходит на арену моноид, когда мы определяем операцию как (a + b = max(a, b)), представляем массив в виде последовательности операций A[0] + A[1] + A[2] + A[3] + A[4] + A[5] + ... в этом случае мы можем искать максимум хоть в 1 поток, хоть в 1000 потоков, потому что в каждом из потоков функция сможет взять любых 2 числа из массива и заменить их на результат операции с ними, тем самым сделав результирующий массив на 1 элемент короче. Когда в результирующем массиве останется всего один элемент - он и будет максимальным
@Tiolych
@Tiolych 2 жыл бұрын
@@nikolaymatveychuk6145 Спасибо за развернутый ответ. Поискал в интернетах, нашел на плюсах реализацию, примерно идею понял.
@gordeyzimakov5267
@gordeyzimakov5267 Ай бұрын
Суперспасибо!
@artishoo
@artishoo 2 жыл бұрын
Соер, отличное видео, было весьма информативно. Выпускай такое почаще!
@ITKAMASUTRA
@ITKAMASUTRA 2 жыл бұрын
Чётенько! 👍👍 спасибо!
@qwertymangames1800
@qwertymangames1800 Ай бұрын
1:47 нельзя складывать разные типы. Пример из математики: комплексные числа и кватернионы. Они имеют реальную часть и вымышленную.
@ИльяКрасняк-ц8б
@ИльяКрасняк-ц8б 2 жыл бұрын
Классно что вы добрались до функциональщины, ждем эффекты и монады)
@AB-yl5xi
@AB-yl5xi 2 жыл бұрын
С программированием понятно, теперь осталось понять, что значит моноид в категории эндофункторов!
@andreekzz
@andreekzz 2 жыл бұрын
нет ничего лучше чем такое видео в пятницу в 5 вечера на уставший мозг. Спасибо большое!
@dannycyberwalker
@dannycyberwalker 2 жыл бұрын
Ждём про монаду)
@alexandr-v
@alexandr-v 2 жыл бұрын
Интересен был бы пример его использования, в каких случаях без него не обойтись и показать, вот тут то мы применяем моноид.
@bonumsignum7017
@bonumsignum7017 Жыл бұрын
fold с моноидом отлично сочетается
@vryaboshapko
@vryaboshapko 2 жыл бұрын
Учитывая определение на 2:33, интерфейс на 4:46 выглядит некорректно. Моноид - это множество, облдающее определёнными характеристиками, а показанный интерфейс описывает только одну операцию над этим множеством, причём слишком широко. То есть, для описания моноида нам надо было описать тип T, причём так, чтобы было понятно, что он полугруппа (то есть, на нём определена операция, по которой видно. что она бинарная, и что она ассоциативная), и что существует нейтральный экземпляр T. Осталось придумать как это сделать в коде 😅
@Vladimir_Java_dev
@Vladimir_Java_dev 2 жыл бұрын
Занятное слово это - "моноид". Звучит необычно. Прям как "тангенциальный вентилятор". Ну ок. А что за операции такие, когда в ходе обработки множества даты в случае эксепшена на одной из операций мы этот эксепшен осознанно прячем и это не влияет на итоговый результат? Я вот для такого случая вижу, что-вроде "обработаны элементы .... с результатом Х, элементы a, b, c..m обработать не удалось" и там далее юзеру что-то на выбор что со всем этим делать. Но вот что это за операция такая может быть? Если на итоговый результат не влияет - то может ну его тратить время на операцию?)
@ВячеславДудка-к2м
@ВячеславДудка-к2м Жыл бұрын
Понятно - задача про грибы и огурцы)))
@xander-on-the-earth
@xander-on-the-earth 2 жыл бұрын
С измерением температуры, мне кажется, несколько неудачный пример. Здесь-то как раз должно выбрасываться исключение или каким-то другим образом не позволять получить результат, потому, что он некорректный. А так понятно, спасибо большое! Люблю смотреть ваши видео!
@vovanchik_ru4208
@vovanchik_ru4208 2 жыл бұрын
зачем сразу исключение. Можно ведь вернуть ничего и ничего не делать :) Зачем сразу в крайности с исключениями :) Например если цифровой градусник, то, если делать чтение памяти чаще чем будут туда записываться данные, это же не значит, что надо кидать исключение, а надо просто ничего не делать :) Если градусник аналоговый, то ацп всё равно сделает его цифровым :) И получается, что исключение тут к операции с моноидом не имеет отношения, а только для более низкого, аппаратного уровня. Или уровня протокола.
@xander-on-the-earth
@xander-on-the-earth 2 жыл бұрын
«Критикуешь - предлагай!» Я пытаюсь сходу придумать более удачный пример. Сбор денег «на ремонт школы» - кто-то дал много, кто-то мало, кто-то совсем ничего. А кто-то вообще не выходит на связь или бросает трубку. Вот такие элементы можно считать «0» при подсчёте общей суммы. Такой житейский пример соответствует идее моноида?
@xander-on-the-earth
@xander-on-the-earth 2 жыл бұрын
@@vovanchik_ru4208 , как я понял моноиды имеют смысл только при некоем «суммировании» отдельных элементов множества. Так здесь мы хотим получить среднюю температуру. Это же как в анекдоте про больницу. Отдельный градусник - это не моноид, он просто показывает последнее занесённое значение (неважно в цифровом или аналоговом виде)
@vovanchik_ru4208
@vovanchik_ru4208 2 жыл бұрын
@@xander-on-the-earth как я понял, моноиды - шаблон для операций с одинаковым интерфейсом и/или действием/результатом по умолчанию. И я так понял, что дополнительной логикой, моноиды не ограничены. Суммирование, это как пример хорошего распараллеливания процесса, а шта там будет происходить в нутрях, какие мат операции, уже не особо важно. Главное, чтобы операции происходили с одинаковым интерфейсом
@xander-on-the-earth
@xander-on-the-earth 2 жыл бұрын
@@vovanchik_ru4208 , да, но они не всегда применимы. Вот пример с опросом термометров как раз и не подходит для этого шаблона. Выше в нашей ветке комментариев я придумал житейский пример со школой, где как раз используются моноиды. Это если я правильно понял идею.
@oshyshko
@oshyshko 2 жыл бұрын
на 4:46 у вас не совсем корректное определение интерфейса: op имеет 4 аргумента: this, a, b и результат, в должен 3. И нет метода, который бы возвращал нейтральный элемент. Понятно, что в Java/OOP такой интерфейс определить нельзя, (из-за того, что всегда есть this, по типу которого происходит диспетчеризация -- но это уже детали). В любом случае, об этих нюансах стоило бы упомянуть, иначе это запутывает и создает вопросы. Ещё, было бы полезно упомянуть примеры моноидов, которыми программисты пользуются с первых дней: String/""/concat, HashMap/new/mergeWith etc.
@yarosav5396
@yarosav5396 2 жыл бұрын
не с абстрактной алгебры, а с теорката, теоркат в свою очередь относится к абстрактной алгебре, но моноиды не проходят в теории групп и теории множеств (в стандартном курсе) и к чему тут шаблон проектирования
@AyratVideo
@AyratVideo 2 жыл бұрын
Интересно и доходчиво. Респект и благодарность!
@johnd1431
@johnd1431 2 жыл бұрын
Спасибо за объяснение!
@avpmk
@avpmk Жыл бұрын
5:13 Не, нифига это полугруппа) Чтобы этот интерфейс стал моноидом нужно ещё добавить метод (или поле) возвращающий нейтральный элемент.
@avpmk
@avpmk Жыл бұрын
Но видно отличное, Соер, спасибо!
@alexeymk8618
@alexeymk8618 2 жыл бұрын
Посмотрел и в очередной раз убедился насколько я глуп. Спасибо за видео
@ИапГоревич
@ИапГоревич 2 жыл бұрын
Это нормально (надеюсь, потому что я тоже глуп)
@mjeday
@mjeday 3 ай бұрын
Не понял вообще ничего. На 4:50 как метод интерфейса, который является классом по сути, может принимать дженерик? Бэкэндер, знаю js поверхностно
@vladisslavss
@vladisslavss Жыл бұрын
Продолжаем тему!) Лукас и коммент в поддержку канала 🔥
@SobolionV
@SobolionV 2 жыл бұрын
Круто объяснил, спасибо. Я понял, ничего ранее не слышав об этом (кроме самого слова).
@canniballissimo
@canniballissimo 2 жыл бұрын
с неожиданной стороны зашёл!
@Johniooooo
@Johniooooo 2 жыл бұрын
Пример с градусником какой-то странный, потому что нельзя возвращать 0 если температура не 0, нужно сообщать о неудавшемся измерении.
@user-wf6lc5jz9x
@user-wf6lc5jz9x 2 жыл бұрын
Да конечно, в любой непонятной ситуации надо падать, а кому надо будет тот поймает, а то наcоветуют 0 вернуть, что приведет к искажению, или того хуже null, что вызовет падение в другом месте, а потом ищи свищи
@МаксимХвостов-м1й
@МаксимХвостов-м1й 2 жыл бұрын
Смотря какую ты задачу решаешь, если тест градусника на работоспособность то да, если просто среднюю температуру за день в своей комнате то 0 подойдёт.
@Johniooooo
@Johniooooo 2 жыл бұрын
@@МаксимХвостов-м1й нет, для выяснения средней температуры 0 не подойдёт, потому что он искажает результат)
@МаксимХвостов-м1й
@МаксимХвостов-м1й 2 жыл бұрын
@@Johniooooo Да что то я поспешил ;)
@lzs2639
@lzs2639 2 жыл бұрын
Нейтральный элемент: • х == х+0 или х-0 • х == х*1 или х/1 Пример нейтральных элементов: • пробелы в тексте • зазор между людьми, стоя́щими в очереди • свободные участки между домами, где можно поставить ещё дома • меха гармошки • дробная часть числа, если при операциях она не меняет целую часть • все виды шаблона "... сверху бантик", типа: "Слон и моська", блохи на собаке, ёлочные игрушки на ёлке, мел в таблетках, "мёртвому припарки" и тд. • замыкания (гриб) • итерации (ромашка) • рекурсии (бамбук) • каррирование (чемодан с ручкой) • шаблон Синглтон и прочие, где есть отсылка на static, default и const ------------------------ ** На уровне высоких абстракций - это пара: "name: value" где имя обязательно, а значение нейтрально (допускается отсутствие значения). То есть, конверт с маркой обязателен, пространство для письма обязательно, но само письмо нейтрально, его может и не быть в конверте. *** Отличительный признак нейтрального элемента - это его ортогональность ("невидимость"), также как горизонтальные свободные участки между дома́ми не видны на фоне вертикально заметных домов
@MrChelovek68
@MrChelovek68 9 ай бұрын
не популяризации,а вылезанию из каждого утюга адептов фп
@ДаркШнайдер
@ДаркШнайдер 2 жыл бұрын
Внатуре четко, даже пацаны срайона поняли!
@РазныеВопросы-в4ю
@РазныеВопросы-в4ю 2 жыл бұрын
если моноид - шаблон проектирования, тогда 4 яблока + 3 банана = 7 фруктов, но при условии, что банан с ботанической точки зрения признан "ягодой", тогда 4 яблока + 3 банана = 7 плодов.
@glebbondarenko67
@glebbondarenko67 2 жыл бұрын
Все четко и понятно. Спасибо
@ntvisigoth
@ntvisigoth 2 жыл бұрын
Огонь! Так понятно, еще никто не пояснял этот термин
@Fox6450
@Fox6450 2 жыл бұрын
Ничего не понял, но очень интересно
@АнимусАнанимус
@АнимусАнанимус 2 жыл бұрын
Не очень понятно, как такой интерфейс будет имплемннтирован, да и нет нейтрального элемента. Может, что-то такое? interface Monoid{ neutral() : T op(a: T, b: T) : T } Вообще, без тайпклассов все это делать как-то грустненько.
@izyumrockstar7815
@izyumrockstar7815 2 жыл бұрын
Расскажи про кортеж Tuples пожалуйста, зачем оно нужно в функциональном программировании?
@vovanchik_ru4208
@vovanchik_ru4208 2 жыл бұрын
Чтобы сократить кол-во строк кода. Чтобы вернуть результат функции сразу в несколько переменных. Или например, поменять значение переменных местами одной строкой x,y = y,x; Что тоже сокращение кода :)
@valbv
@valbv 2 жыл бұрын
Лайк! Всё до функционального программирования руки не доходят. Но с такими понятными видосами изучать будет проще
@tigranav.3960
@tigranav.3960 2 жыл бұрын
У меня вопрос. Если на императивном языки создать конечное число функций система из которых будет полной по Тьюрингу, можно ли сказать что код, использующий только их, является декларативным? (этими функциями не описывается, как делать что-то, а что именно делать)
@vryaboshapko
@vryaboshapko 2 жыл бұрын
Скорее да, чем нет. Декларативность - это просто очередной слой абстракции, который упрощает понимание кода и, иногда, его написание. Соответственно, используя императивный язык, можно написать какое-то количество кода в декларативном стиле.
@AMith-lv2cv
@AMith-lv2cv 2 жыл бұрын
4:24 что за шрифт?
@elk____
@elk____ 2 жыл бұрын
а почему тип "Т" является нейтральным элементом?
@enkryp
@enkryp 2 жыл бұрын
Пожалуйста, расскажите о микросервисах, и о том, чем микросервисы отличаются от сервисов.
@KaputTV
@KaputTV 2 жыл бұрын
микросервис - это куча монолитов) связанных APIшкой
@vovanchik_ru4208
@vovanchik_ru4208 2 жыл бұрын
@@KaputTV Главная задача сервиса, это предоставление услуги. А там уже микро, макро, нано, шмано - без разницы. Ну а чтобы вам предоставили услугу, то надо как минимум попросить её предоставить :) По этому сервисы подразумевают наличие какого-то языка взаимодействия(API) с ними. Даже монолитность не важна, т.к. сервис может общаться с другими сервисами перед тем как вам ответить.
@4sat564
@4sat564 2 жыл бұрын
звучит епе оскорбление
@andreymlv
@andreymlv 2 жыл бұрын
Правильно понял, что множество значений моноида определяется типом, над которым можно совершить ассоциативную операцию?
@pegamer3051
@pegamer3051 2 жыл бұрын
+
@IgorLynn
@IgorLynn 2 жыл бұрын
...и в котором есть нейтральный элемент
@ИванНикитин-ч7б
@ИванНикитин-ч7б 2 жыл бұрын
Слыхал, что был в украинском переводе мультика про трансформеров десептиконы были обманоиды :)
@АлексейБасов-ч7й
@АлексейБасов-ч7й 2 жыл бұрын
Если сложить 4 яблока и 3 банана получится комплексное число🤔😄 на комплексной плоскости где банан это корень из -1🤔
@tohoto2183
@tohoto2183 2 жыл бұрын
Маноид- это абстрактные типы данных ,которые в С++ очень схожи с ООП??? Правильно понял?
@scarlatum
@scarlatum 2 жыл бұрын
Это как функциональное программирование, которое по сути является вызовом методов под капотом которых императивный код. Вот и вся эта дрянь с монадами, по своей сути такое же ООП с данными и их методами. Зато как всё это звучит...
@tohoto2183
@tohoto2183 2 жыл бұрын
@@scarlatum у всех решений задач под капотом : цикл,условия, просто очередность ,ну и винегрет из этих трех ,но какие же у всех разные салаты получаются .
@Manuel-j3q
@Manuel-j3q 2 жыл бұрын
Моноид значит сделано на Mono, очевидно же.
@Alex-gn6xb
@Alex-gn6xb 2 жыл бұрын
вообще не понятно каким боком интерфейс это моноид (а если в нем два метода это моноид ? а дефолтный метод это моноид?) и как вам моноиды помогают сделать мобильное приложение или хотя бы написать апи межд двумя сервисами. откуда в сумме взялся ноль, ноль это значение переменной. а если не положено нулю там оказаться? ну, ок , с натяжкой 0 это нейтральный элемент с точки зрения неизменности результата . но переменная это не множество значений, это одно значение. с чего вдруг число стало массивом ? каким образом дженерик тип Т имеет нейтральный элемент ? с чего вы взяли какая будет операция с параметрами при имплементации ? дремучая жесть из алгебры. отличный вариант для вопроса на собеседовании , чтобы с умным лицом спросить что такое моноид а на том конце фейспалмы люди будут ловить
@romanbush5164
@romanbush5164 2 жыл бұрын
Маноид это джинерик c#)), нахрена это надо только, наверное я ещё не дорос)
@ILICH1980
@ILICH1980 2 жыл бұрын
не понимаю зачем мне эта информация... что бы умничать перед разработчиками?? любая терминология всегда является частью общения и обобщения внутри группы
@bdick8136
@bdick8136 2 жыл бұрын
Приведу пример. Ты можешь придумывать бесконечное количество вариантов записи музыки, но когда встаёт задача объяснить что и как играть другому музыканту - приходится использовать универсальный язык - ноты. Определение моноида это то же самое - способ донести свои идеи до других людей универсальным способом - языком математики. Правда бывают люди которые не могут в математику и придётся объяснять на пальцах… Но это уже другой разговор. В любом случае функтор/предикат с шаблонным параметром ещё более хуевое объяснение идеи моноида человеку не знакомому с C++ например.
@IgorTkachev
@IgorTkachev 2 жыл бұрын
Ничего сложного в моноиде нет и не надо. Ни сложного, ни моноида. Бесполезное знание о бесполезной хрени. Автору респект за потраченное время на объяснение бесполезного.
@vlatterran
@vlatterran 2 жыл бұрын
Моноид это конечно интересно, но что на счёт монады
@dann1kid
@dann1kid 2 жыл бұрын
Монада это конечно интересно, но что на счёт мониды
@ИапГоревич
@ИапГоревич 2 жыл бұрын
@@dann1kid Мониды это конечно интересно, но что на счёт мыдоны
@fedor3911
@fedor3911 2 жыл бұрын
Монада это всего лишь моноид в категории эндофункторов
@dann1kid
@dann1kid 2 жыл бұрын
@@ИапГоревич мыдона это конечно интересно, но что насчет мадины
@ИапГоревич
@ИапГоревич 2 жыл бұрын
@@dann1kid мадина это конечно интересно, но что на счёт медианы
@mlr__roal_6867
@mlr__roal_6867 Жыл бұрын
На ругательство похоже
@squid869
@squid869 2 жыл бұрын
за 12 лет программирования, сменив 3 компании, ни разу не сталкивался с понятием моноида, при том что с понятие шаблона проектирования сталкиваешься регулярно. Абсолютно не нужное определение призванное только забить мозг всяким бесполезным хламом.
@bdick8136
@bdick8136 2 жыл бұрын
В теме 26 лет. Моноиды, предикаты и функторы это норма и ни разу не хлам.
@squid869
@squid869 2 жыл бұрын
@@bdick8136 опять же... предикаты и функторы - да. Моноид - ну х.з.. Только что спросил у человека который 30 "лет в теме" (а это замечу на 4 года больше чем у вас) тоже про моноида слышал только из курса математики. В терминологии программирования это понятие крайне бесполезное. Жду от вас историй от человека у которого писюн длиннее... точнее опыта больше.
@bdick8136
@bdick8136 2 жыл бұрын
@@squid869 все зависит от сферы где ты работаешь. Если тебе достаточно примитивной математики, то не значит, что у других то же самое. Я переодически сталкиваюсь с этим понятием в своей работе (моделирование физических процессов, например газодинамические тракты ТРД) и мне приходится общаться с математиками которые оперируют математикой, а не понятийным аппаратом C++.
@ДаркШнайдер
@ДаркШнайдер 2 жыл бұрын
@@squid869 Ты бы еще спросил у обезьяны, она бы тебе сказала, что буквы и слова это хлам. Точнее не сказала бы.
@ДаркШнайдер
@ДаркШнайдер 2 жыл бұрын
@@bdick8136 Ну и как там в космонавтике? Полетим еще или уже все, только ползать?
JWT как строить архитектуру
28:36
S0ER
Рет қаралды 30 М.
Wait for the last one 🤣🤣 #shorts #minecraft
00:28
Cosmo Guy
Рет қаралды 19 МЛН
Когда отец одевает ребёнка @JaySharon
00:16
История одного вокалиста
Рет қаралды 17 МЛН
Yay, My Dad Is a Vending Machine! 🛍️😆 #funny #prank #comedy
00:17
The Absolute Best Intro to Monads For Software Engineers
15:12
Studying With Alex
Рет қаралды 662 М.
JWT авторизация. Основы JWT - механизма.
6:45
Хочу вАйти
Рет қаралды 14 М.