Чудовищно функциональный JavaScript

Sdílet
Vložit
  • čas přidán 27. 06. 2024
  • Знать и уметь как укрощать функцию должен каждый разработчик Фронтенда. Но путь к этому навыку тернист. В этом выпуске поговорим об основах функционального программирования!
    0:00 Пролог
    01:12 Библия функционального программирования и чистота
    03:00 Состояния функций
    04:35 Изменчивые друзья
    07:06 Декларативность VS Императивность
    11:32 Функции Первого Класса
    13:34 Гордые функции высшего порядка
    13:58 Компоненты высшего порядка в Reactjs
    14:43 Композиция как сердце и душа
    17:26 Старое доброе Каррирование
    ______________________________
    Один из моих самых любимых каналов о Фронтенде в telegram:
    t.me/frontendnoteschannel
    ______________________________
    Файлик с некоторыми примерами
    codesandbox.io/s/focused-kate...
    Компоненты высшего порядка в React js
    ru.reactjs.org/docs/higher-or...
    _____________________
    Для видео я использовал материалы из этих статей:
    1) maddevs.io/insights/blog/func...
    2) www.telerik.com/blogs/functio...
    3) opensource.com/article/17/6/f...
    4) blog.bitsrc.io/functional-pro...
    5) learn.javascript.ru/currying-...
    Спасибо авторам, хоть многие из них никогда не посмотрят эти видосы из-за языкового барьера)
    #JavaScript #reactjs #functionalprogramming #frontend

