Может делать такие мини уроки постоянно? (про фундаментальные вещи)
@katyakravchenkouslife88045 жыл бұрын
согласна, было полезно послушать
@qazyhn945 жыл бұрын
Да и не только, больше научных вещей для нас тупеньких, такого контента в сети практически нет, все синтаксис языка рассказывают и тд
@amerlantokhtarov39435 жыл бұрын
Поддерживаю. Мало кто может рассказать об общих вещах применимых для всех языков.
@Карим-в2д5 жыл бұрын
Amerlan Tokhtarov это все есть в инете , просто надо ввести в Гугле концепции функционального программирования
@SeniorSoftwareVlogger5 жыл бұрын
Как быть если ты не знаешь, что функциональное программирование есть?
@92OopSs5 жыл бұрын
Вот это годнота. Побольше такого контента.
@IceKorm5 жыл бұрын
Топовый контент. На опыте.
@zakiro42772 жыл бұрын
лучшее видео по данной теме
@vasilys97765 жыл бұрын
Годнота, если бы я был новичком, для меня бы это было очень полезно. Короткое объяснение важных концептов то что нужно.
@GloriousJenya5 жыл бұрын
Очень крутой подкаст, побольше таких пожалуста
@sdavidk845 жыл бұрын
Спасибо за ваше старание! Очень хороший и важный контент!
@Th_VOID5 жыл бұрын
Понравилось, мне как начинающему инфа показалась крайне полезной.
@ВладБирюков-е7г4 жыл бұрын
Очень интересно было посмотреть про такие детали языка js, спасибо
@ПодушечкаМягкая5 жыл бұрын
Огонь! Очень нужный формат
@downloadfils5 жыл бұрын
Спасибо за материал, этот жест на 5:43 - "четко, знаете ли, получилось". :)
@КостянЕрмаков-е9ю5 жыл бұрын
Во, привет Дима!, возник вопрос во время просмотра видео. Можешь ли рассказать про тестирование (именно про тестирование своего кода, на каком этапу обучения лучше всего стоит обращать внимание на тестирование и осваивать его, и какие сейчас инструменты для этого лучше всего подходят (библиотеки и т.п))? Думаю, что тема должна быть интересной.
@danilamakarov7984 жыл бұрын
Хорошее видео.
@cobwowcobwow63315 жыл бұрын
Коротко но полезно! Спасибо!
@outsider21405 жыл бұрын
Все гуд. Но момент, когда ты смотрел в ноутбук и говорил на камеру был странным.
@Александр-р4и2з4 жыл бұрын
коротко и ясно, большое спасибо
@LxndrKrchvtsv5 жыл бұрын
Благодарю за видео, было полезным.)
@eugzubv43365 жыл бұрын
Господин Сеньор, делайте новые видосики пожалуйста!
@stillwinner86315 жыл бұрын
Я Джуниор Фронтенд и мне познавательно разбираться в семантике языка. Плюсую из Украины)
@МаксГончарук-г6м5 жыл бұрын
Спасибо Вам за труд! Очень познавательно.
@myvin28877 ай бұрын
Интересно разве что для общего развития, из серии проблемы выбора правильного корма для сферического коня в вакууме😂
@annabeauty70845 жыл бұрын
Спасибо за видео!
@serjiokin5 жыл бұрын
Думаю что чем больше подписчиков у него на Patrion тем больше мотивации делать подобную годноту
@tmdan915 жыл бұрын
Спасибо полезное видео
@MegaARTUR19985 жыл бұрын
Вероятно еще можно было сказать про возможность мемоизации
@SeniorSoftwareVlogger5 жыл бұрын
и про многопоточность
@dbmb12985 жыл бұрын
@@SeniorSoftwareVlogger мемоизация очень интересная тема
@eroero52255 жыл бұрын
действительно мемемизация очень интересная тема,осветите такие популярные мемы,как флекс рикардо милоса.
@СергейАлексеев-ж9ц6н5 жыл бұрын
Не совсем понятна фраза "Грязный функции - плохо". А как тогда без них обойтись? К примеру те же функции форматирования даты, логирования, записи в базу и др. Разве использование их является плохим?
@SeniorSoftwareVlogger5 жыл бұрын
Нет не является. Да, можно обойтись в других языках
@joma03055 жыл бұрын
Senior Software Vlogger то есть можно обходиться только чистыми функциями?
@SeniorSoftwareVlogger5 жыл бұрын
Можно, например в Haskell
@yurim77564 жыл бұрын
Так, не всё, что плохо, нельзя никогда использовать. Это вопрос стремления. Надо стремиться к хорошо и избегать плохо. Если код нельзя весь написать на чистых функциях, то все таки лучше разделить код, и как можно бОльшую часть писать на чистых, а на грязных необходимый минимум. (конечно, смотря как вы решили моделировать задачу. Если ООП, объекты с состояниями, ну значит так).
@AlbertBikeev5 жыл бұрын
Интересно, спасибо! Но очень важное преимущество не упомянули - композабельность. Намного проще переиспользовать чистые функции на уровне конкретных типов, чем те, что помимо одной задачи ещё пишут в файл, бросают исключения и подобное.
@bigenough21224 жыл бұрын
круто, спасибо)
@karrmannov5 жыл бұрын
Годное объяснение👍
@romanmotovilov1292 жыл бұрын
Спасибо за отличный урок! Вопрос к знатокам. Я думаю автор урока оговорился, на 4:21 автор говорит, что можно поменять значение константы. Это оговорка или в JS есть какой-то способ это сделать? Не умничаю, мне просто интересно.
@izvarzone2 жыл бұрын
В Unreal Engine в блюпринтах чистые функции зеленого цвета, а не чистые - синего. У зеленых нет input/output execution pin-ов, только input/output для данных.
@jasurkurbanov52743 жыл бұрын
Спасибо, можно ваш пример изпользовать для написании статии ? Пишу на английском
@SeniorSoftwareVlogger3 жыл бұрын
Можно
@AShahabov3 жыл бұрын
Я так пологаю, что если метод MyClass1.Foo() использует у себя внутри ServiceClass.Foo(), то такой метод (MyClass1.Foo()) автоматом не есть чистая функция?
@vladimirmironov50225 жыл бұрын
Спасибо
@freedomplayer23885 жыл бұрын
Спасибо за видео! Но как написать чистую функцию randomize(x), если предполагается, что она должна вернуть случайное число, учитывая какой-то параметр? Или мы просто не называем её "чистой" и всё?
@vladimir0rus5 жыл бұрын
Чистые функции еще хороши для автоматической оптимизации кода компилятором.
@PavelKoryagin5 жыл бұрын
Пример с константой выглядит ошибочным. С таким определением чистых функций не существует вообще. Пример: Возьмём, например, чистую функцию (x) => x * x. Она использует очень много внешних определений, например сам интерпретатор. Если мы изменим код интерпретатора, чтобы звёздочка начала вычитать числа, то результат функции изменится. Значит, она не чистая. Другими словами у нас есть базис доверия. Частью базиса являются константы и другие чистые функции, в т.ч. из библиотек и ОС. Да, они могут меняться в ходе эволюции экосистемы, но это лучшее на что мы можем рассчитывать. Пример с внешней штукой имеет смысл если она переменная. Но не константа!
@SeniorSoftwareVlogger5 жыл бұрын
Нет, даже константы я бы в базис доверия не относил. Интерпретатор и операторы - да, но константу ты своими собственными руками в своей программе можешь поменять. В некоторых языках даже во время исполнения программы.
@PavelKoryagin5 жыл бұрын
@@SeniorSoftwareVlogger > даже константы я бы в базис доверия не относил Ну да, если на конкретном проекте мы договорились так, то это должно быть норм. Но в общем случае на таком договоре мы теряем. >В некоторых языках даже во время исполнения программы. Это уже не константа. В некоторых и тело функции изменять можно. Но если зашла речь про теорию, то это территория на которой люди договариваются принципиально не использовать те или иные возможности реализации, чтобы иметь возможность эту самую теорию заэксплуатировать. Константа - это элемент семантики, языка предметной области. Если мне нужен код, для классификации некоторого входного значения, как холодный/тёплый/горячий, то разве же у меня стоит выбор между использованием констант-литералов и отказом от чистых функций? Нет, я определю глобальные константы, как язык общения модулей, и буду их использовать. И функции с ними можно уверенно считать чистыми - все ништяки чистых функций остаются в наличии. Но начать нам, вероятно, стоило с преимуществ чистах функций. Ведь если мы не договорились, *зачем* мы выделяем понятие чистой функции, то и "очевидные" нюансы её определения будут разными для разных людей.
@IvanDymkov5 жыл бұрын
Соглашусь с Павлом. Использование базовых констант проекта в функциях никак не мешает тестированию и другим преимуществам чистых функций. Вот используешь ты в функции Math.PI: function calculateCircumference(radius) { return 2 * Math.PI * radius; } Ты, наверняка, этой константе доверяешь и можешь назвать эту функцию чистой. К своим константам можно относиться так же, когда это действительно константы по смыслу, а не курс рубля, закинутый джуном в const, например. И это не испортит ни одного плюса чистых функций, которые ты перечислил.
@SeniorSoftwareVlogger5 жыл бұрын
Не мешает, но функция уже не чистая. Никто вас за это не убьет конечно и не уволит :)
@PavelKoryagin5 жыл бұрын
Недостаточно чистая функция :)
@itbeard5 жыл бұрын
Лойс!
@vladimir0rus5 жыл бұрын
В Си нет ссылок, ссылки появились только в С++. В Си есть указатели. Указатель это переменная, которая хранит адрес в памяти. Ссылки это не указатели, ссылки это вообще не переменные, они ничего не хранят. При "передаче" по ссылке по факту ничего не передается в функцию - физически на уровне машинного кода никакой передачи аргумента не произойдет при вызове функции. Более того, иногда даже вызова функции может не произойти, если компилятор решит ее встроить (inline).
@toooldtobejunior5 жыл бұрын
А по сути топика можете что-то сказать?
@vladimir0rus5 жыл бұрын
@@toooldtobejunior Автор в ролике допустил фактическую ошибку, я его поправил.
@toooldtobejunior5 жыл бұрын
Мне просто было интересно: меняет ли отсутствие ссылок и наличие указателей в С суть дела?
@vladimir0rus5 жыл бұрын
@@toooldtobejunior Для описания сферических чистых функций в вакууме вообще не требовалось упомянать ни Си, ни указатели. Но автор зачем то упомянул и допустил грубую ошибку, которая режет слух. Непонимание отличия ссылки от указателя не имеет никакого отношения к чистым функциям, но является техническим ляпом, который лучше не допускать Senior разработчику. Я надеюсь, что теперь автор разберется в этом вопросе и перестанет путать указатели и ссылки.
@SeniorSoftwareVlogger5 жыл бұрын
Автор писал на Си в последний раз в универе (и слава богу). Ну да, перепутал. Опять же как inline решает проблему чистоты функции? Даже если нет вызова функции, то этот код все равно не чистый.
@Bork_In_Volcanic5 жыл бұрын
В нотации вверху справа битая ссылка на патреон
@nikgym4 жыл бұрын
Т.е. запись в файл не реализовать ввиде чистой функции?
@izvarzone2 жыл бұрын
запись файла и не должна быть чистой.
@44whale5 жыл бұрын
Про блокировку потока. Это тоже вроде не чистота
@buridansass9165 жыл бұрын
Спс
@BohdanVR6664 жыл бұрын
Тоесть чистая функция в программировании это линейная функция в алгебре?
@izvarzone2 жыл бұрын
в математике вообще все чистые функции
@disconnect72 жыл бұрын
Иными словами обычные функции, которые претендуют быть не говнокодом.
@alexxx44344 жыл бұрын
Функциональные пуритане ))
@Rih4rd_dota5 жыл бұрын
запись в файл - не чистая функция. а вывод на экран?
@vladkorobkov65405 жыл бұрын
уже много твоих видосов посмотрел, но так и не понял, ты веб программист или "software"?
@SeniorSoftwareVlogger5 жыл бұрын
То есть веб - это не софт? Я пол года как менеджер. Начинал с фулстека, потом на бекенд, потом на фронтенд. Все про веб, да.
@vladkorobkov65405 жыл бұрын
@@SeniorSoftwareVlogger Извиняюсь, просто я еще новичок в этом деле, выразился не так. За ответ огромное спасибо.
@igorboldysh5 жыл бұрын
Имхо грязные функции тоже нужны. например, я не хочу писать new Date() Б потом плюсовать пару дней/часов/минут каждый раз в коде. Я хочу функцию getTodaysDatePlusDays(daysCount). Я её пишу и использую когда мне надо. Какой аналог может быть в чистой функции?
@SeniorSoftwareVlogger5 жыл бұрын
Передаешь new Date() в качестве аргумента
@izvarzone2 жыл бұрын
Но поинтеры весят меньше, чем новая копия Date.
@whitew5 жыл бұрын
А если объекты, которые были переданы в функцию были довольно громоздкими, не повлияет ли обязательное полное копирование на производительность?
@SeniorSoftwareVlogger5 жыл бұрын
Повлияет
@MrThreeda5 жыл бұрын
Это один из примеров модных трендов, который имеет довольно ограниченную область применения....
@SeniorSoftwareVlogger5 жыл бұрын
Функциональное программирование имеет совершенно такую же область применения.
@izvarzone2 жыл бұрын
повлияет, для этого и существуют поинтеры и референсы (хотя int, bool и float можно без поинтеров)
@figaro24405 жыл бұрын
Да чистые функции очень сильно упрощают анализ программы, но это уж как то сильно надо извратиться чтобы все сделать чистыми, появляется такое ощущение, что мы пишем код ради кода, а не ради функционала, ну вот чем вам, например, помешает функция писателя в файл, только тем что вы придумали что она якобы не чистая?
@watchbotzz5 жыл бұрын
Чертовски круто
@agimgal5 жыл бұрын
если бы можно было без грязи, мы наверное давно бы все на функциональных ЯП писали.
@SeniorSoftwareVlogger5 жыл бұрын
Там просто матан знать надо
@aslanaslan43944 жыл бұрын
Вопрос (я новичок) кроме функциональных какие есть еще?
@andriimakarenko71525 жыл бұрын
Существует ли тогда способ записи в файл чистой функцией?
@SeniorSoftwareVlogger5 жыл бұрын
Да, для этого есть монада
@izvarzone2 жыл бұрын
а зачем?
@Argon-X5 жыл бұрын
PHP передаёт объекты по ссылке, как в js, и их никак не передать по значению, только клонировать можно
Касательно изменения обьекта в функции, ссылка на который передана в качестве аргумента. Если объект имеет сложную структуру и заполнение его стоит разделить на несколько функций, например какой нибудь мапинг, где актуально переопределение метода, который мапит одно свойство. Везде возвращать значение и присваивать его в основной функции/методе? Иногда это выглядит очень неаккуратно. Мало того, для чего то же существуют процедуры и методы которые не возвращают значение, наверное не только для того что бы выводить в консоль 'hello world'. Что ели фунцию корректно назвать, что бы было ясно, что она изменяет состояние обьекта или вы считаете недопустимым это в любом случае? Спасибо за контент, очень интересно)
@SeniorSoftwareVlogger5 жыл бұрын
Это просто два разных подхода. Чистые функции лучше, но не в каждом языке можно их использовать для всех задач.
@VasilenkoYaroslav5 жыл бұрын
@@SeniorSoftwareVlogger ясно, спасибо за ответ.
@MrEliasGreen5 жыл бұрын
Футболка четкая))))
@stepbystep85255 жыл бұрын
Я только прочитал ты никог
@MrThreeda5 жыл бұрын
Писать в файл - "грязная" функция. "Грязные" функции это плохо. Вывод: писать в файл это плохо. Хмм.....
@SeniorSoftwareVlogger5 жыл бұрын
Ты сделал неправильный вывод
@MasterSergius5 жыл бұрын
За такое можно и помочь каналу деньгами, но "тыжайтишник", вроде и так хватает ) Поэтому, напомните пожалуйста зачем вы ведете этот канал? Или это многоходовочка на будущее? В любом случае, Я смотрю ваш канал, подписан, хоть и сам являюсь разработчиком уже много лет :)
@SeniorSoftwareVlogger5 жыл бұрын
Спасибо, что посчитал мои деньги! А то я все думаю хватает или нет.
@MasterSergius5 жыл бұрын
@@SeniorSoftwareVlogger Всегда рад помочь хорошему человеку )
@sergeygusarov33095 жыл бұрын
где такую футбу купить?
@SeniorSoftwareVlogger5 жыл бұрын
teespring.com/stores/senior-software-vlogger но я ее еще не пробовал стирать
@sergeygusarov33095 жыл бұрын
@@SeniorSoftwareVlogger да, нашел, выбор цветов бы еще пополнить)
@SeniorSoftwareVlogger5 жыл бұрын
Для тебя все что угодно! Какой цвет добавить? :)
@OlehL5 жыл бұрын
lois
@IlyaTkachev-hs8cb5 жыл бұрын
Про научную работу так и не рассказал)
@SeniorSoftwareVlogger5 жыл бұрын
В этом видео и не собирался
@kriskaruzo13985 жыл бұрын
у меня у одного низа у мониторов вырываются?? гул
@SeniorSoftwareVlogger5 жыл бұрын
У тебя одного есть мониторы :D
@dystopia21425 жыл бұрын
Футболку у дочки спер?
@igorbond28234 жыл бұрын
Не совсем понятно зачем таким функция дали отдельное определение - разве что для того что бы запутать на собесе. А по факту выходит так - знаю я про чистые функции или не знаю - мой код или подход к тестированию не изменится. С таким успехом можно целый словарь определений дать: Голодная функция - это функция которая принимает 2 или больше аргументов. Сытая функция - меньше двух. Нулевая функция - без аргументов. Жадная функция - не возвращает ничего. Щедрая функция - возвращает результат и мега-щедрая - возвращает много результатов. Строковая функция - функция которая возвращает строку Числовая возвращает число, массивная - массив, объектная - объект, наглая меняет окружение без спроса, скромная ничего не меняет.
@SeniorSoftwareVlogger4 жыл бұрын
Чистые функции, как электромагнитное поле. Существуют вне зависимости наших знаний о них. Но конечно это все злые собесуны придумали, чтобы честных программистов запутывать :)
@igorbond28234 жыл бұрын
@@SeniorSoftwareVlogger про собес шутка конечно, а то мировым заговором попахивает ))
@izvarzone2 жыл бұрын
В Unreal Engine они точно нужны, в блюпринтах. Они немного быстее (хотя C++ всё равно быстрее будет) и занимают меньше места в графе, т.к. нет i/o pin-ов, которые надо коннектить, чистые функции работают без них (их могут призывать другие ноды) На собеседовании это был бы легкий вопрос.
@golubevvictor5 жыл бұрын
Это касается только функциональной парадигмы разработки. В ООП немного иначе. Например, объект: квадрат. Функция, выводящая его площадь считается чистой или плохой? И ещё, по поводу плохой/хорошей. Функция вывода значения на экран считается плохой? Ведь она же изменяет отображение пикселей на экране. Но всё равно, плюсую, так как таких уроков должно быть больше, а хэйтэры всегда найдутся=)
@SeniorSoftwareVlogger5 жыл бұрын
Я не говорил плохая/хорошая. Чистая и "с эффектами" :) ООП довольно плохо помогает со сложностью программ и научная работа как раз об этом.
@_dekinci5 жыл бұрын
Классы ООП можно представить в виде структуры и функций, принимающих эту структуру и еще какие-то аргументы. Поэтому функция, выводящая его на экран будет выглядеть так: print(Square square). Теперь посмотрим, что происходит внутри. Вывод на экран в большинстве языков - передача в поток. Как минимум, идет изменение состояния потока. Также стандартый поток вывода, обычно, глобальная / статическая переменная и результат функции зависит от нее. Так что "вывод на экран" - грязная функция. Про пиксели - невозможно создать компьютер, в привычном его представлении, без состояний (компьютер - автомат), поэтому и использовать только чистые функции невозможно. Однако предлагается вынести всю грязь в какую-нибудь высокоуровневую фию, а все, что она вызывает сделать чистым.
@SeniorSoftwareVlogger5 жыл бұрын
Никита - молодец! :)
@golubevvictor5 жыл бұрын
@@SeniorSoftwareVlogger Было сказано, что чистые функции - это хорошо, а грязные - плохо (4:52). И как сказал Никита, использовать только чистые функции невозможно. Того же мнения придерживаются все, потому это как-то и застряло в мозгу. И да, я тоже молодец=)
@SeniorSoftwareVlogger5 жыл бұрын
Можно обойтись, только это уже другие языки.
@Nikita-yt5ml5 жыл бұрын
0:57 "И не изменяет как либо окружающую среду в которой она вызывается". Моё мнение, что было бы проще сказать "Не изменяет состояние приложения". Больше конкретики, понятнее, привычные слова для многих.
@SeniorSoftwareVlogger5 жыл бұрын
Запись в файл не изменяет состояния приложения, но тем не менее такая функция не является чистой.