Size: a a a

(F|R|FR)P - русскоговорящее сообщество

2019 July 02

呼ば in (F|R|FR)P - русскоговорящее сообщество
может быть я тупой, но где тут сайд эффекты? tap передает данные в функцию, которая работает с выводом в консоль. Как реализованна эта функция не имеет же значения?
data.tap(console.log).map(transformFn)
источник

E

Evgeniy 🍀 in (F|R|FR)P - русскоговорящее сообщество
呼ば
что с ним делать тогда?🤔
R.always зачем-то же используют)
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
тоже верно
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
но я все равно не понял где тут сайд эффект
источник

E

Evgeniy 🍀 in (F|R|FR)P - русскоговорящее сообщество
呼ば
но я все равно не понял где тут сайд эффект
отвечу пастой:
Однажды я столкнулся с мистической проблемой — серия последовательных операций спонтанно начинала выполняться в случайном порядке, вызывая race condition и абсурдные сообщения об ошибках. Первая операция однозначно запускалась  раньше второй, но сервер почему-то периодически сообщал об обратном в своей излюбленной манере: молча закрывал соединение. Раз за разом я вчитывался в одни и те же строчки, всё больше впадая в отчаяние; в коде не было ни намёка на источник хаоса. В течении двух недель в отладчике я перебрал все возможные варианты решения и приступил к невозможным, пока наконец не решил проблему, стерев один console.log.

Так я познакомился с сайд-эффектами.

Сайд-эффекты в коде — это места, в которых чистый абстрактный код сталкивается с реальным миром; понятие, которому уделено особое внимание в функциональном программировании. Когда функция пишет в файл или запускает ядерные боеголовки — это сайд-эффект. В моём случае вывод в консоль тормозил выполнение функции на период от 20 до 200 мс, а часть кода была рассчитана на то, что результаты будут доступны в течении текущего тика эвент лупа, и в сочетании с многопоточным libuv (io ядром nodejs) превращалась в бомбу замедленного действия.

Большинство ООП языков абсолютно беззащитны перед сайд-эффектами. И действительно, функция будет иметь один и тот же тип вне зависимости от того, есть ли там console.log или нет. Программисты вынуждены раз за разом сочинять самые разнообразные абстракции для одного и того же явления — функции, влияющей на окружающий мир. В фп же сайд эффекты явно выделяются в типе функции, тем самым явно определяя код, требующий аккуратного обращения.
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
ну во первых у него там лютый говнокод ИМХО
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
если все рушится из-за того что console.log тормозит выполнение программы
источник

E

Evgeniy 🍀 in (F|R|FR)P - русскоговорящее сообщество
¯\_(ツ)_/¯ возможно)
источник

К

Котяй Негодяй in (F|R|FR)P - русскоговорящее сообщество
Можете пояснить про Validation? Вот эта реализация же не может считаться Apply?

https://github.com/folktale/data.validation#readme
источник

Вл

В ладу in (F|R|FR)P - русскоговорящее сообщество
呼ば
ну во первых у него там лютый говнокод ИМХО
у тебя кажется есть какое-то представление о сайд эффектах
источник

К

Котяй Негодяй in (F|R|FR)P - русскоговорящее сообщество
источник

К

Котяй Негодяй in (F|R|FR)P - русскоговорящее сообщество
a['fantasy-land/ap'](b)
b must be an Apply of a function
источник

Вл

В ладу in (F|R|FR)P - русскоговорящее сообщество
ну то есть IO тебе не кажется по умолчанию сайд эффектом
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
почему? это сайд эффект
источник

Вл

В ладу in (F|R|FR)P - русскоговорящее сообщество
ага ок
источник

Вл

В ладу in (F|R|FR)P - русскоговорящее сообщество
а в чем подвох
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
но как тогда с ними работать? я думал что достаточно сделать абстракцию которая будет работать с ним (хоть в промис обернуть)
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
console.log тут для примера. Можно заменить его на myLogWithoutEffects
источник

呼ば in (F|R|FR)P - русскоговорящее сообщество
который будет оборачивать вызов лога во что-то или вообще событие эммитить
источник

E

Evgeniy 🍀 in (F|R|FR)P - русскоговорящее сообщество
呼ば
console.log тут для примера. Можно заменить его на myLogWithoutEffects
а как оно логировать-то будет без эффектов?
источник