Смотрим вместе YT: Ulbi - Функциональное программирование от А до Я. ФП на JS.

  Рет қаралды 20,761

As For JS ...

As For JS ...

Күн бұрын

Посмотрим вместе, на скорости полтора, видео от
Ulbi TV: Функциональное программирование от А до Я. ФП на JS. Монады, функторы, каррирование, композиция
В этом видео мы поговорим про функциональное программирование на javascript. Разберем такие темы как: Декларативность, Чистые функции и сайд эффекты, Иммутабельность (неизменяемость), Функции первого класса, Функции высшего порядка, Композиция/конвейер, Частичное применение и каррирование, Chaining, Контейнеры, Функторы и аппликативные функторы, Монады, Спецификация Fantasy-Land
• Функциональное програм...
Таймкоды:
00:00:00 Музыка
00:09:30 Начало
00:10:20 Чтение чата, настройка звука
00:18:30 Ремарка
00:20:30 Что такое ФП
00:25:50 Концепции ФП
00:28:30 Декларативность
00:36:20 Чистые функции
00:46:00 Критерии чистоты
00:51:00 Иммутабельность
01:10:30 Функции первого класса и Функции высшего порядка
01:29:00 Ответы на вопросы и общение с чатом
AsForJs новости в Telegram: t.me/AsForJavaScript
AsForJs Talks в Telegram: t.me/AsForJsTalks
Поддержать маленького бородатого JavaScript-ра
Карта Приват (Bobrov Maksym): 5168745021397333
USDT Tron (TRC20): TKoZu59WHiX6L6qvwYTYTsZJerDrnAHBTx
USDT etherium (erc20): 0x75fb8a62dfcf453b2e73f1ef1c407d46f918fffa
TON: UQAGXvuhxg3qU0eFgOxtdDlKXqdp1zPq6yCRSRbRYQClxOzH
bitcoin:bc1q74aru82v4d3alay7p53jdwkmxe4a5gz7fmvfm2?message=AsForJS&time=1686349743
PayPal: demimurych@protonmail.com
/ demimurych
Boosty: boosty.to/asforjs
Текст до відео:
docs.google.com/document/d/1w...
⎡~yt ~01~Ulbi ~fp ~js⎦

