Интересная тема для меня. В свое время проходил курс по Haskell, поэтому постараюсь дополнительно разъяснить про Монаду и Аппликативный функтор, если кому-то интересно, но не до конца понятно. 1) Монада - это структура, являющаяся наследником Функтора, но для которой дополнительно реализован метод chain. В разных языках/библиотеках название может быть разным. chain очень похож на map, отличие в том, что передаваемая в метод chain функция возвращает не значение (как в случае с map), а сам контейнер, в который запаковано значение. Пример Монады, который прямо под носом, но не был в таком ключе упомянут в видео - это Array. Для него методом chain по своей сути является flatMap: ведь функция, передаваемая во flatMap возвращает сам контейнер - Array: const duplicate = (arr) => arr.flatMap((n) => [n, n]); duplicate([1,2,3]); // [1,1,2,2,3,3] ramdajs.com/docs/#chain Как видно из примера, Монада - это более мощный интерфейс, чем Функтор, потому что позволяет менять не только запакованные значения(в случае с map), но и структуру самого контейнера. При использовании Maybe как Монады мы можем преобразовать Maybe в Nothing (использую псевдо-код): Maybe.of(1).chain(() => Nothing); // Nothing Maybe.of(1).chain((n) => Maybe.of(n * 2)); // Maybe(2) Используя Maybe как Функтор, мы можем изменить только значение, но не сам контейнер: Maybe.of(1).map((n) => n * 2); // Maybe(2) Промис в некотором понимании можно использовать и как Функтор, и как Монаду: Promise.resolve(1).then((n) => n * 2); Promise.resolve(1).then((n) => Promise.resolve(n * 2)); 2) Если кратко говорить про Аппликативный функтор, то он нужен, чтобы применять обычную функцию к упакованным значениям. Важно, чтобы все аргументы функции были одного типа. Например, у нас есть функция сложения, работающая с примитивами: const sum = (a, b) => a + b; Но мы хотим сложить не просто 2 числа, а 2 числа, упакованных в Maybe, причем сделать это лаконично и переиспользуя функцию sum. Maybe является Аппликативным функтором, т.к. реализует метод ap. Поэтому можем решить задачу так: const maybeResult = liftA2(sum, maybe1, maybe2); Если хотя бы 1 из переданных Maybe окажется Nothing, то результат всего выражения будет Nothing: такое поведение прописано в реализации ap для Maybe, которая дергается внутри liftA2. Для других структур поведение может быть своим, главное, чтобы оно удовлетворяло законам Аппликативных функторов. 3) Также можно упомянуть, что любая Монада является Аппликативным функтором, а любой Апликативный функтор является обычным Функтором. Это видно на схеме спецификации fantasy-land. На практике это означает, что если нам нужно объявить какую структуру Монадой, то нам достаточно реализовать только метод chain, а реализация методов ap и map будут выведены автоматически.
@yarosav53964 години тому
следующий шаг, это после этого псевдообьяснение монад и функторов, это объяснить дайрект стайл, алг эффекты и континуации
@yarosav53964 години тому
м-да, около фп макакинг пошел, от ооп макаки, хоть бы на какой-то скале примеры показывал, другая совсем model of eval etc
@vid2534 години тому
Теперь бы более продвинутый пример, например универсальный контроллер для CRUD любых таблиц, пример использования knex чтобы руками запросы не писать, ну и что нибудь на твоё усмотрение 😅
@disconnect37636 годин тому
Коментарий оставил, лайк тоже!
@user-kq5gh9is8g7 годин тому
Потрясающее видео, все максимально доступно, очень насыщенно, спасибо! Прошло две недели, но зато хватило всего одного видео, чтобы узнать кууучу всего что нужно для большинства проектов! Одно видео и можно идти писать проект)
@ikakSlohno8 годин тому
Легенда
@alexander25769 годин тому
Очень полезный материал! Нашёл для себя то, что искал )) Прекрасная подача материала! Благодарю!
@user-jc9xt5tp7i9 годин тому
Спасибо за огромный вклад в будущее многих программистов 🤗 очень крутой видос вышел, правда где объяснения класса Контейнеров там стоит не класс, а конст) бывает опечаточки)
@igormalykhin552810 годин тому
Ребят, если у кого есть время, подскажите как к этой сборке прикрутить тейлвинд, куда что правильно прописать. А то что-то не выходит, стили не применяются, но и ошибок не показывает. Спасибо
@Spermoroid11 годин тому
Очень много семантических ошибок в примерах псевдокода, внимательнее нужно быть.
@deftones475514 годин тому
Ты не прошел собеседование
@user-vp9qe7gh1h16 годин тому
Благодарю за контент! очень классное объяснение, жду не дождусь, когда начну использовать redux у себя в проектах
@DemianOliinyk-km4gr17 годин тому
Большое спасибо автору, за старание над созданием таких обучающих видео
@mr.pickles785317 годин тому
Думаю поступить в институт на программиста,что скажите?
@user-vp9qe7gh1h18 годин тому
Спасибо Вам большое, на пальцах эту тему объяснили, сам бы сидел с неделю грыз это
@HaywasterChannel23 години тому
Видео крутое, без споров молодец, но у меня все же есть пара вопросов: 1) Почему не рассмотрена тема рекурсии? 2) Иммутабельный подход требует постоянного создания копий. Это значит, что у нас постоянно выделяется память для их хранения, что не есть хорошо. Допустим то же использовние .map.filtet в конечном итоге создаст нам целых две копии. Этот момент как-то обрабатывается в JS? Ведь хотелось бы, чтобы конечный код хорошо работал и минимально расходовал память
@vladislavkomkov5178День тому
- 2 года жизни на это, какой ужас, почему только сейчас мне хватила достоинства закончить эти мучения
@user-tx5sr8ex9mДень тому
02:02:00 при попытке вывести в логах переменную выводит undefined, все перепробовал не могу понять в чем загвоздка.
@KokurorokukoДень тому
По-моему, на 51:00 f и g нужно поменять местами. Сначала применяется f (она должна быть внутри), а потом g.
@user-no7sl1yk3fДень тому
Действительно успокоил. Иногда начинаю кидаться за все подрят в панике что упущу что-то невероятно важное или "я не знаю зачем это мне, но я не программист если не послушаю про это"
@kitNДень тому
в конце видео наблюдаю что то похожее на попытку изобразить фигуры в разных количествах(кратностях) измерений?)
@skyranor6854День тому
Спасибо за труд!
@verasmirnova503День тому
Лучший! Просто лучший! Самый информативный и краткий!
@some_body_qtyeeuyДень тому
Благодарствую!
@user-fd9eb9de2uДень тому
Вряд ли бы сделал видосик получше, тем более с той скоростью с которой ты их делаешь (респект и все такое))) но тему с каррированием пришлось разбирать с помощью learn.javascript, lodash и ChatGPT и это при том что пару лет назад просматривал эту тему - по моему сложновато будет для "не подготовленных)))))"
@vladyslavbrataniuk1324День тому
насколько эта тема продвинута? Что +- требуется от джуна в этом направлении?
@HaywasterChannelДень тому
Блин, я искал буквально 3 дня назад видео по сравнению парадигм ООП и ФП, не нашел. И тут бабах! Очень кстати) Спасибо большое, Тимур!
@doublegold4061День тому
пиздец, я нихуя не понимаю, слишком много ненужных терминов
@rikenbaker1День тому
Большое спасибо! Очень помоги в обучении
@artkrauchanka1779День тому
Ребятки, а чего айтишники так хиленько и болезненно выглядят? Огромные просадки со зрением, избыток веса, антисоциальные повадки... Наблюдаю больных и нервных людей с 5-10тыс. Долларов в месяц. Убить себя за бабки?
@dimitriywhite7728День тому
Получается, замыкание = грязная функция?
@dmitriy4415День тому
Никаких объектных обёрток над примитивами нет. Это выдумка. Смотри настоящую спецификацию.
@Son0fBeelzebub6 годин тому
поэтому в в8 объекты типа String/Number/etc.. помечаются как JSPrimitiveWrapper? примитив - это просто данные в виде объекта с метадатой внутри хипа джса. данные объекты - это объекты "вокруг" данных с доступом до методов над этими данными. так что глупость про "настоящую спецификацию", потому что они друг другу не противоречат
@dmitriy44155 годин тому
@@Son0fBeelzebub причём тут v8? А в Firefox что происходит? А в safari? Есть спецификация, где описан алгоритм, что делать, если идёт обращение к свойству примитивного значения. И не важно как там в deno или bun кто что как назвал.
@Son0fBeelzebub3 години тому
@@dmitriy4415 И в спайдерманки, и в джскор - +- аналогичные разновидности этого же механизма. то, что алгоритм называется иначе - не значит, что у подобного механизма нет академического названия. К примитивному значению при обращении неявно вызывается конструктор с доступом к методам. Так что тут как не виляй пятой точкой - суть дела не меняется.
@user-xm5hp5qp3iДень тому
Я не понимаю как ты умудряешься все так сжать и одновременно четко и объемно рассказать. Люто плюсую. Если бы я просто прочитал где такой код я бы сначала подофигел знатно. Немножко бы хотелось use case побольше, наверняка в rxjs массово применяются эти монады и функторы.
@user-wl2ok2mf6nДень тому
Как же ты хорош!
@diamondserg-43День тому
Спасибо
@Miixx-jb6hkДень тому
Мне 15 лео,хочу научится программировать.Подскажите пожалуйста,с чего начать(я полный ноль)
@03Rai2 дні тому
благодарю ♡. топчик 😍
@user-ok6rt7zb8p2 дні тому
Брат я так долго искал ошибку и с твоей помощью все понял. Спасибо большое за такой гайд. Респект и уважение
@vladislavepstein2 дні тому
После 15 минут видео у меня как радио-электромонтажника начал дёргаться глаз, а голова начала склоняться в сторону от количества информации, в ушах начался скрип текстолита и потихоньку валить дым от флюса :D Занятно, интересно, но нихрена не понятно)
@olegsozonik942 дні тому
Тимур огромное спасибо!!! Глыба Красавчик👏
@sadcreateramv27242 дні тому
Смотря и слушая это все, я осознал, что я не стану никогда программистом :D
@bogdankhamelyuk38572 дні тому
Братуха от души за информацию 🫡💪✊
@Peter-vz4tb2 дні тому
За курс по Angular (+ може nestjs) я б навіть гроші заніс
@midrala2 дні тому
Хочется сказать слова поддержки и выразить свое уважение к автору проделанную им работу. Спасибо Человек, ты делаешь этот мир лучше! Проделанная тобой работа помогает действительно стремящимся к знаниям людям получить их быстро и безболезненно, продолжай очень нравится. Творческих успехов и активной аудитории тебе!
@UlbiTVДень тому
Спасибо за такие слова ❤️🙏
@kostya41822 дні тому
Господи, как же все понятно, уже смотрю второй раз и все так же на одном дыхании. Смотрел в первый раз с телефона и только слушал т.к не было возможности кодить, щас смотрю второй раз но уже и что-то пытаюсь сделать в редакторе, и ощущение, интерес точно такой же как и при первом просмотре. Спасибо вам!!
@user-hy4qw4ki3o2 дні тому
Привет! Видео класс! Подскажи где ты рисуешь видеоряд? Слайды и т.д.