Ale
давай твой пример
от балды https://gist.github.com/mkusher/a92922bae391fec466d01769a5e03e51
Vlad
somePrivateTransform надо пробрасывать в subjectToTest1
Ale
он же private
Vlad
это то, что делает код не тестируемым
Ale
окей, пусть он будет публичным
Ale
Vlad
это конечно крутая функция
const subjectToTest1 = finder =>
transform =>
async (someSearchQuery) =>
transform(await finder(someSearchQuery))
Ale
да, это детали
Ale
вопрос не в этом
Vlad
я пытаюсь понять, что оно делает
Vlad
можешь в двух словах описать что там происходит?
Ale
делаем асинхронный поиск по заданному критерию и возвращаем преобразованный ответ
Ale
return finder(someSearchQuery).then(transform);
Serhii
Прнтго всера парни
Vlad
можно записать так?
const subjectToTest1 = async curry(
(finderFn, transformFn, someSearchQuery) => transformFn(await finderFn(someSearchQuery))
)
Ale
async не там, думаю
Ale
вроде оно же
Vlad
const subjectToTest1 = curry(
(finderFn, transformFn, someSearchQuery) => finderFn(someSearchQuery).then(transformFn)
)
Vlad
вот теперь можно тестить
Ale
да
Ale
будто что-то изменилось ))))
Vlad
const fn = curry(
(finderFn, transformFn, query) => finderFn(query).then(transformFn)
)
Vlad
теперь оно понятно
Vitaly
Ale
как скажешь)
Vlad
и тестируемо
Serhii
Как вы понимаете это фп
Ale
лол, а почему моя запись не тестируема?)
Serhii
Курри
Ale
кроме того, что в ней нет зависимости от curry?
Ale
ну ладно, пускай так, я на все согласен)
Ale
окей, я не против
Vlad
// index.js
const fn = (finderFn, transformFn, query) => finderFn(query).then(transformFn);
export default fn;
// test.js
import test from 'ava';
import fn from './index';
const double = x => x * 2;
const finder = x => Promise.resolve(x);
test('fn', async t => {
const actual = await fn(finder, double, 1);
const expected = 2;
const expected(actual, expected);
});
Dreamerinnoise
Был бы у тебя петух написан в фп стиле, то уже бы грёб бабло
Dreamerinnoise
Грёб бы больше!
Vlad
Vlad
суть твоей функции в том, что она сама по себе почти ничего не делает
Ale
Vlad
вот покрыл один пример работы такой функции
Vlad
и почти норм
Vlad
потом нужно отдельно покрыть тестами настоящие finderFn и transformFn
Vlad
эльм с тобой несогласится
Ale
Ale
и purescript
Vlad
Ale
и почти норм
ну, хз. Из теста слабо понятен интерфейс и контракт функции
Дима
cyclejs
Vlad
больше только property based testing поможет
Ale
Дима
Ну ты почитай про него. У него нормальный такой замысел
Vlad
Vlad
это функция общая настолько насколько она может быть
Дима
А вп по твоему это линейность и строгая синхронность?)
Serhii
Это синхронность
Дима
Промисы — это кривая монада Future
Ale
Дима
Например
Vlad
её можно заставить делать что угодно в зависимости от transfromFn и finderFn
Vlad
Vlad
Ale
Vlad
Vlad
или я тебя не понимаю
Дима
Он от этого хуже не становится
Дима
А в фп дальше идут такие универсальные абстракции, что программист, свободно ими владеющий натурально богоподобен
Дима
"Любая достаточно сложная система содержит в себе кривую реализацию LISP"
Дима
Говорит нам человек пишущий на нём 3D шутан про VR
Vlad
Дима
Фп — это обобщение и абстрактизация
Дима
У тебя невероятно странное представление о фп)
Vlad
ты же читал др булеана?
Viktor
Пальма фейс
Vlad
так многие говорят
Vitaly
FP isn't hard to learn because it's hard. It's hard to learn because of academic jargon. It's just mapping & wrappers around values.
Eric Elliott
Vitaly
Чот вспомнилось
Vitaly
Сам то понял что сказал?