Практический кейс использования моноида на TypeScript

  Рет қаралды 9,719

S0ER

S0ER

Жыл бұрын

#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
GitHub - github.com/soerdev
Чат для программистов - / discord
Группа ВК - codeartblog

Пікірлер: 46
@TheLevius
@TheLevius Жыл бұрын
Теперь надо записать практический урок о том, как не надо пользоваться захватом экрана
@maximbelous3213
@maximbelous3213 Жыл бұрын
На самом деле на каждом моменте где говоришь «если интересно», то всегда интересно и хотелось бы узнать побольше)
@shinauri1
@shinauri1 Жыл бұрын
:)
@tuku_mann
@tuku_mann 6 ай бұрын
Интересно про фишки Typescript, особенно про редкие и не очевидные Спасибо за урок!
@user-ej3zt7ho9l
@user-ej3zt7ho9l Жыл бұрын
Интересный формат. Было бы здорово ещё и про монаду с функтором в таком же стиле
@realfootball338
@realfootball338 Жыл бұрын
Функциональное программирование хорошо вписывается в ООП код. Я работал в проекте где конкретно было определено где ФП а где ООП. ФПшка однозначно хороша для развития.
@alexeykolokolov246
@alexeykolokolov246 Жыл бұрын
Не понял, откуда взялся результат [450, 1200], если во второй последовательности был только один элемент [1, 100]
@dmitriyobidin6049
@dmitriyobidin6049 Жыл бұрын
Судя по коду на гитхабе - это уже результат работы кода который туда залит, там другие примеры. Получилось так потому, что после записи экрана пришлось делать подсъемки, из-за того что камера закрыла часть кода. Ну это как я вижу.
@svgor322
@svgor322 Жыл бұрын
Супер! На практике всё стало понятно после первого видео.
@user-xg8qt8ky1s
@user-xg8qt8ky1s Жыл бұрын
Хочу практический кейс использования моноида в категории эндофункторов на TypeScript.
@S0ERDEVS
@S0ERDEVS Жыл бұрын
Пример кода из видео github.com/soerdev/soer_examples/blob/latest/monoid/monoid.ts P.S. там есть ошибка с выводом результатов, так как при съемке видео не увидел, что закрываю вывод, а при редактировании видео наложил результаты из последнего примера. Но суть от этого не меняется.
@alexandrsachishin962
@alexandrsachishin962 Жыл бұрын
я бы немного модифицировал функцию isZero() : сравнивал значение стампа и измерения из результата вызова this.zero(), а не захардкоженных нулей
@thepmgzzz
@thepmgzzz Жыл бұрын
Полезный формат, спасибо.
@mr.nikita
@mr.nikita Жыл бұрын
Хотелось бы увидите фишки typeScript)))
@MrTaramka
@MrTaramka Жыл бұрын
Классно, спасибо!
@slash7076
@slash7076 Жыл бұрын
👍👍🔥
@undefined_user36
@undefined_user36 Жыл бұрын
Типизировать измерения нужно через велью обжект?
@sovrinfo
@sovrinfo Жыл бұрын
Спасибо за видео.Коммент в поддержку! Расскажите об ошибке на 1000000000$
@Headliner73
@Headliner73 Жыл бұрын
Тогда можно функторы разобрать и еще примеры монад (типо Either, maybe, и т.д)
@JashKa
@JashKa Жыл бұрын
"Ошибка на 1млн" это наверное про известный случай со каким-то спутником, который разрабатывали 2 команды, одни в метрической системе, вторые в фунтах (как система называется, "фунтическая"?). Ну и грохнулось типа на старте. Слышал про такое, но не верю. Они что, тестов не писали? :)
@Anna_K_
@Anna_K_ Жыл бұрын
другая система называется имперской (imperial system)
@proletarian
@proletarian Жыл бұрын
это ZSH? как тема называется?
@user-dn7qr7vs1h
@user-dn7qr7vs1h Жыл бұрын
О, почти настоящий моноид! Только отмеченная точка (множество с "особым" элементом называется в математике "множество с отмеченной точкой") на мой взгляд неудачная, что и обуславливает необходимость `isZero`, который моноиду не нужен. isZero в ФП вроде как не идиоматический подход. Обычно, когда нужна отмеченная точка но замарать исходное множество особыми элементами не охота, значение просто заворачивают в Maybe или аналоги. Оно как раз добавляет ко множеству ровно один элемент, служащий отмеченной точкой (None/Nothing/...). class MaxMeasure implements Monoid{ op(mx: Maybe,my : Maybe){ return mx.maybe( () => my, x => my.maybe( () => mx, y => Maybe.some(snd(x) > snd(y) ? x : y))) } zero() { return Maybe.none() } } const fold = (monoid: Monoid, xs: T[]): T => xs.reduce(monoid.op,monoid.zero()) const monoidMaxMeasure : MaxMeasure = new MaxMeasure() const result = fold(monoidMaxMeasure, [[89,546],[234,3000],[3127,15]] // example measures .map(Maybe.some)) console.log(result.maybe(() => "Nothing", x => x.toString()))
@Tiolych
@Tiolych Жыл бұрын
Спасибо! А если значения измерений будут и отрицательные и положительные, как выбрать нейтральный элемент?
@d4vlL
@d4vlL Жыл бұрын
Нейтральный элемент - элемент, не меняющий результат операции (бинарного оператора). Например, 0 это нейтральный элемент для вещественных чисел , если основная операция - сложение (еще говорят, нейтральный элемент по сложению). Для умножения нейтральным элементом будет уже 1. Если числа не вещественные, а комплексные, то нейтральный элемент по сложению (0, 0), по умножению - (1, 0). Так что выбирать нужно в зависимости от операций, производимых со значениями.
@Tiolych
@Tiolych Жыл бұрын
@@d4vlL Спасибо ! Если в данном примере number заменить на bigInt, то практически ничего менять не надо ?
@itforall89
@itforall89 Жыл бұрын
Я так и не понял что такое моноид. Это что-то из теории групп?
@AnarchySane
@AnarchySane Жыл бұрын
Ага. Видео про него есть. Полугруппа.
@vitaliykravets9925
@vitaliykravets9925 Жыл бұрын
Хотел би узнать про то '' Как учуть TypeScript с нуля ''
@tuku_mann
@tuku_mann 6 ай бұрын
8:12, возможно фабрику создать?
@zasonnik
@zasonnik Жыл бұрын
Концепт понятен и крут. А в плане typescript - а не будет ли правильнее в моноиде сделать все функции статическими? Вроде они не должны зависеть от состояния экземпляра моноида
@S0ERDEVS
@S0ERDEVS Жыл бұрын
Писал об этом в телеге. Да и в видео было пояснение, но из-за того что накосячил с наложением моего изображения и кода в конечном варианте убрал
@xDiezz
@xDiezz Жыл бұрын
Использование I в начале название бэд практис уже
@user-bl4mm5pr9g
@user-bl4mm5pr9g Жыл бұрын
Тайп скрип забавный, как смесь старых и совсем свежих стандартов плюсов)
@lookarious2055
@lookarious2055 Жыл бұрын
Лучше не использовать венгерскую нотацию для типов.
@dann1kid
@dann1kid Жыл бұрын
почему?
@snatvb
@snatvb Жыл бұрын
в TS тип Boolean с большой буквы и boolean с маленькой отличаются и вот чем: // Для foo здесь и то и то будет валидно const foo = (x: Boolean) => x foo({ valueOf: () => true }) foo(true) // А вот здесь будет ошибка const bar = (x: boolean) => x bar({ valueOf: () => true }) // error bar(true) // ok
@levapveeskela4327
@levapveeskela4327 Жыл бұрын
мне то понятно, но для многих данный пример всё-таки ничего не прояснит проще говоря, что boolean - это примитивный тип данных, а любой примитив в js не является объектом, но у каждого примитива в js-е, есть соответствующий класс конструктор - обёртка, насколько я знаю, это связано с боксингом и анбоксингом в js-е, вот и Boolean - это класс обёртка, позволяющая работать с булионом, как с объектом, соответственно создовая их черезе new Boolean(), к примеру, или как из твоего примера на экземпляре класса Boolean вызвать метод объекта valueOf
@ivanmatew568
@ivanmatew568 Жыл бұрын
IsZero(value) Return= value==zero Имхо так логичнее же?
@levapveeskela4327
@levapveeskela4327 Жыл бұрын
у тебя zero это структура, в данном случае массив, он сравнивается не по значению, а по ссылке, поэтому то, что ты написал работать не будет, и у тебя будет всегда false
@ivanmatew568
@ivanmatew568 Жыл бұрын
Это псевдокод. В реале можно сравнить поля структуры и тп
@ivanmatew568
@ivanmatew568 Жыл бұрын
Я к чем написал. В оригинальном коде 2 раза описан контракт нулевого значения.
@user-dn7qr7vs1h
@user-dn7qr7vs1h Жыл бұрын
Логичнее вообще isZero убрать 🙃
@serzhalgas
@serzhalgas Жыл бұрын
Мне кажется если нейтральному элементу присвоить [time, минус бесконечность] класс стал бы более абстрактным
@yagamiraito8621
@yagamiraito8621 Жыл бұрын
Насколько же нелепо, уродливо, а главное бессмысленно выглядит вот такое натягивание совы на глобус. Я когда-то чуток кодил на Хаскеле и давно еще подметил, что методы типа map и filter в js не то чтоб прям совсем "не пришей пизде рукав", но они, кмк, не до конца раскрывают свою настоящую суть изза того, что в js они не lazy. Тот же цикл for я могу дропнуть на любой итерации, что делает его куда практичнее модного воннаби функционального forEach. То же самое и с моноидами, и с любыми другими комбинаторами. Ты крутой, конечно, раз можешь навалить моноид даже в тайпскрипте, но камон, кто в своем уме будет это использовать? Если можно сделать короче, понятнее и проще, просто следуя идиоматике инструмента, который ты применяешь.
@Son0fBeelzebub
@Son0fBeelzebub Жыл бұрын
окей, сделай свой, но лези, при помощи обертки всего в коллбеки, в чем проблема? создай свой type Lazy = () => T type LazyList = { fst: Lazy, snd: LazyList } : null и работай с этим? Да, будет громоздким, но вот тебе лези лист дефолтный. Также прерывай когда угодно, спокойно реализуется и рендж, и тейк, и что угодно еще. будешь также внутри проверять на отсутствие элемента, вызывать и возвращать тот же лист в нужный тебе момент. Ровно также потом навернешь и монады, по типу maybe абсолютно без проблем. Самая большая проблема будет только в том, что для сокращения кода тебе придется постоянно выносить все в константы, чтобы у тебя не было вызова функции с параметрами функции с функцией еще внутри. Но, не думаю, что тебе это особо будет парить мозг, если уж ты решил реализовывать лези. И, на опыте скажу, что лези лист в джсе, в отличии от массивов, не переполняет стек, вполне себе отлично и быстро работает. По сравнению на машей машине массив дропался на консоль логике генерации бесконечного ренджа где-то на 17500~ элементах за 10 сек~ в то время как лези лист(по сути обвчные генераторы) - за 10 сек генерил уже 200к чисел, и дальше досоздавал мне их до ляма и начал подлагивать потиху. Так что проблемы никакой не вижу абсолютно. А то, что в джсп с этим траблы - для джсп это лишь паттерн программирования, а в хаскелле все итак под капотом лези, так что дело не в "инструменте". Джс позволяет сделать почти что угодно, так что, если так будет удобно команде или программисту - почему нет
Разбираюсь в API крутых команд
28:01
Проектируем OpenSource приложение
17:31
🍟Best French Fries Homemade #cooking #shorts
00:42
BANKII
Рет қаралды 15 МЛН
когда достали одноклассники!
00:49
БРУНО
Рет қаралды 2,5 МЛН
CAN YOU HELP ME? (ROAD TO 100 MLN!) #shorts
00:26
PANDA BOI
Рет қаралды 36 МЛН
Мысли и методы 44: Что такое монада и моноид
26:44
Рахим Давлеткалиев
Рет қаралды 1,7 М.
Вселенная и Специальная теория относительности.
3:51:36
ЗЛОЙ АНАЛИТИК ВСЕЛЕННОЙ.
Рет қаралды 7 МЛН
Проектирую архитектуру чата
16:28
🍟Best French Fries Homemade #cooking #shorts
00:42
BANKII
Рет қаралды 15 МЛН