Вы все больше превращаетесь в хорошего педагога. Стали начинать с бананов и яблок, а не сразу лезть в редактор кода. Стало намного понятнее! Большое спасибо и удачи!
@scarlatum2 жыл бұрын
Ждём теперь объяснение функторов и эндофункторов! с:
@snatvb2 жыл бұрын
+
@avpmk Жыл бұрын
Функтор тоже очень простая штука, про монады, аппликативы, стрелки Клейсли хорошее объяснение бы
@pylounge2 жыл бұрын
Если и дальше пойдём по "функциональным" приблудам, то голосую за каррирование)
@artishoo2 жыл бұрын
Кст это не сложно. Главное понимать что такое лямбды и как их готовить
@МаксимХвостов-м1й2 жыл бұрын
Дак у Соера есть видео про каррирование… поищите.
@Дмитрий-р4х9ю4 ай бұрын
Моноид как бинарное отношение (в вашем примере - сумма) над множеством, например R, всё-таки является коммутативным моноидом. Это не противоречит сказанному, но вносит некоторую ясность. Спасибо за видео!
@Tiolych2 жыл бұрын
Чтобы было понятнее, хорошо бы привести пример рабочего кода, или ссылочку на него.
@nikolaymatveychuk61452 жыл бұрын
Там всё просто. Например операция определения максимального числа в массиве. Можно создать функцию, в которой будем бежать по массиву и запоминать максимальный элемент, но такую функцию нельзя будет выполнять параллельно. Вот тут как раз и выходит на арену моноид, когда мы определяем операцию как (a + b = max(a, b)), представляем массив в виде последовательности операций A[0] + A[1] + A[2] + A[3] + A[4] + A[5] + ... в этом случае мы можем искать максимум хоть в 1 поток, хоть в 1000 потоков, потому что в каждом из потоков функция сможет взять любых 2 числа из массива и заменить их на результат операции с ними, тем самым сделав результирующий массив на 1 элемент короче. Когда в результирующем массиве останется всего один элемент - он и будет максимальным
@Tiolych2 жыл бұрын
@@nikolaymatveychuk6145 Спасибо за развернутый ответ. Поискал в интернетах, нашел на плюсах реализацию, примерно идею понял.
@gordeyzimakov5267Ай бұрын
Суперспасибо!
@artishoo2 жыл бұрын
Соер, отличное видео, было весьма информативно. Выпускай такое почаще!
@ITKAMASUTRA2 жыл бұрын
Чётенько! 👍👍 спасибо!
@qwertymangames1800Ай бұрын
1:47 нельзя складывать разные типы. Пример из математики: комплексные числа и кватернионы. Они имеют реальную часть и вымышленную.
@ИльяКрасняк-ц8б2 жыл бұрын
Классно что вы добрались до функциональщины, ждем эффекты и монады)
@AB-yl5xi2 жыл бұрын
С программированием понятно, теперь осталось понять, что значит моноид в категории эндофункторов!
@andreekzz2 жыл бұрын
нет ничего лучше чем такое видео в пятницу в 5 вечера на уставший мозг. Спасибо большое!
@dannycyberwalker2 жыл бұрын
Ждём про монаду)
@alexandr-v2 жыл бұрын
Интересен был бы пример его использования, в каких случаях без него не обойтись и показать, вот тут то мы применяем моноид.
@bonumsignum7017 Жыл бұрын
fold с моноидом отлично сочетается
@vryaboshapko2 жыл бұрын
Учитывая определение на 2:33, интерфейс на 4:46 выглядит некорректно. Моноид - это множество, облдающее определёнными характеристиками, а показанный интерфейс описывает только одну операцию над этим множеством, причём слишком широко. То есть, для описания моноида нам надо было описать тип T, причём так, чтобы было понятно, что он полугруппа (то есть, на нём определена операция, по которой видно. что она бинарная, и что она ассоциативная), и что существует нейтральный экземпляр T. Осталось придумать как это сделать в коде 😅
@Vladimir_Java_dev2 жыл бұрын
Занятное слово это - "моноид". Звучит необычно. Прям как "тангенциальный вентилятор". Ну ок. А что за операции такие, когда в ходе обработки множества даты в случае эксепшена на одной из операций мы этот эксепшен осознанно прячем и это не влияет на итоговый результат? Я вот для такого случая вижу, что-вроде "обработаны элементы .... с результатом Х, элементы a, b, c..m обработать не удалось" и там далее юзеру что-то на выбор что со всем этим делать. Но вот что это за операция такая может быть? Если на итоговый результат не влияет - то может ну его тратить время на операцию?)
@ВячеславДудка-к2м Жыл бұрын
Понятно - задача про грибы и огурцы)))
@xander-on-the-earth2 жыл бұрын
С измерением температуры, мне кажется, несколько неудачный пример. Здесь-то как раз должно выбрасываться исключение или каким-то другим образом не позволять получить результат, потому, что он некорректный. А так понятно, спасибо большое! Люблю смотреть ваши видео!
@vovanchik_ru42082 жыл бұрын
зачем сразу исключение. Можно ведь вернуть ничего и ничего не делать :) Зачем сразу в крайности с исключениями :) Например если цифровой градусник, то, если делать чтение памяти чаще чем будут туда записываться данные, это же не значит, что надо кидать исключение, а надо просто ничего не делать :) Если градусник аналоговый, то ацп всё равно сделает его цифровым :) И получается, что исключение тут к операции с моноидом не имеет отношения, а только для более низкого, аппаратного уровня. Или уровня протокола.
@xander-on-the-earth2 жыл бұрын
«Критикуешь - предлагай!» Я пытаюсь сходу придумать более удачный пример. Сбор денег «на ремонт школы» - кто-то дал много, кто-то мало, кто-то совсем ничего. А кто-то вообще не выходит на связь или бросает трубку. Вот такие элементы можно считать «0» при подсчёте общей суммы. Такой житейский пример соответствует идее моноида?
@xander-on-the-earth2 жыл бұрын
@@vovanchik_ru4208 , как я понял моноиды имеют смысл только при некоем «суммировании» отдельных элементов множества. Так здесь мы хотим получить среднюю температуру. Это же как в анекдоте про больницу. Отдельный градусник - это не моноид, он просто показывает последнее занесённое значение (неважно в цифровом или аналоговом виде)
@vovanchik_ru42082 жыл бұрын
@@xander-on-the-earth как я понял, моноиды - шаблон для операций с одинаковым интерфейсом и/или действием/результатом по умолчанию. И я так понял, что дополнительной логикой, моноиды не ограничены. Суммирование, это как пример хорошего распараллеливания процесса, а шта там будет происходить в нутрях, какие мат операции, уже не особо важно. Главное, чтобы операции происходили с одинаковым интерфейсом
@xander-on-the-earth2 жыл бұрын
@@vovanchik_ru4208 , да, но они не всегда применимы. Вот пример с опросом термометров как раз и не подходит для этого шаблона. Выше в нашей ветке комментариев я придумал житейский пример со школой, где как раз используются моноиды. Это если я правильно понял идею.
@oshyshko2 жыл бұрын
на 4:46 у вас не совсем корректное определение интерфейса: op имеет 4 аргумента: this, a, b и результат, в должен 3. И нет метода, который бы возвращал нейтральный элемент. Понятно, что в Java/OOP такой интерфейс определить нельзя, (из-за того, что всегда есть this, по типу которого происходит диспетчеризация -- но это уже детали). В любом случае, об этих нюансах стоило бы упомянуть, иначе это запутывает и создает вопросы. Ещё, было бы полезно упомянуть примеры моноидов, которыми программисты пользуются с первых дней: String/""/concat, HashMap/new/mergeWith etc.
@yarosav53962 жыл бұрын
не с абстрактной алгебры, а с теорката, теоркат в свою очередь относится к абстрактной алгебре, но моноиды не проходят в теории групп и теории множеств (в стандартном курсе) и к чему тут шаблон проектирования
@AyratVideo2 жыл бұрын
Интересно и доходчиво. Респект и благодарность!
@johnd14312 жыл бұрын
Спасибо за объяснение!
@avpmk Жыл бұрын
5:13 Не, нифига это полугруппа) Чтобы этот интерфейс стал моноидом нужно ещё добавить метод (или поле) возвращающий нейтральный элемент.
@avpmk Жыл бұрын
Но видно отличное, Соер, спасибо!
@alexeymk86182 жыл бұрын
Посмотрел и в очередной раз убедился насколько я глуп. Спасибо за видео
@ИапГоревич2 жыл бұрын
Это нормально (надеюсь, потому что я тоже глуп)
@mjeday3 ай бұрын
Не понял вообще ничего. На 4:50 как метод интерфейса, который является классом по сути, может принимать дженерик? Бэкэндер, знаю js поверхностно
@vladisslavss Жыл бұрын
Продолжаем тему!) Лукас и коммент в поддержку канала 🔥
@SobolionV2 жыл бұрын
Круто объяснил, спасибо. Я понял, ничего ранее не слышав об этом (кроме самого слова).
@canniballissimo2 жыл бұрын
с неожиданной стороны зашёл!
@Johniooooo2 жыл бұрын
Пример с градусником какой-то странный, потому что нельзя возвращать 0 если температура не 0, нужно сообщать о неудавшемся измерении.
@user-wf6lc5jz9x2 жыл бұрын
Да конечно, в любой непонятной ситуации надо падать, а кому надо будет тот поймает, а то наcоветуют 0 вернуть, что приведет к искажению, или того хуже null, что вызовет падение в другом месте, а потом ищи свищи
@МаксимХвостов-м1й2 жыл бұрын
Смотря какую ты задачу решаешь, если тест градусника на работоспособность то да, если просто среднюю температуру за день в своей комнате то 0 подойдёт.
@Johniooooo2 жыл бұрын
@@МаксимХвостов-м1й нет, для выяснения средней температуры 0 не подойдёт, потому что он искажает результат)
@МаксимХвостов-м1й2 жыл бұрын
@@Johniooooo Да что то я поспешил ;)
@lzs26392 жыл бұрын
Нейтральный элемент: • х == х+0 или х-0 • х == х*1 или х/1 Пример нейтральных элементов: • пробелы в тексте • зазор между людьми, стоя́щими в очереди • свободные участки между домами, где можно поставить ещё дома • меха гармошки • дробная часть числа, если при операциях она не меняет целую часть • все виды шаблона "... сверху бантик", типа: "Слон и моська", блохи на собаке, ёлочные игрушки на ёлке, мел в таблетках, "мёртвому припарки" и тд. • замыкания (гриб) • итерации (ромашка) • рекурсии (бамбук) • каррирование (чемодан с ручкой) • шаблон Синглтон и прочие, где есть отсылка на static, default и const ------------------------ ** На уровне высоких абстракций - это пара: "name: value" где имя обязательно, а значение нейтрально (допускается отсутствие значения). То есть, конверт с маркой обязателен, пространство для письма обязательно, но само письмо нейтрально, его может и не быть в конверте. *** Отличительный признак нейтрального элемента - это его ортогональность ("невидимость"), также как горизонтальные свободные участки между дома́ми не видны на фоне вертикально заметных домов
@MrChelovek689 ай бұрын
не популяризации,а вылезанию из каждого утюга адептов фп
@ДаркШнайдер2 жыл бұрын
Внатуре четко, даже пацаны срайона поняли!
@РазныеВопросы-в4ю2 жыл бұрын
если моноид - шаблон проектирования, тогда 4 яблока + 3 банана = 7 фруктов, но при условии, что банан с ботанической точки зрения признан "ягодой", тогда 4 яблока + 3 банана = 7 плодов.
@glebbondarenko672 жыл бұрын
Все четко и понятно. Спасибо
@ntvisigoth2 жыл бұрын
Огонь! Так понятно, еще никто не пояснял этот термин
@Fox64502 жыл бұрын
Ничего не понял, но очень интересно
@АнимусАнанимус2 жыл бұрын
Не очень понятно, как такой интерфейс будет имплемннтирован, да и нет нейтрального элемента. Может, что-то такое? interface Monoid{ neutral() : T op(a: T, b: T) : T } Вообще, без тайпклассов все это делать как-то грустненько.
@izyumrockstar78152 жыл бұрын
Расскажи про кортеж Tuples пожалуйста, зачем оно нужно в функциональном программировании?
@vovanchik_ru42082 жыл бұрын
Чтобы сократить кол-во строк кода. Чтобы вернуть результат функции сразу в несколько переменных. Или например, поменять значение переменных местами одной строкой x,y = y,x; Что тоже сокращение кода :)
@valbv2 жыл бұрын
Лайк! Всё до функционального программирования руки не доходят. Но с такими понятными видосами изучать будет проще
@tigranav.39602 жыл бұрын
У меня вопрос. Если на императивном языки создать конечное число функций система из которых будет полной по Тьюрингу, можно ли сказать что код, использующий только их, является декларативным? (этими функциями не описывается, как делать что-то, а что именно делать)
@vryaboshapko2 жыл бұрын
Скорее да, чем нет. Декларативность - это просто очередной слой абстракции, который упрощает понимание кода и, иногда, его написание. Соответственно, используя императивный язык, можно написать какое-то количество кода в декларативном стиле.
@AMith-lv2cv2 жыл бұрын
4:24 что за шрифт?
@elk____2 жыл бұрын
а почему тип "Т" является нейтральным элементом?
@enkryp2 жыл бұрын
Пожалуйста, расскажите о микросервисах, и о том, чем микросервисы отличаются от сервисов.
@KaputTV2 жыл бұрын
микросервис - это куча монолитов) связанных APIшкой
@vovanchik_ru42082 жыл бұрын
@@KaputTV Главная задача сервиса, это предоставление услуги. А там уже микро, макро, нано, шмано - без разницы. Ну а чтобы вам предоставили услугу, то надо как минимум попросить её предоставить :) По этому сервисы подразумевают наличие какого-то языка взаимодействия(API) с ними. Даже монолитность не важна, т.к. сервис может общаться с другими сервисами перед тем как вам ответить.
@4sat5642 жыл бұрын
звучит епе оскорбление
@andreymlv2 жыл бұрын
Правильно понял, что множество значений моноида определяется типом, над которым можно совершить ассоциативную операцию?
@pegamer30512 жыл бұрын
+
@IgorLynn2 жыл бұрын
...и в котором есть нейтральный элемент
@ИванНикитин-ч7б2 жыл бұрын
Слыхал, что был в украинском переводе мультика про трансформеров десептиконы были обманоиды :)
@АлексейБасов-ч7й2 жыл бұрын
Если сложить 4 яблока и 3 банана получится комплексное число🤔😄 на комплексной плоскости где банан это корень из -1🤔
@tohoto21832 жыл бұрын
Маноид- это абстрактные типы данных ,которые в С++ очень схожи с ООП??? Правильно понял?
@scarlatum2 жыл бұрын
Это как функциональное программирование, которое по сути является вызовом методов под капотом которых императивный код. Вот и вся эта дрянь с монадами, по своей сути такое же ООП с данными и их методами. Зато как всё это звучит...
@tohoto21832 жыл бұрын
@@scarlatum у всех решений задач под капотом : цикл,условия, просто очередность ,ну и винегрет из этих трех ,но какие же у всех разные салаты получаются .
@Manuel-j3q2 жыл бұрын
Моноид значит сделано на Mono, очевидно же.
@Alex-gn6xb2 жыл бұрын
вообще не понятно каким боком интерфейс это моноид (а если в нем два метода это моноид ? а дефолтный метод это моноид?) и как вам моноиды помогают сделать мобильное приложение или хотя бы написать апи межд двумя сервисами. откуда в сумме взялся ноль, ноль это значение переменной. а если не положено нулю там оказаться? ну, ок , с натяжкой 0 это нейтральный элемент с точки зрения неизменности результата . но переменная это не множество значений, это одно значение. с чего вдруг число стало массивом ? каким образом дженерик тип Т имеет нейтральный элемент ? с чего вы взяли какая будет операция с параметрами при имплементации ? дремучая жесть из алгебры. отличный вариант для вопроса на собеседовании , чтобы с умным лицом спросить что такое моноид а на том конце фейспалмы люди будут ловить
@romanbush51642 жыл бұрын
Маноид это джинерик c#)), нахрена это надо только, наверное я ещё не дорос)
@ILICH19802 жыл бұрын
не понимаю зачем мне эта информация... что бы умничать перед разработчиками?? любая терминология всегда является частью общения и обобщения внутри группы
@bdick81362 жыл бұрын
Приведу пример. Ты можешь придумывать бесконечное количество вариантов записи музыки, но когда встаёт задача объяснить что и как играть другому музыканту - приходится использовать универсальный язык - ноты. Определение моноида это то же самое - способ донести свои идеи до других людей универсальным способом - языком математики. Правда бывают люди которые не могут в математику и придётся объяснять на пальцах… Но это уже другой разговор. В любом случае функтор/предикат с шаблонным параметром ещё более хуевое объяснение идеи моноида человеку не знакомому с C++ например.
@IgorTkachev2 жыл бұрын
Ничего сложного в моноиде нет и не надо. Ни сложного, ни моноида. Бесполезное знание о бесполезной хрени. Автору респект за потраченное время на объяснение бесполезного.
@vlatterran2 жыл бұрын
Моноид это конечно интересно, но что на счёт монады
@dann1kid2 жыл бұрын
Монада это конечно интересно, но что на счёт мониды
@ИапГоревич2 жыл бұрын
@@dann1kid Мониды это конечно интересно, но что на счёт мыдоны
@fedor39112 жыл бұрын
Монада это всего лишь моноид в категории эндофункторов
@dann1kid2 жыл бұрын
@@ИапГоревич мыдона это конечно интересно, но что насчет мадины
@ИапГоревич2 жыл бұрын
@@dann1kid мадина это конечно интересно, но что на счёт медианы
@mlr__roal_6867 Жыл бұрын
На ругательство похоже
@squid8692 жыл бұрын
за 12 лет программирования, сменив 3 компании, ни разу не сталкивался с понятием моноида, при том что с понятие шаблона проектирования сталкиваешься регулярно. Абсолютно не нужное определение призванное только забить мозг всяким бесполезным хламом.
@bdick81362 жыл бұрын
В теме 26 лет. Моноиды, предикаты и функторы это норма и ни разу не хлам.
@squid8692 жыл бұрын
@@bdick8136 опять же... предикаты и функторы - да. Моноид - ну х.з.. Только что спросил у человека который 30 "лет в теме" (а это замечу на 4 года больше чем у вас) тоже про моноида слышал только из курса математики. В терминологии программирования это понятие крайне бесполезное. Жду от вас историй от человека у которого писюн длиннее... точнее опыта больше.
@bdick81362 жыл бұрын
@@squid869 все зависит от сферы где ты работаешь. Если тебе достаточно примитивной математики, то не значит, что у других то же самое. Я переодически сталкиваюсь с этим понятием в своей работе (моделирование физических процессов, например газодинамические тракты ТРД) и мне приходится общаться с математиками которые оперируют математикой, а не понятийным аппаратом C++.
@ДаркШнайдер2 жыл бұрын
@@squid869 Ты бы еще спросил у обезьяны, она бы тебе сказала, что буквы и слова это хлам. Точнее не сказала бы.
@ДаркШнайдер2 жыл бұрын
@@bdick8136 Ну и как там в космонавтике? Полетим еще или уже все, только ползать?