Пікірлер: 116
@AsForJS
@AsForJS 14 күн бұрын
00:00:00 Музыка 00:09:30 Начало 00:10:20 Чтение чата, настройка звука 00:18:30 Ремарка 00:20:30 Что такое ФП 00:25:50 Концепции ФП 00:28:30 Декларативность 00:36:20 Чистые функции 00:46:00 Критерии чистоты 00:51:00 Иммутабельность 01:10:30 Функции первого класса и Функции высшего порядка 01:29:00 Ответы на вопросы и общение с чатом
@LenaFelica_songwriter
@LenaFelica_songwriter 21 күн бұрын
Тимур, спасибо тебе огромное за твой контент!! обучалась и буду обучаться по нему!!)) Тимур - большой молодец!! ТО, что он дает для обучения, как преподносит материал - бесценно!! Я думаю, что каждый, кто обучается по его роликам и курсам, понимает о чем речь))) Для меня Тимур - самый ЛУЧШИЙ онлайн преподаватель в русскоязычном ютубе!! я бы очень хотела попасть в его команду в работе)) понимаю, что это будет бесценно для меня! но пока это только мечты)))
@timmusharapov9257
@timmusharapov9257 20 күн бұрын
Тимур - это имя Мурыча?
@LenaFelica_songwriter
@LenaFelica_songwriter 20 күн бұрын
@@timmusharapov9257 Тимур Ульби - автор контента UlbiTV, его ролики Мурыч разбирает
@unclechernomor4421
@unclechernomor4421 14 күн бұрын
Посмотрите курс по Вью о Климова, вот где интересно. А глубокие знания наверное у Тимура Шемсидинова. Ulbi чисто как общее понимание , у меня такое вречатление
@_Good_Evening_
@_Good_Evening_ 21 күн бұрын
Ура, новый видос от Мурыча!!! Жду их с таким же нетерпением, как раньше ждал новых серий игры престолов)
@OwezAtajanow
@OwezAtajanow 8 күн бұрын
СПАСИБО БОЛЬШОЕ ЗА ЭТОТ БЕСЦЕННЫЙ КОНТЕНТ. ЖЕЛАЮ ВСЕГО НАИЛУЧШЕГО ❤❤❤
@user-tt3bk7dw2z
@user-tt3bk7dw2z 21 күн бұрын
Вау, дуже сподівався, що у вас зʼявиться огляд на це відео, ввечері подивлюсь 🔥
@GoogleHater
@GoogleHater 21 күн бұрын
2:15:00 код котооый можно прочитать не устареет так же быстро, как код, который быстро выполняется. Бизнес это про скорость реакции на изменение коньюктуры, а не про экономию процессорного времен
@blackFortuna1358
@blackFortuna1358 21 күн бұрын
Это не отменяет того факта, что нужно знать как писать производительнее и для процессоров. И понимать, чему и когда давать приоритет. А не знать как писать производительно и приколы - быть плохим программистом. Это блин наша работа. Как быть врачом и уметь оказать первую помощь
@GoogleHater
@GoogleHater 21 күн бұрын
​@@blackFortuna1358не отменяет, но читабельность в 80% случаев важнее
@o1gerd
@o1gerd 20 күн бұрын
Лучшее завершение стрима
@GoogleHater
@GoogleHater 21 күн бұрын
1:38:00 не согласен, что js без фреймворка сейчас достаточно для решения твоих задач. Уровень абстракции React позволяет писать на ПОРЯДКИ быстрее системы, за счет декларирования правил модификации данных и отображения их в браузере. А так же предоставляет методы для избавления от руттинных констрккций. Которые, как раз, и декларируют что есть данные и как они они модифицируются. Без React сейчас невозможно реализовать сервисы за адекватное количество денег и времени. Говорю как разработчик одного из самых больших веб-продуктов в мире. Правила react объективно решает задачи бизнеса: понятно и одинакого, с текущеми людскими ресурсами в мире, быстро МЕНЯТЬ разные участки системы для решения задач в данную секунду. JS - это уже палочки и проволочки
@blackFortuna1358
@blackFortuna1358 21 күн бұрын
Возможно, вам не не хватает личной компетенции или вы стали разработчиком не JS, а React. Я предпочитаю использовать Svelte и последний год ловлю себя на мысли, что хочу сделать его форк с «strict mode», выкинув из него вагон всего. Работа с DOM - соглашусь, в проде нужен фреймворк. Но вот всё остальное, написанное нативно будет существенно производительнее чем эти абстракции ради абстракций, да быстрее и сама разработка будет. Реакт в этом плане вообще какой-то ужас
@GoogleHater
@GoogleHater 21 күн бұрын
@blackFortuna1358 я разработчик на многих языках и моих компетенций более чем достаточно что бы программировать абстракциями. И выбирать решения для сотен программистов, что бы писать продукт согласованно и в рамках конкретных задач бизнеса. Одна из таких задач: что бы программисты меньше писали кода и быстрее реализовывали новое требования бизнеса и государства
@blackFortuna1358
@blackFortuna1358 21 күн бұрын
​@@GoogleHaterа выпустить качественный продукт не входит в требования? Важен баланс, а не гонка за скоростью выхода на рынок. Могу сказать за свою компанию. Мы наоборот имеем преимущество перед другими, что у нас будет чуть дольше, но не тяп-ляп и погнали) Бенчмарки входят в KPI (не на уровне фанатизма).
@GoogleHater
@GoogleHater 21 күн бұрын
​@@blackFortuna1358я же написал, что это одна из ключевых задач, но не единственная. Мы тут обсуждаем аспект того что для js не нужны фреймворки для решения задач реальногл бизнеса.
@blackFortuna1358
@blackFortuna1358 21 күн бұрын
​​​@@GoogleHaterвот и я лично скорее согласен с Мурычом, просто не до такой степени. Фреймворк нужен, но точно не ужасный монстр реакт с абстракциями ради абстракций) Вот для меня таким стал Svelte (особенно 5-ка, которая ещё не вышла). Удобная работа с DOM и никакого навязывания чуть ли уже не другого языка. И то, я когда-нибудь в свободное время буду делать форк и добавлять возможность управления компилятором, чтобы отключать проверки ради проверок, когда я знаю, что условно там будет строка (вон она блин, через const объявлена) и не нужна проверка typeof от фреймворка. Пример так себе, но такого вагон.
@narek7281
@narek7281 12 күн бұрын
great video
@lesson-web
@lesson-web 20 күн бұрын
Мурыч - легенда
@mi4i045
@mi4i045 5 күн бұрын
Дякую Вам за Ваш контент. Жаль що більше немає українською, але дякую що хоча б спробували!
@lysak_coding
@lysak_coding 21 күн бұрын
Привет! Какие книги можешь посоветовать по ФП?
@user-dn7qr7vs1h
@user-dn7qr7vs1h 18 күн бұрын
Он не разбирается в ФП. Спроси в сообществе функциональщиков.
@evgeniy3370
@evgeniy3370 17 күн бұрын
​@@user-dn7qr7vs1h это какое? Тг каналов не нашёл конкретно по фп
@user-dn7qr7vs1h
@user-dn7qr7vs1h 18 күн бұрын
> Невозможно решить какую-либо задачу в ФП Можно и решается. То, что Мурыч не изучил сабж в достаточной мере чтобы понять это, и чтобы понять, почему - не значит, что это не так. Те же Хаскель, Идрис, Агда и т.п. - чистые функциональные языки (что бы Мурыч об этом ни думал), и программисты на них каждый день решают реальные задачи, взаимодействуют с файловой системой и т.п.. Погромист на чистом ЯП в main описывает вычисления, которые должна произвести программа (включая грязные вещи вроде писания в файлы и чтения из них). Это ОПИСАНИЕ - чистое. Т.е. его можно передавать в функции, трусить туда-сюда, и ничего не произойдет. Упрощенно говоря при запуске программа вычисляет main, и затем "интерпретирует" полученную последовательность действий. Чуть менее упрощенно - программа может быть текстом (пайтон скрипт), числом (последовательность байт), лентой машины Тьюринга, лямбда-термом и т.п.. Не нужно сайд-эффектов чтобы сгенерировать программу на С, как и не нужно их для того, чтобы превратить ее в машинный код. Собственно, что тогда мешает на чистом языке описать программу, которая взаимодействует, скажем с файловой системой? Ничего. Мурыч путает программу, как описание вычислений, и сами вычисления. Последнее не имеет отношения к парадигме. Парадигмы программирования, они об описаниях вычислений (т.е. о программах), а не о том, как main запустить и интерпретировать синтаксическое дерево. Если интересно, что такое ФП - не изучайте этот вопрос по видосам тех, кто об этом где-то слышал, или не занимается постоянно. Они не расскажут. Хотя Ulbi довольно неплохо с этим справляется (пишу комментарий не досмотрев его видео до конца, так что сложно сказать наверняка).
@AsForJS
@AsForJS 10 сағат бұрын
Программа не может существовать без ввода вывода. Ввод вывод - это императивная парадигма. > Можно и решается. То, что Мурыч не изучил сабж в достаточной мере чтобы понять это, и чтобы понять, почему - не значит, что это не так. Те же Хаскель, Идрис, Агда и т.п. - чистые функциональные языки (что бы Мурыч об этом ни думал), и программисты на них каждый день решают реальные задачи, взаимодействуют с файловой системой и т.п.. Мурыч пишет в ФП с 1994 года. 34 года уже. Тот же Хаскель, отмечает код, которые выходит за рамки функционального меткой IO. То что Хаскель функциональный язык не значит, что в нем нет императивных компонентов. > Упрощенно говоря при запуске программа вычисляет main, и затем "интерпретирует" полученную последовательность действий. Она должна получить на вход данные, после чего отправить их на вывод. Ввод/вывод не может быть реализован в ФП - ПРИНЦИПИАЛЬНО Любой ФП язык - это смесь императивного и функционального кода. Смотри выше про хаскель. > Не нужно сайд-эффектов чтобы сгенерировать программу на С, как и не нужно их для того, чтобы превратить ее в машинный код. И получить сайд эффекты на любом этапе ввода вывода. Поскольку ваша программа не сможет никак его контролировать. Это лежит за пределами ее возможностей. > Собственно, что тогда мешает на чистом языке описать программу, которая взаимодействует, скажем с файловой системой? Ничего. Все мешает. Начните с того, что Вам нужно файловую систему считать в память. Для этого Вам нужно взаимодействовать с устройством. Как следствие у вас первый сайд эффект - работа устройста. >Мурыч путает программу, как описание вычислений, и сами вычисления. Последнее не имеет отношения к парадигме. Парадигмы программирования, они об описаниях вычислений (т.е. о программах), а не о том, как main запустить и интерпретировать синтаксическое дерево. Мурыч ничего не путает. Мурыч разве что не смог достаточно явно Вам показать где синтаксис языка, а где абстракция. А Вы все смешали в кучу. Думаю Вам станет много больше понятнее когда я перепишу это видео до конца. >Если интересно, что такое ФП - не изучайте этот вопрос по видосам тех, кто об этом где-то слышал, или не занимается постоянно. Они не расскажут. Хотя Ulbi довольно неплохо с этим справляется (пишу комментарий не досмотрев его видео до конца, так что сложно сказать наверняка). Мурыч пишет в ФП с 1994 года
@user-dn7qr7vs1h
@user-dn7qr7vs1h 7 сағат бұрын
@@AsForJS Давайте определимся с терминами, в частности, с "чистотой". Чистота отличает математические функции от джаваскриптовых функций с IO и мутабельностью. В чистом функциональном языке нет сайд эффектов. В этом мы согласны? Если да, тогда идём дальше. Хаскель - чистый функциональный язык *по определению*, и соответствует этому определению как минимум до учёта unsafePerformIO и error. Что позволяет чистым прикладным ФП языкам описывать весь спектр IO и оставаться при этом чистыми - это монады. Математический концепт, который в 91 Wadler завёз в Хаскель специально для этого. См. вайтэйпер Philip Wadler: Monads for functional programming programming. Это что-то вроде "аргумента к спецификации". В качестве альтернативы можно попробовать доказать через понятие Тьюринг-полноты: Дано: 1. Любая программа на тьюринг-полном языке может быть выражена на любом другом Тьюринг-полном языке 2. Лямбда-исчисление лишён сайд-эффектов и является тьюринг-полном языком (и математической формулой по совместительству, но не суть). Если с этим согласны, то получаем, что любую программу, написанеую на Тьюринг-полном языке (например Js) можно выразить в лямбда исчислении, и она не будет иметь сайд эффектов. Аргумент к теории вычислимости.
@user-dn7qr7vs1h
@user-dn7qr7vs1h 7 сағат бұрын
@@AsForJS третий аргумент: к детерминированности функций. Если мы согласны, что сайд-эффекты всегда приводят к недетерминизму - ещё проще. Нетрудно увидеть и несложно проверить, что f :: Int -> IO (); f n = print n абсолютно детерминированная функция. fmap f [0..5600] - не вызовет ни одного сайд - эффекта, даже если будет вычислено вплоть до WHNF от результата f (каким-нибудь deepSeq, например). Более того, fmap f (repeat 5) - список эквивалентных элементов (читай, f детерминирована) (подразумевается эквивалентность по Лейбницу: a = b iff forall f g. f a = g a). Ну и ещё, IO можно определить самостоятельно, и вшить в рантайм языка его интерпретатор, чтобы получить тот же результат. Например, если монада IO будет определена как data IO a where PutStrLn :: String -> IO () GetLine :: IO String Pure :: a -> IO a Bind :: (a -> IO b) -> IO a -> IO b То мы тоже сможем описывать небольшую часть программ с вводом-выводом, чисто и функционально, в виде структуры данных.
@404Negative
@404Negative 20 күн бұрын
в конце стрима у мурыча подгорел функтор
@user-nc1zf7fi4e
@user-nc1zf7fi4e 17 күн бұрын
Почему заставка всего 10 минут? И про кота мало. 🙂
@denispopov3626
@denispopov3626 10 күн бұрын
51:40 PREPARE FOR DEALLOCATION
@CuriousSpy
@CuriousSpy 21 күн бұрын
Я для фп в жсе делал kirka
@0xSxVKaJnwQ
@0xSxVKaJnwQ 18 күн бұрын
57:50 Если мы при работе с массивом внутри функции, например, обращаемся к наследованному экземпляром массива методу sort, функция теряет чистоту. Соответственно, можно лишь самому изобретать велосипед сортируя массив, чтобы сохранить чистоту? Звучит бредово.
@klapperbein6632
@klapperbein6632 13 күн бұрын
хотелось бы поменьше цензуры)
@DenisXemc
@DenisXemc 21 күн бұрын
Мурыч, уважаю ваше творчество. Но я не совсем понимаю, как при вашем подходе к решению задач выйти на хотя бы минимальный уровень владения языком, при котором смело можно называть себя программистом. В идеальном мире вероятно есть возможность долгое время изучать основы языка и только потом приступать к его использованию, но сейчас же люди идут в эту сферу из-за того, что им она могла понравиться во время того, когда они смогли упростить свою жизнь при помощи кода. Приведу пример, при обучении на строительной кафедре, мне не нравилось то, что в расчетах приходилось в ручную переделывать цепочку исчислений при ручном подборе конструкции, в начале я опробовал excel, но понял что этот инструмент не даёт мне возможность делать циклы для подбора наиболее выгодного результата, а познакомившись с языком js, его базовых инструментов хватило для решения данной задачи. Я это привел затем, что нынешнему рынку, по моему мнению, не нужны только сверх программисты оптимизаторы, ему нужны люди, которые понимают бизнес область и обладая минимальными знаниями ЯП могли решить задачу за МИНИМАЛЬНЫЙ промежуток времени
@blackFortuna1358
@blackFortuna1358 21 күн бұрын
Я скорее понимаю его посыл как «не считайте себя гуру программистами, когда на самом деле вы и азов не знаете». Это прям повальная проблема чудо-сеньёров за три года, которые думают, что всё знают. Путь программиста как путь самурая. Долгий, нудный и на любителя. Именно путь профессионала, а когда вы какие-то абстракции поняли - не значит, что стали сеньёром
@Drewaka
@Drewaka 21 күн бұрын
Есть академия. А есть работа. Как врач практик и врач педагог.
@rsqssd
@rsqssd 21 күн бұрын
⁠@@blackFortuna1358Если тебя взяли как сеньёра и платят как сеньёра, то ты сеньёр
@blackFortuna1358
@blackFortuna1358 21 күн бұрын
@rsqssd не уборщик, а «Менеджер чистоты и блеска». А инфоцыгане с миллионами заработка передают привет. Профессионалы из автоспорта крестятся от того, что происходят на дорогах. Если вас взяли кому-то водителем и платят большую зарплату, не значит, что вы действительно умеете водить и чувствуете машину, даже если вы считаете иначе.
@rsqssd
@rsqssd 21 күн бұрын
@@blackFortuna1358 у меня тут коммент оставленный?
@WERWOLION
@WERWOLION 20 күн бұрын
Вопрос на миллион долларов, язык go для создания сайтов тупик или для Бэка с VUE лучше PHP?
@Nini-sv1bd
@Nini-sv1bd 18 күн бұрын
да, гони миллион
@michaelmyers717
@michaelmyers717 11 күн бұрын
Отвечу так, скорее всего придётся знать и пыху и го, чтобы быть хорошим программистом
@WERWOLION
@WERWOLION 11 күн бұрын
@@michaelmyers717 ну если ты знаешь пыху го и фронт то ты вообще говно программист. Это как если твой хирург еще и сантехник и водитель автобуса.
@michaelmyers717
@michaelmyers717 11 күн бұрын
@@WERWOLION нет, ты просто ещё никогда не работал и вкатун
@WERWOLION
@WERWOLION 11 күн бұрын
@@michaelmyers717 т.е. ты идеально знаешь 10 языков программирования и рисуешь лучший дизайн
@DmitryKvasnikov
@DmitryKvasnikov 20 күн бұрын
А есть ссылка на дискуссия Дядюшки Боба, упомянутую в видео?
@blackFortuna1358
@blackFortuna1358 18 күн бұрын
У Winderton-а был обзор, там много ссылок будет где почитать
@user-oj2nr1hd4h
@user-oj2nr1hd4h 21 күн бұрын
29:09 `истинная ебанина` - только на нашем славянском так можно завуалировать современное ФП
@Son0fBeelzebub
@Son0fBeelzebub 20 күн бұрын
конечно, ведь ни в едином языке нет подобных конструкций. может ещё крылатых выражений у нас больше, чем у всех?
@cubuanic
@cubuanic 21 күн бұрын
Начало 9:30
@consolidatedauthoritarian
@consolidatedauthoritarian 19 күн бұрын
Олдфаги не помнят , ньюфаги не знают 🤫
@kirylbehansky1315
@kirylbehansky1315 21 күн бұрын
"JS - язык для детского сада" жаль дока JS не для детского сада)
@astkh4381
@astkh4381 20 күн бұрын
Почему для детского сада?
@kirylbehansky1315
@kirylbehansky1315 20 күн бұрын
@@astkh4381 цитата мурыча
@TahirDibirov-cj6pd
@TahirDibirov-cj6pd 19 күн бұрын
1:08:09 В ФП нет шага "сделай копию" но в JS это приходится делать
@user-dn7qr7vs1h
@user-dn7qr7vs1h 18 күн бұрын
В ФП нет "шага".
@user-cw2xk5jt6w
@user-cw2xk5jt6w 20 күн бұрын
Пока Мурыч обкладывает улби половыми органами, второй на своём курсе сделал пару лямов $. Вопрос теперь. Кто получается умнее?
@prayer4675
@prayer4675 20 күн бұрын
Он просто предприимчивее, а не умнее.
@404Negative
@404Negative 20 күн бұрын
пару триллионов евро
@railbatyrshin7349
@railbatyrshin7349 19 күн бұрын
Нужно задаться вопросом - преследует ли Мурыч заработок на своем контенте? Мне кажется он кайфует от своей деятельности, что ему не интересны мнения таких как ты, не?)
@danderluf7749
@danderluf7749 19 күн бұрын
В данном видео, если ты его не смотрел, Мурыч на удивление никого половыми органами особо не обкладывает
@unclechernomor4421
@unclechernomor4421 14 күн бұрын
Пару лямов вряд ли он сделал, но пару копеек поднял
@chikenmacnugget
@chikenmacnugget 21 күн бұрын
очевидно предположить то, очевидно предположить се. Воздухан, пруфай сиди по фактам. Одни абстрактные я то я сё. Женщина
@astkh4381
@astkh4381 20 күн бұрын
Прозвучит банально, но в жизни ты бы никому так бы не сказал.Так зачем в комментариях так выражаться?)
@chikenmacnugget
@chikenmacnugget 20 күн бұрын
@@astkh4381 звучит банально, но в жизни ты никому бы так не ответил. Так зачем так отвечать?
@astkh4381
@astkh4381 20 күн бұрын
@@chikenmacnugget кончено бы ответил).Я же ничего грубого не сказал и на личность не переходил
@chikenmacnugget
@chikenmacnugget 20 күн бұрын
@@astkh4381 ну вот и я бы сказал. Потому что описал его фактическое поведение.
@astkh4381
@astkh4381 20 күн бұрын
@@chikenmacnugget ты бы не сказал)
@ruslankomlykov9207
@ruslankomlykov9207 21 күн бұрын
Не несите чушь. Посмотрите на его рубаху 😮. Если у вас остались сомнения, удачи. 😅
@GoogleHater
@GoogleHater 21 күн бұрын
Нужно оперировать не к личности, а к тезисам
@12345_qwerty
@12345_qwerty 21 күн бұрын
Посмотрите на его рубаху)) аргумент уровня я даже не знаю кого… это дно полное
@1tsv1kt0r
@1tsv1kt0r 21 күн бұрын
смотріте-смотріте, типичній русачок порвался! :)
@timmusharapov9257
@timmusharapov9257 20 күн бұрын
А что с рубахой? Хорошая рубаха.
@evgeniy3370
@evgeniy3370 17 күн бұрын
​@@1tsv1kt0r тааак)), а разделение на типы "русачков" у вас имеется?
Чудовищно функциональный JavaScript
21:31
Как пройти в IT?
Рет қаралды 54 М.
小女孩把路人当成离世的妈妈,太感人了.#short #angel #clown
00:53
IS THIS REAL FOOD OR NOT?🤔 PIKACHU AND SONIC CONFUSE THE CAT! 😺🍫
00:41
Each found a feeling.#Short #Officer Rabbit #angel
00:17
兔子警官
Рет қаралды 7 МЛН
ПРОЦЕССОРЫ ARM vs x86: ОБЪЯСНЯЕМ
12:07
Droider
Рет қаралды 688 М.
Смотрим вместе YT: Ulbi - SEO от А до Я
2:56:35
React JS фундаментальный курс от А до Я
3:01:08
小女孩把路人当成离世的妈妈,太感人了.#short #angel #clown
00:53