Size: a a a

2020 July 27

АБ

Александр Бакиматов... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
что такое сайд эффект?
то что может обнаружить сторонний наблюдатель?)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Александр Бакиматов
то что может обнаружить сторонний наблюдатель?)
что такое «сторонний»?
источник

OR

Oleg Rizhkov in ☄️ effector
Александр Бакиматов
то что может обнаружить сторонний наблюдатель?)
действие, влияющее на окружение?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
что такое окружение?
источник

🚀🚀

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

OR

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

ф

фильтруй мысли... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
опять определение через отрицание
autonomous
источник

🚀🚀

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


https://t.me/effector_ru/146938
источник

🚀🚀

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

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
но она делает мутацию переменной
источник

OR

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


https://t.me/effector_ru/146938
мап чистый, потому что счётчик создаётся в самом мапе, и на внешний мир не влияет.
в примере выше первая функция чистая, вторая - нет. по определению (если не ошибаюсь).
вопрос - имеет ли смысл в таком коде разбираться - чистая она или нет?
источник

🚀🚀

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

🚀🚀

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

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
главное что характеризует переменную x в этом примере — у нас нет ни прямого ни косвенного доступа к ней
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
если при определённом x код в геттере сделает throw Error то мы узнаем об этом, потому что следом упадёт наш код
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
если мы можем узнать текущее значение x как в add5, то можем сделать throw Error сами. так об отсутствии чистоты у add5 узнает пользователь нашего кода


https://t.me/effector_ru/146955
источник

NF

Nikita Fedorov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
без разницы, просто прочитай до конца
не понял про видеть мутацию, функция с мутацией остается чистой, если мутация не влияет на контекст и на результат

Add1 чистая функция т.к. a: {x: 1} - контекст, не меняется; b => a.x + b.x - зависит от b который параметр:
const add = a => b => a.x + b.x

const add1 = add({x: 1})

Add2 не чистая функция, т.к. b => a.x + b.x не детерменирована в контексте 'a'
const add2 = add({
 get x() {return Math.random()}
})
Add3
чистая функция, т.к. детерменирована без сайд эффектов, т.к. контекст имутабелен
const add3 = (() => {
 const x = 0

 return add({
   get x() {return x}
 })
})()

Add4
чистая функция, однако x чистой функцией не является
const add4 = (() => {
 let x = 0

 return add({
   get x() {
     x += 1
     return 5
   }
 })
})()
Ну и ещё примеры:
(x) => x // чистая функция, даже если агрумент мутабелен

let i = 0
f = (x) => (y) => x + y + i // 'f = (x) => ' - чистая функция, `(y) =>` - не чистая, но не из-за замыкания на x, если x имутабелен
while(true) { i++ }

f - чистая функция т.к. создается в имутабельном контексте
class Z {
ctor(privete y): Z;
f = (x) => this.y;
}

f - чистая функция т.к. создается в имутабельном контексте
const i = 0;
f =(x) => x + i

f - чистая функция т.к. создается в контексте который не мутирует
let i = 0;
f =(x) => x + i

f - не чистая функция т.к. мутирует и читает контекст (обладает побочными эффектами)
let i = 0;
f =(x) => x + i++

f - не чистая функция т.к. читает мутируемый контекст и возвр. значение зависит от него
let i = 0;
f =(x) => x + i
// где-то далее делается i++
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
если мы можем узнать текущее значение x как в add5, то можем сделать throw Error сами. так об отсутствии чистоты у add5 узнает пользователь нашего кода


https://t.me/effector_ru/146955
const pureAddTrustMe = n => {
 if (add5.getState() === 5)
   throw Error('whatever')
 return add5.add5(n)
}
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Nikita Fedorov
не понял про видеть мутацию, функция с мутацией остается чистой, если мутация не влияет на контекст и на результат

Add1 чистая функция т.к. a: {x: 1} - контекст, не меняется; b => a.x + b.x - зависит от b который параметр:
const add = a => b => a.x + b.x

const add1 = add({x: 1})

Add2 не чистая функция, т.к. b => a.x + b.x не детерменирована в контексте 'a'
const add2 = add({
 get x() {return Math.random()}
})
Add3
чистая функция, т.к. детерменирована без сайд эффектов, т.к. контекст имутабелен
const add3 = (() => {
 const x = 0

 return add({
   get x() {return x}
 })
})()

Add4
чистая функция, однако x чистой функцией не является
const add4 = (() => {
 let x = 0

 return add({
   get x() {
     x += 1
     return 5
   }
 })
})()
Ну и ещё примеры:
(x) => x // чистая функция, даже если агрумент мутабелен

let i = 0
f = (x) => (y) => x + y + i // 'f = (x) => ' - чистая функция, `(y) =>` - не чистая, но не из-за замыкания на x, если x имутабелен
while(true) { i++ }

f - чистая функция т.к. создается в имутабельном контексте
class Z {
ctor(privete y): Z;
f = (x) => this.y;
}

f - чистая функция т.к. создается в имутабельном контексте
const i = 0;
f =(x) => x + i

f - чистая функция т.к. создается в контексте который не мутирует
let i = 0;
f =(x) => x + i

f - не чистая функция т.к. мутирует и читает контекст (обладает побочными эффектами)
let i = 0;
f =(x) => x + i++

f - не чистая функция т.к. читает мутируемый контекст и возвр. значение зависит от него
let i = 0;
f =(x) => x + i
// где-то далее делается i++
как add4 может быть чистой функцией если он использует нечистые, это возможно?
источник

NF

Nikita Fedorov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
как add4 может быть чистой функцией если он использует нечистые, это возможно?
да
источник