Komentáře • 203

  • @it2138
    @it2138  Před 2 lety +11

    Тренажеры HTML Academy (HTML, CSS, JS, React) + Академия + Книга рецептов фронтендера + комьюнити
    за 99 рублей:
    boosty.to/how-to-learn-it
    Какие тренажеры бывают:
    htmlacademy.ru/courses#fe-start
    Подписывайтесь:
    t.me/howToLearnIT
    ______________________________
    Файлик с некоторыми примерами
    codesandbox.io/s/focused-kate-hq4ef?file=/src/index.js
    Компоненты высшего порядка в React js
    ru.reactjs.org/docs/higher-order-components.html
    _____________________
    Для видео я использовал материалы из этих статей:
    1) maddevs.io/insights/blog/functional-programming-principles-in-javascript/#first-class-functions
    2) www.telerik.com/blogs/functional-programming-javascript
    3) opensource.com/article/17/6/functional-javascript
    4) blog.bitsrc.io/functional-programming-in-javascript-how-and-why-94e7a97343b
    5) learn.javascript.ru/currying-partials
    Спасибо авторам, хоть многие из них никогда не посмотрят эти видосы из-за языкового барьера)
    #JavaScript #reactjs #functionalprogramming #frontend

  • @user-wq1vy3yv2n
    @user-wq1vy3yv2n Před 2 lety +71

    Какие же чистые у тебя ролики.
    А композиция то какая!

  • @fuad2069
    @fuad2069 Před 2 lety +71

    С таким уровнем объяснения, и раскрытия важностей тем, вы должны быть на пьедестале среди ютуберов по js

    • @bublik462
      @bublik462 Před 2 lety +4

      Очень грамотно объясняет !

    • @demimurych1
      @demimurych1 Před rokem

      с таким уровнем обьяснения я бы блокировал на ютьбе. Потому, что ровно ничего из того, что сказал автор не является правдой. Все это следствия из FP а не его суть. Все эти следствия вытекают сами собой из самой сути FP. Иными словами не нужно знать набор всего что сказал автор видео, что программировать в FP парадигме. Но программируя в FP парадигме, все что рассказал автор - будет следствием само собой без участия в том программиста.

  • @ArthurYelkin
    @ArthurYelkin Před 2 lety +7

    Я очень рад, что в ютубе появляется всё больше крутых каналов на тему программухи.
    Вот еще +1 в мои подписки.
    Спасибо за ваши видео)

  • @romanroman4308
    @romanroman4308 Před 2 lety +2

    Спасибо за контент, жду вторую часть

  • @user-ny9nl2ji9f
    @user-ny9nl2ji9f Před 2 lety

    Очень крутой видос. С нетерпением жду продолжение.

  • @evgeniymarkitan862
    @evgeniymarkitan862 Před 2 lety +3

    Спасибо большое за такие видео
    Желаю успехов на ютубе)

    • @it2138
      @it2138  Před 2 lety

      Спасибо =)

  • @user-fc4iv9xv1j
    @user-fc4iv9xv1j Před 2 lety

    Дружище. Продолжай! Формат заходит на отлично!

  • @Slavec5
    @Slavec5 Před 2 lety

    Уроки кайф, на чиле на расслабоне рассказываешь крутые технические моменты

  • @user-bh6mc8pd8g
    @user-bh6mc8pd8g Před 2 lety +1

    классный видос, хорошая подача и монтаж, спасибо

  • @dobermanpharaoh7567
    @dobermanpharaoh7567 Před 2 lety

    Наконец-то мне замыкания стали понятными!!! супер спасибо

  • @SoldierDenny
    @SoldierDenny Před 2 lety

    Спасибо за такое шикарное вступление в мир ФП!

  • @DerTschelovek
    @DerTschelovek Před 2 lety +2

    Большое спаибо за ролик. Монтаж - кайф. видеоряд изумителен)

  • @nikto5878
    @nikto5878 Před 2 lety +1

    Благодарю за контент

  • @user-mi4ms5be1o
    @user-mi4ms5be1o Před 2 lety +2

    Благодарю, все по делу.

  • @user-hd3ov5lj1u
    @user-hd3ov5lj1u Před 2 lety +1

    Это алмаз среди каналов!

  • @aktotuttttt
    @aktotuttttt Před 2 lety +3

    Годный контент, спасибо

  • @Megabarm2000
    @Megabarm2000 Před 2 lety +1

    После такого видео не грех и подписаться, да что уж там и колокольчик зажать тоже!!!!😅

  • @woodDacha
    @woodDacha Před 2 lety

    Спасибо, очень познавательно!

  • @ReAgent003
    @ReAgent003 Před 2 lety +17

    Спасибо за ролики! 17:24 да, обёртка очень удобная и качественная получилась. Это первое применение reduceRight на практике, которое я увидел))
    Скоро, кстати, в этом отпадёт необходимость потому что в js подвезут оператор удобного чейнинга |>

  • @user-kb5kd7ln3h
    @user-kb5kd7ln3h Před rokem

    Ооочень годный видос🔥🔥🔥

  • @mamba-pc8xv
    @mamba-pc8xv Před 2 lety

    люблю ютуб за эту рекомендацию. очень годный контент на этом канале.

  • @2difficult2do
    @2difficult2do Před 8 měsíci

    Клёво объясняете и юмор сочный! Абстрактные понятия демонстрируемые на конкретных примерах становятся легче для понимания 👍 Вам спасибо! ютубу длинный коммент....

  • @lindafromdream
    @lindafromdream Před 2 lety +1

    Вау! Спасибо большое!

  • @user-tt4ll7qc2i
    @user-tt4ll7qc2i Před 2 lety +1

    На функциях высшего порядка мой мозг поплыл. Ну что ж, будем разбираться)

  • @galievramil1169
    @galievramil1169 Před 7 měsíci

    Отличное видео и подача!!
    Мне кажется, ты посчитал 11 Самых богатых людей

  • @Ramosok
    @Ramosok Před rokem

    Супер!!!!

  • @pavel.arepev
    @pavel.arepev Před rokem

    Спасибо
    Вы мощь

  • @AlexanderOhotnikov
    @AlexanderOhotnikov Před 2 lety +2

    Отличный и качественный контент! Продолжай в том же духе! )

  • @sonkn1ght455
    @sonkn1ght455 Před 2 lety +10

    Отлично) Но оч не хватило в части про каррирование фразы про частичное применение. Та функция которая запомнила дату например.

  • @nazarnazarenko437
    @nazarnazarenko437 Před 2 lety

    Просто талант!👏🏻👏🏻👏🏻

  • @olehy5000
    @olehy5000 Před 2 lety

    Спасибо! Полезный контент

  • @AibekSadraliev
    @AibekSadraliev Před rokem +1

    Привет!
    Спасибо за полезный контент!
    Подскажите пожалуйста, когда ждать вторую часть про ФП ?)

  • @AdequateRussian
    @AdequateRussian Před 2 lety +1

    Чел, ты классный! Реально! Почти никогда не пишу такие комментарии, но тебе респект!

  • @neyasbltb
    @neyasbltb Před 2 lety +3

    Отличная подача, так дежать!

    • @it2138
      @it2138  Před 2 lety

      Благодарю =)

  • @maksimzolotoi3379
    @maksimzolotoi3379 Před 2 lety

    Классные ролики ) на уровне

  • @lexsxebelphegore5677
    @lexsxebelphegore5677 Před 2 lety

    Круто! Вот также бы доступно кто изложил, но про монады, функторы, моноиды.

  • @Triumphator_IV
    @Triumphator_IV Před rokem +1

    Здравствуйте! Отличная подача материала! Мой вопрос, а где же вторая часть?

  • @TheILOVEYOUXD
    @TheILOVEYOUXD Před 2 lety +1

    Очень круто объясняешь!
    Лайк, подписка от меня!

  • @majes96
    @majes96 Před 2 lety

    спасибо, очень полезно)

  • @user-np3ob1ji8w
    @user-np3ob1ji8w Před 2 lety

    вив лав фром май харт! бест оф ве бест! Если серьезно: просто супер доходчиво! Крайне замечательно!))))

    • @it2138
      @it2138  Před 2 lety

      Мой любимый Мутко!) Даже не хватает его сейчас!
      Спасибо =)

  • @volodimiryemshyn715
    @volodimiryemshyn715 Před 2 lety +6

    Отлично, правда было слишком быстро :) Теперь пойду ломать голову своим коллегам :)

    • @it2138
      @it2138  Před 2 lety

      Пожалей ребят, они не виноваты =) Да возможно где-то я излишне ускорялся, хотел влезть в формат 20-ти минут

  • @TimurShemsedinov
    @TimurShemsedinov Před 2 lety +9

    Тимур одобряет, очень хорошо сделал

    • @it2138
      @it2138  Před 2 lety

      Спасибо Тимур! У тебя тоже классный канал!

    • @TimurShemsedinov
      @TimurShemsedinov Před 2 lety

      @@it2138 но, говорят, непонятный)

  • @user-tr8xi3ik3c
    @user-tr8xi3ik3c Před rokem +1

    Императивный подход отвечает на вопрос как это делать?
    Декларативный подход отвечает на вопрос что делать?
    Но всегда помни, что под капотом любого декларативного подхода лежит императивный.

  • @user-ix3xo9zs7l
    @user-ix3xo9zs7l Před 2 lety

    ПСасибо, супер инфа

  • @EwKlidstudio
    @EwKlidstudio Před 2 lety +4

    Никогда не понимал чем отличается по сути декларативное программирование от императивного. Как по мне все примеры, которые есть в интернете просто демонстрируют декларативный интерфейс просто как использование более абстрактных и высокоуровневых интерфейсов (типо не открой холодильник, достань банан, закрой холодильник и дай мне банан, а "хочу банан!"). Какая принципиальная разница то? Ну да, мы на другом уровне абстракции, и что?

    • @borisn879
      @borisn879 Před 2 lety

      Такие же мысли! В декларативном примере есть императивность, мы указали КАК делать. Асимптотически приближаемся к декларативности. Например, нужно посчитать общую стоимость в Корзине, придется указывать КАК это сделать.

    • @Ryhor1
      @Ryhor1 Před 2 lety +1

      Имхо, нужно проще: есть повторяющиеся наборы команд, тогда неплохо объеденить их в одну. Вот вам и декларативное программирование 👍
      А то разбирать код, где всё декоративно с дурацкими названиями, и код этих декларативных функций надо искать непонятно где, и эти декларативные используются только один раз... Ну это полный трэш. Тут только один вывод: у этого программиста было очень много лишнего времени, раз он решил так заморочиться.

  • @user-bg7ni7og9f
    @user-bg7ni7og9f Před 2 lety

    це було чудово

  • @user-uy5xf4gm2e
    @user-uy5xf4gm2e Před rokem +1

    Черт побери, мало того, что материал структурированный, осознанный и грамотно поданный, так еще и видео ряды и вставки радуют глаз. Откуда ты их берешь?

  • @user-hp2cg6px8c
    @user-hp2cg6px8c Před 2 lety +1

    5:35 - Петька и Василий Иванович

  • @defanji8484
    @defanji8484 Před 2 lety

    Привет! Зашел посмотреть видос из рекомендаций
    Так понравилось обьяснение принципа функционального программирования, что капец
    Но я не нашел следующей части...
    Ждать ли ее?

  • @suslikest3708
    @suslikest3708 Před 2 lety

    Ну это точно лайк:)

  • @user-it1ue8cq7j
    @user-it1ue8cq7j Před 2 lety +1

    Привет автор. Можешь объяснить про столбец "Нет состояниям", который есть на 11:10?

  • @vogeras
    @vogeras Před 2 lety

    Смотрю из ванны. Начал чистку с себя.

  • @olezhonnv3215
    @olezhonnv3215 Před rokem +2

    Главное - помнить, что под капотом любой декларативщины лежит импративщина! Хахаха)))

  • @AquaDiskoteque
    @AquaDiskoteque Před 2 lety

    Я бы еще добавил всё-таки 5 столп - ссылочная прозрачность)

  • @user-wk5ij2je3z
    @user-wk5ij2je3z Před rokem

    Экстримцоде отлично сказали про императивность/декларативность, а именно:
    Если мы детали прячем из одной функции в другие, мы все равно в императивном ключе описываем каждый шаг)

  • @reactnext13
    @reactnext13 Před 2 lety +3

    Какой же крутой видос, просто произведение искусства

  • @iliagroshev4780
    @iliagroshev4780 Před 2 lety +1

    Спасибо тебе за ролики, все отлично)
    Не будет роликов про Vue? Очень хотелось бы

    • @it2138
      @it2138  Před 2 lety

      Даа, подумываю что можно снять по vue)

  • @snatvb
    @snatvb Před 2 lety +16

    то что ты назвал сайдэффектом - им не является, это называние недетерминированная функция, то есть функция, которая работает непредсказуемо в зависимости от окружающих условий
    сайд эффект - это наоборот, влияние на окружение, то есть например, если твоя функция будет детерминированной(то есть всегда при вызове с теми же аргументами, возвращать один и тот же результат), но будет писать в лог или менять какие-то глобальные переменные, отсылать что-то на сервер - это и будет сайд-эффектом :)
    ps сам из FE и обожаю фп, юзаю rescript, советую попробовать)

    • @paul_wiggin
      @paul_wiggin Před 2 lety +1

      маслята схавают

    • @interhin
      @interhin Před 2 lety

      При этом в слух он проговорил правильное определение, там только на картинке косяк.

    • @it2138
      @it2138  Před 2 lety +2

      Спасибо огромное тебе! Я действительно допустил ошибку на монтаже и мне очень стыдно сейчас!
      Про детерменированность тоже классное замечание.
      Я обязательно в следующем выпуске про фп расскажу про свой косяк. Ещё раз спасибо!

    • @snatvb
      @snatvb Před 2 lety

      @@it2138 ничего страшного, все мы ошибаемся :) в любом случае это полезное видео

    • @alexpipin3693
      @alexpipin3693 Před 2 lety

      не много разобью вашу уверенность в себе, не результат возвращать а сигнатуру

  • @sekirogenshiro2210
    @sekirogenshiro2210 Před 2 lety

    Офигенный

  • @hillmytab7032
    @hillmytab7032 Před 2 lety

    Подписался по совету друга

  • @A_A_A182
    @A_A_A182 Před rokem

    Почему так хорошо

  • @olezhonnv3215
    @olezhonnv3215 Před rokem +1

    Декларативность на одном уровне абстракции - это императивность на другом.

  • @user-tg1je2vj1c
    @user-tg1je2vj1c Před 2 lety +1

    А теперь давай про монады и функторы

  • @awenn2015
    @awenn2015 Před rokem

    Спс, на карировании я просто поплыл

  • @zeOnni
    @zeOnni Před 2 lety +3

    Пример с чаем в декларативном виде не совсем верный. Скорее это будет как-то так.
    заваренный чай это опущенный в кипяток пакетик с зеленым чаем, где кипяток это вода разогретая до 100 градусов в чайнике

  • @schrimpium9450
    @schrimpium9450 Před 2 lety

    5:40 конечно! моя самая любимая серия квестов... Петька и Василий Иванович (он же ВИЧ )

    • @it2138
      @it2138  Před 2 lety

      Ооо даа) У меня с ним детство ассоциируется

  • @olezhonnv3215
    @olezhonnv3215 Před rokem +1

    Одна просьба к адептам ФП - пожалуйста, не тяните на фронт клужуру)))

  • @AquaDiskoteque
    @AquaDiskoteque Před 2 lety

    Давай вторую, часть про монады Maybe \ IO \ Either и комбинаторы с апликаторами и про лифт не забудь) и генераторы с рекурсиями для асинхронки) асинхронка самое то

    • @olezhonnv3215
      @olezhonnv3215 Před rokem +1

      Пишешь фронт на кложуре?

    • @olezhonnv3215
      @olezhonnv3215 Před rokem +1

      Иди на Лиспе программируй)))

  • @310384Alex
    @310384Alex Před 2 lety +1

    Мда, 20 лет пишу на вэб, 20 лет его учу, каждый пример который я видел можно записать кучей способов и каждый будет иметь свою изюминку. Видео отличное, за объяснение лайк. Теперь надо подождать и посмотреть как все это добро приживется на практике, как оно пройдет испытание временем.

  • @devope
    @devope Před rokem

    3:58 В примере слева должно быть `return ++number`

  • @user-oe9yx7gh4z
    @user-oe9yx7gh4z Před 2 lety

    У меня мозг чуть не взорвался.

  • @vmolo4ke
    @vmolo4ke Před 2 lety

    Кучу раз в рекомендациях этот канал показывал мне Ютуб, пропускал. Теперь жалею что потратил время не на твои видео)(

  • @oleksandrtolstoi5468
    @oleksandrtolstoi5468 Před 2 lety +1

    Огромная благодарность вам за ваши труды, нравится как и сам материал так и подача - все в ваших роликах безумно полезно!
    P.S. Но вот лично мне эти мультяшные вставки не очень нравятся, они отвлекают внимание, я бы их убрал)

  • @samolevich
    @samolevich Před 2 lety

    Астанавитес! Столько инфы в момент времени - это больно!
    Я забыл стоп-слово

  • @maxchuhryaev9936
    @maxchuhryaev9936 Před 2 lety +4

    Object.assign и spread создают копию только верхнего уровня свойств. А дочерние передаются по ссылке, что ни коим образом не гарантирует иммутабельность.
    Чтобы честно скопировать, не обойтись без рекурсивного копирования.
    А если объект неприлично огромен, копирование будет не эффективным и нужно применить другую технику.
    В общем, это я к тому, что наш мир не идеален )
    Не всё так просто, как в книжке пишут )

    • @it2138
      @it2138  Před 2 lety +3

      Даа, только на этот случай существует рекомендация в функциях работать с плоскими объектами. То есть работать с одним уровнем глубины.
      Нужно изменить что-то во вложенном объекте - пора идти в другую функцию.
      Применение deepCopy - это плохо с точки зрения оптимизации. Чтобы в одной функции создать один полностью новый объект приходится пройтись по всему дереву свойств. Хотя в подавляющем числе случаев это не нужно

  • @user-bo4sx6dm5c
    @user-bo4sx6dm5c Před 2 lety +4

    4:14 . Есть проблема. Функция не инкрементирует переменную, а просто прибовляет 1.
    Если я вижу функцию increment(var). Я ожидаю что var будет больше на единицу, а не функиция вернет мне var +1;
    В таком случае функция должна называться getPlusOne(var).
    Очень плохой пример...

    • @FrameMuse
      @FrameMuse Před rokem

      Согласен, и вообще, видео довольно сильно вводит в заблуждение на счёт всех этих тем, лучше курить мануал по всем этим темам и обучаться по этапно, чем слушать супер сокращённую интерпритацию. А это видео скорее просто развлекательное чем обучающие.

  • @andreygokhan6893
    @andreygokhan6893 Před 2 lety +5

    Спасибо за великолепную подачу полезного материала.
    Мне кажется что, интуитивно понятней когда в compose функции передаются в том порядке в котором они отрабатывают и когда используется reduce, а не reduceRight. Мы же чейним вызовы по порядку: вначале - первая, в конце - последняя, то есть слева - направо и сверху - вниз. В противном случае можно поломать себе мозг простым вписыванием аргументов, описывая действие от конца к началу. Дело в том, что из книг я вынес именно ту реализацию compose, которую считаю понятной. Но время от времени в ютубе натыкаюсь на такую как в видео и хотел бы понять, в чём смысл перевёрнутого compose?

    • @user-dl4eh1bd4z
      @user-dl4eh1bd4z Před 2 lety +1

      Я предполагаю что это идёт от хода выполнения вложенных функций, то есть сначала выполняеться самая вложенная(правая) и идёт налево.

    • @andreygokhan6893
      @andreygokhan6893 Před 2 lety

      @@user-dl4eh1bd4z Да. Если нагородить ад вложенных вызовов, то внимательный взгляд может заметить пространственное смещение первого вызова вправо. Но это только кажется. На самом деле первый вызов уходит куда-то туда, в глубину экрана, что заставляет нас реализовать позицию "сзади к переду"

    • @andreygokhan6893
      @andreygokhan6893 Před 2 lety

      На мой вопрос ответил Григорий Бизюкин в видео про фун-ое пр-е, где объяснил разницу между pipe и compose

    • @it2138
      @it2138  Před 2 lety +2

      @@andreygokhan6893 Да прости, я тоже хотел ответить. Очень хороший вопрос!
      Действительно есть противоположность для compose - pipe
      dev.to/benlesh/a-simple-explanation-of-functional-pipe-in-javascript-2hbj
      Про пайпы я хотел рассказать в серии про Реактивное программирование

    • @alexpipin3693
      @alexpipin3693 Před 2 lety

      паходу вы не поняли основную идею композиции, идея со стоит в том что бы передать данные по цепочке обратно управляющей функции, так как функции первые в цепочке могу стать управляющими в случае нужды, нельзя просто передавать аргументы "вперед", так как идея в том что бы вернуть измененные данные обратно, а каждая новая, в цепочке добавляет изменяемости, наоборот это очень удобно, когда с конца, так же не забываем по Y комбинаторы, которые разбивают нашу цепочку, на мелкие композиции
      советую вернутся и ещё раз прочитать книги и только теперь внимательно, так как в книгах идет именно этот пасыл, а вы обратно тянитесь к императивному стилю...

  • @AbraKadabra000
    @AbraKadabra000 Před 2 lety +7

    Годный(говнокод)(обычно (такое(кодревью(не, проходит))))

    • @it2138
      @it2138  Před 2 lety +1

      Красиво сделал))

  • @Hithori
    @Hithori Před 2 lety

    Когда прочитал название первой части видео: "Пролог", уже в холодный пот бросило

    • @it2138
      @it2138  Před 2 lety +1

      Ну слава богу! С этой целью и писал)

  • @alexroman8878
    @alexroman8878 Před 2 lety

    А то, что в реакте мы работаем со стейтами, - это не считается нарушением принципов фп?

  • @AbraKadabra000
    @AbraKadabra000 Před rokem

    4:00 постфиксный инкремент вернёт прежнее значение, то есть единицу.

  • @cijic
    @cijic Před rokem

    2:11 Впервые услышал чтобы someNumber прочитали как самнамба) Звучит как танец или кобра)

  • @JohnDoe-jd6vn
    @JohnDoe-jd6vn Před 2 lety

    Где-то прочитал классный коммент примерно следующего вида:
    "Что вы прицепились к этой иммутабельности? В Unity, например, где махровый ООП, всё мутируется и перемутируется и только фронтеры вдруг решили, что для двигания кнопко-формы нужна иммутабельность".
    Честно говоря, я тоже не понимаю этой повёрнутости.
    Кто-нибудь, пожалуйста, приведите РЕАЛЬНЫЙ пример, который показывает, что вот тут функция изменяет внешний объект\переменную и это плохо.

  • @olezhonnv3215
    @olezhonnv3215 Před 2 lety +3

    Почему жаваскрипт тормозит?
    Тут ответы на этот вопрос!
    ФП - это жалкая попытка представить себе идеальный мир, которая разбивается об жестокую реальность, против которой не попрешь!
    Увы! И ах!

    • @olezhonnv3215
      @olezhonnv3215 Před 2 lety +3

      И тормоза реакт сайтов бывают очень заметны на старых моб устройствах и компах, где меньше гига ОЗУ.
      На более современных устройствах - тормозов не видно. Но батарею садит быстрее. И это реально так!

  • @masha18able1
    @masha18able1 Před 2 lety

    Какой же ахуeнный контент!!!

  • @sergeus-kernel
    @sergeus-kernel Před 2 lety

    Привет, замечательно рассказываешь, так держать и успехов тебе!) Столкнулся с проблемой в каррировании)) забавная штука, но в консоли твой код при вызове с 2мя параметрами:
    console.log(curriedSum(1)(2));
    результат:
    ƒ (...args2) {
    // Снова вызываем curried, конкатенируя аргументы двух функций
    // console.log(args)
    return curried.apply(this, args.concat(args2));

    undefined
    , а по идее эта тема должна позволять запуск ф-ции с 2мя параметрами? и в чём подвох?!

    • @starwalker.odessa
      @starwalker.odessa Před 2 lety +1

      Возможно что ты-что то не так "перепечатал" )))))))))))))))))))))))))
      const a = curriedSum(1) - должен вернуть функцию ;
      const b = a(2) - ты ожидаешь - результат (значение)! ...а у тебя, снова, возвращается - функция!
      ...не знаю какой у тебя там уровень вложенности, но напрашивается вывод, что твое выражение должно быть сл.:
      console.log(curriedSum(1)(2)( 3 ));

    • @dm.hol.3624
      @dm.hol.3624 Před 2 lety

      Кнопка со скобкой не отвалилась?

  • @meidro_
    @meidro_ Před 2 lety

    8:27 метод sort с такой callback функцией сортирует элементы по возрастанию, поэтому первыми будут самые "бедные" люди

  • @Rafael-cq4rb
    @Rafael-cq4rb Před 2 lety +2

    В целом видео хорошее, но есть ошибка, вызванная недопониманием терминов.
    Чистота функции определяется двумя параметрами:
    1. Детерминированность/идемпотентность, т.е. функция при одинаковом наборе аргументоа всегда возвращает один и тот же результат
    2. Отсутствие побочных эффектов, т.е. функция не модифицирует внешние данные
    На 2:48 функция зависит от внешней переменной, т.е. она не идемпотентна, но сайд эффектов при этом не имеет.
    Ровно поэтому, например, функция Math.random() не чистая.
    Программа, которая состоит только из чистых функций ничего не делает. Поэтому, в том, что программистам платят за сайд эффекты, Владимир Гомонов прав)

    • @alexpipin3693
      @alexpipin3693 Před 2 lety

      пля вы заипали маслята, если тырите определения, не имея понятия что оно означает, хоть потрудитесь не с вики брать
      "один и тот же результат" - нет пля, не результат не что-то другое, а сигнатуру, передал ты массив, будь добр верни массив, передал строку, дальше додумай..

    • @Rafael-cq4rb
      @Rafael-cq4rb Před 2 lety

      @@alexpipin3693 А если функция принимает два аргумента, массив и строку, что по твоей логике она должна вернуть? Если функция принимает массив, она не может вернуть строку? Вот это не чистая функция (arr) => arr.join()? Если функция при одинаковых аргументах возвращает разные значения, она чистая? Вот это чистая функция (num) => num * Math.random()? Научи думоть плез, а то я запутался

  • @gatrianL
    @gatrianL Před 2 lety +1

    Увидеть код на проекте в котором есть чистые функции, это все равно что найти воду в пустыне)))

    • @it2138
      @it2138  Před 2 lety

      Ну не все же так плохо) Мне кажется чистые функции наоборот более менее все научились использовать

  • @xenonist4502
    @xenonist4502 Před 10 měsíci

    8:45 11 вышло)

  • @Hithori
    @Hithori Před 2 lety

    6:50 и dart с вопросом: а что нельзя было делать неявные setter'ы для полей... ладно, но я всё равно их буду создавать :)

    • @it2138
      @it2138  Před 2 lety

      Ради бога =)

  • @singlebw4065
    @singlebw4065 Před 2 lety

    может я чë-то не понимаю, но с чистыми функциями не добиться иногда нужного результата и приходиться заводить внешние переменные

  • @konstantindigit2945
    @konstantindigit2945 Před 2 lety +8

    Вот честно, не дай бог чтобы все это начали писать в проектах. Так как это просто будет жопаболь для других прогеров. Пиши императивно добавляя декларативность немного, декомпозируй функции и называй их правильно и читаться будет легко, как книга и мозг и глаза в целости будут. Да декларативщена короче, но зачастую хрен поймешь что внутри твориться, особенно если ее писал какой нить дятел который переменные называет одной буквой.

  • @kai3341
    @kai3341 Před 2 lety +7

    10:30 -- Буква S в SOLID всё ещё нарушена: функция сортировки также создаёт копию данных
    Вообще смысл рефакторинга в сокращении сложности кода. Результат же чудо-рефакторинга на экране читать сильно сложнее, и вовсе не потому, что он длиннее. Код стал безумно вязким -- он полагается на порядок вызовов. И нет, в таком виде ты НЕ переиспользуешь логику. Ты нагородил одноразовых функций.
    Неужели сами стрелочные функции вынести наружу сложнее? А после их комбинировать в хвост и в гриву?
    Общее замечание к видео -- ты не понимаешь, о чём говоришь. Нахвататься общих слов и комбинировать их в верных грамматических формах могут даже попугаи, но ты же программист, в конце концов.

    • @ablbaltabekov9083
      @ablbaltabekov9083 Před 2 lety +1

      Согласен с вами. Когда сократили функцию было все супер и понятно (конечно если супер придраться то можно и придраться статические значения в slice) . И оно не выполнял 3 задачи а одну (высчитать топ 10 самых богатых). Многие путают что S в солиде означает что функция должна выполнять только одно действие, но этот принцип совсем другой. S больше относиться больше к модульности и разделению по логике (бизнес логике и реализации, и не только). Но думаю для объяснения текущей темы про функциональное программирование с мини примерчиками хватит. Если разбирать то этот ролик зардулся бы на несколько часов с кучей философии)))

  • @dmitryshevchenko2504
    @dmitryshevchenko2504 Před 2 lety

    Свойство функции, которая при вызове с одинаковыми значениями параметров всегда всегда будет давать один и тот же результат называется "ссылочной прозрачностью".

    • @dmitryshevchenko2504
      @dmitryshevchenko2504 Před 2 lety

      Если функция обращается к некоторому элементу в своей области видимости, который не обладает ссылочной прозрачностью, то и сама функция также не обладает ею. Но такое положение дел можно исправить, переместив непрозрачный элемент в параметр. Несмотря на то что такой шаг перекладывает ответственность на вызывающую функцию, часто можно получить немалую выгоду от создания четко определенных модулей со ссылочной прозрачностью.

  • @user-ji8zm5wj6q
    @user-ji8zm5wj6q Před 2 lety +1

    Если функция всегда возвращает одинаковы результат при одних и тех же аргументах - это не значит, что она чистая. Это называется «детерминированность». Под капотом она может влиять на состояние из вне, но возвращать одно и то же. Чистая функция - это та, что не изменяет состояния приложения. И все.

    • @AndreyEricksonGame
      @AndreyEricksonGame Před 2 lety

      Такой вопрос. В ФП чистой функцией считается, детерминированная функция без побочных эффектов. А недетерминированная функция тоже имеет право называть себя чистой функцией, при условии, что она не будет изменять внешнее окружение или состояния приложения?

  • @starwalker.odessa
    @starwalker.odessa Před 2 lety

    Что-то по поводу чистоты функции half... сложились сомнения! С чистотой вообще очень спорный вопрос... Чистая функция - УНИВЕРСАЛЬНАЯ функция! Когда в ней нет "магических" значений, а есть только реализация операции, ...иначе (в качестве побочного эффекта) гарантированно получаем необходимость создавать + еще одну функцию (например), которая будет делить не на 2, а (скажем) на 3!!!
    function divider( a, b ) {
    return a / b ;
    }
    function multiplier( a, b ) {
    return a * b ;
    }
    function sum( a, b ) {
    return a + b ;
    }
    function calculations( a, b, processor ) {
    return processor( a, b );
    }
    const A = 4 ;
    const B = 2 ;
    const results = {
    div: calculations( A, B, divider ),
    inc: calculations( A, B, multiplier ),
    sum: calculations( A, B, sum )
    }

  • @zerdox4
    @zerdox4 Před 2 lety

    15:55
    проблема частично решается новым оператором "|>"

  • @user-qj2yg1rn3j
    @user-qj2yg1rn3j Před 2 lety

    так, что-то я подвис )