Sergey
Rly?
アレクサンダー・バキマトフ
о я помню этот срач на работе еще
アレクサンダー・バキマトフ
типа нет функций который гарантируют чистоту
アレクサンダー・バキマトフ
которые
アレクサンダー・バキマトフ
Рафис
Он вернул новый стор, это не есть влияние на программу?
На программу влияет уже стор, а редьюсер только возращает объект стору
Evgen
Он вернул новый стор, это не есть влияние на программу?
Ты читаешь что тебе пишут? Стейт это данные о состоянии - на практике является созданным новым объектом
artalar
Он вернул новый стор, это не есть влияние на программу?
Так же интересным определением является: функция может называться чистой, если ее вызов можно заменить на результат ее работы. Если вместо вызова редусера просто написать новый стейт - ничего не сломается, он просто положится в стор. Если вместо вызова диспатча написать просто экшен (который возвращает диспатч, если кто не знал), то все сломается, т.к. стейт не обновится и подписчики не будут вызваны
アレクサンダー・バキマトフ
y => y*2
не, то понятно что мы сами ручками пишем и сами контролируем чистоту функций, но язык не дает контроля за чистотой, как например какой нить хаскель. Не, ребят не подумайте, я считаю есть чистые функции в жс, а это уже просто ненужные рассуждения, но в прошлый раз когда я слышал про "в жс нет чистых функций" это было про вот это
Sergey
Тогда нужно говорить "в js можно писать не чистые функции"
Vladislav
о я помню этот срач на работе еще
Фронтендщики его проиграли
Evgen
Чистую функцию нельзя назвать чистой если она не соответствует определению чистой функции
Sergey
И?
アレクサンダー・バキマトフ
Фронтендщики его проиграли
дадада, опять же, это все уже такое, по сути есть чистая функция, принимает а и б и возвращает их сумму, а контроллирует язык это или нет это уже навороты)))
Evgen
У тебя, грубо говоря, разные входные параметры
アレクサンダー・バキマトフ
Жирная комплектация
хрена ты тут делаешь, иди бухай, ты в москву полетел шоб в чатах чтоли сидеть)
Vladislav
хрена ты тут делаешь, иди бухай, ты в москву полетел шоб в чатах чтоли сидеть)
Утром пить это хуйня, а посраться про фп дело святое
アレクサンダー・バキマトフ
Evgen
Нет
У тебя в один момент времени одни параметры, в другой момент другие. const twice = y => Number(y)*2
Evgen
В функцию передаётся ссылка на объект. Одна и та же
Тут согласен - вхоядщий параметр - ссылка на область в памяти, а какое там значение будет неизвестно
Sergey
https://youtu.be/y9qRkzwZF7o
Кому было интересно
Evgen
Кому было интересно
Белая тема? Удобно?
Sergey
Белая тема? Удобно?
Днём светлая, вечером темная
Evgen
Известно, будет обьект {valueOf: Math.random}
Допустим можно хитрить передавая объекты. Но можно и хитрить внутри функции проверяя аргументы на "валидность"
Evgen
Днём светлая, вечером темная
А какая тема лучше для зрителей? Или не важно?
Дима
сайд-эффект — это последствие вызова функции, которое можно обнаружить независимым наблюдением
Дима
сайд-эффект — это последствие вызова функции, которое можно обнаружить независимым наблюдением
что меняет формулировку срача: доказывать нужно не чистоту функции, а то, что мы в состоянии обнаружить последствия её вызова. нет последствий — нет сайд-эффектов
Bogdan
https://youtu.be/y9qRkzwZF7o
Запись будет? Начало не видел
Andrey
Запись будет? Начало не видел
Это не стрим. Это премьера
Andrey
а чем отличие?
А в том что не лайв)
Bogdan
А в том что не лайв)
а что у меня значек видоса как в стример в конце
Bogdan
а это видимо он так запускает видос просто
Andrey
Evgen
Известно, будет обьект {valueOf: Math.random}
Кроме этого примера есть еще примеры доказывающие отсутствие "чистых функций" в js?
Anonymous
Бравые воины хаскелля здесь?
Bogdan
все с пошаговой формой сижу, вот сделать логику компонент, который примит список табов - это нормальный вариант? что бы юзать форму можно было много раз с разными табами хотя тогда со стейтом еще что то делать нужно
Evgen
Есть. А вам того мало?)
Конечно мало - так как нея является доказательством. Вот ты когда передаешь аргумент - ты получаешь результат - если передаешь рандомный аргумент, как в твоем примере, то ты снова получаешь рандомный результат.
Nikolai
Вы путаете сайд эффекты и детерминорованность
Evgen
Вы путаете сайд эффекты и детерминорованность
В Вашем примере сайд-эффект происходит из-за механизма приведения типов. От него можно избавиться добавив валидацию входящих параметров к примеру
Bogdan
https://youtu.be/y9qRkzwZF7o
ну классный видос, реально полезно было увидеть как вынести логику ф-и из jsx и сделать выше, плюс разнос компонентов тоже круто
Andrey
Сова ютубер
Arthur
Эмм, и что ты этим доказал ? Что зависишь от рандома ?
Arthur
Чистая функция возвращает одни и те же результаты при одинаковых входящих параметрах
Arthur
У тебя они, очевидно, разные
Arthur
А функция чистая
Arthur
Arthur
Вот если написать const a = {valueOf: Math.random()}, то всё будет ок
Arthur
У тебя в вельюоф ссылка на функцию рандома
Arthur
Если это чисто математический рандом, то можно просчитать последовательность чисел
Arthur
Если привязан к таймстампу или тикам, то одни сайд-эффекты пойдут
Evgen
Если привязан к таймстампу или тикам, то одни сайд-эффекты пойдут
Вопрос не в этом, просто @Baxxterkhv говорит, что вообще не возможно создать "чистые функции" в js, но доказательства пока не привел. То что он показал - не является доказательством, так как довольно просто опровергается
Arthur
Просто он в аргументы передаёт обжект, значение которого зависит от сайд-эффектов
Arthur
Ну и каждый раз в разный момент времени значение получалось разным, не равным предыдущему. Но функция-то чистой была
Evgen
Ну и каждый раз в разный момент времени значение получалось разным, не равным предыдущему. Но функция-то чистой была
Хитреца можно обойти его же хитростью, подменив функцию Math.random, чтобы она на момент выполнения выдавала, например, число 42 всегда. )))