Size: a a a

2020 June 25

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
а так как это крайне нетривиальное и не особо имеющее смысл действие то для нас вызовы createStore в простейшем случае побочных эффектов не имеют
источник

c⁣

createStore<🦉>... in ☄️ effector
потому с точки зрения пользователя, сайд эффектов нет. Так?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
иными словами у нас нет данных, которые нужно интерпретировать чтобы обнаружить сайд-эффект
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
то есть не смотря на очевидные аллюзии с парадоксом наблюдателя в квантовой механике, принцип действия тут гораздо проще: есть интерпретатор, есть его данные, если эти данные позволяют интерпретатору обнаружить факт вызова функции, то она обладает сайд-эффектом
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
интерпретатор может быть разумным, ощущающим тормоза приложения или наблюдающими списание денег с кредитки, но это не обязательно: обычная функция которая ломается от непредвиденных ситуаций тоже вполне себе интерпретатор

let shared = {foo: 0}
const inter = () => shared.foo
const fx = () => {
 shared = null
}
fx()
inter()
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
в этом и кроется смысл чистых функций, которые оперируют только своими аргументами и возвращают результат в return: они имеют blast radius близкий к нулю, что сильно облегчает понимание кода, так как мы знаем: какие бы проблемы у нас не появились, чистые функции не будут усугублять их последствия
источник

R

Ruslan 🌀 in ☄️ effector
createStore<🦉> ⁣
потому с точки зрения пользователя, сайд эффектов нет. Так?
ну вот тут, например, используется переменная key из внешнего скоупа в редюсере...
по определению получается функция не чистая (замыкание), но по факту за пределами цикла всё чисто
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
идея в том что факта использования чего либо не достаточно, нужен факт обнаружения этого использования
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
если у тебя нет никакой возможности обнаружить что функция ссылается на key то непосредственно ты никаких сайд-эффектов не наблюдаешь
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
если у тебя нет возможности обнаружить что сторы используют счётчик айдишников, то вызовы createStore для тебя чисты. а вот если у тебя от изменения айдишника падают тесты, то ты явно наткнулся на сайд-эффект
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
к примеру мне пришлось приложить усилия для того чтобы айдишники сторов не попадали в нужные мне снапшоты тестов: я вижу это последствие вызова функции
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
это можно воспринимать иначе: сайд-эффект может обработать кто-нибудь для тебя, чтобы твоя работа уже не была им обременена
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
интерпретатор может быть разумным, ощущающим тормоза приложения или наблюдающими списание денег с кредитки, но это не обязательно: обычная функция которая ломается от непредвиденных ситуаций тоже вполне себе интерпретатор

let shared = {foo: 0}
const inter = () => shared.foo
const fx = () => {
 shared = null
}
fx()
inter()
и если идея с неразумным наблюдателем (интерпретатором) в принципе довольно логична, то про разумных наблюдателей программисты часто забывают, по этой причине connect react-redux часто перестаёт быть чистым: он выполняет столько лишних действий что падение производительности становится очевидным для пользователей, после чего любые рассуждения о чистоте в стиле фп теряют смысл
источник

m

makoven in ☄️ effector
🚀🔬 🚀🔬🚀🔬
если у тебя нет никакой возможности обнаружить что функция ссылается на key то непосредственно ты никаких сайд-эффектов не наблюдаешь
Хаскелисты тебя распнут)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Ruslan 🌀
ну вот тут, например, используется переменная key из внешнего скоупа в редюсере...
по определению получается функция не чистая (замыкание), но по факту за пределами цикла всё чисто
на первый взгляд кажется что у тебя утрированный пример, но на самом деле нет: если newShape имеет геттер на поле key то тот кто его установил имеет возможность упасть или начать иначе проявлять себя, по этой причине системы построенные со сложными гетерами часто ненадёжны: если может упасть даже чтение поля то всё плохо
источник

m

makoven in ☄️ effector
Компилятор всё видит, даже если ты не наблюдаешь
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
makoven
Хаскелисты тебя распнут)
я знаю, я изучал фп очень глубоко
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
чары фп начали спадать когда первая же программа на idris скомпилированная в жс (это официальная фича) упала со stack overflow
источник

m

makoven in ☄️ effector
🚀🔬 🚀🔬🚀🔬
чары фп начали спадать когда первая же программа на idris скомпилированная в жс (это официальная фича) упала со stack overflow
😄😄
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
у меня в тот момент прям резко прояснилась разница между академической теорией изучающей мир идеальных вещей и кода который работает в неидеальной реальности
источник