Можно ли это сделать? Конечно. Должно ли это сделать? Это не так ясно.
Вот бессмысленная версия вышеупомянутого, использующая lift
:
const getAnotherOtherPropOfC = prop ('x')
const transformToArray = split (/,\s*/)
const mapToSomething = map (Number)
const filterSomething = filter (n => n % 2 == 1)
const square = (n) => n * n
const chainMyIdWithResultOfPreviousFunction = (id) => (arr) => `${id}: [${arr}]`
const myFun = lift (chainMyIdWithResultOfPreviousFunction) (
prop ('id'),
pipe(
getAnotherOtherPropOfC,
transformToArray,
mapToSomething,
filterSomething,
map (square)
)
)
console .log (
myFun ({id: 'foo', x: '1, 2, 3, 4, 5'}) // => 'foo: [1,9,25]'
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script> const {prop, split, map, filter, lift, pipe} = R </script>
lift
- более стандартная функция FP, чем converge
Рамды (которая вместе с useWith
предлагают способы создания бессмысленных решений, часто за счет читабельности.) lift
перекрывается с converge
при применении к функциям, но предназначен для унарных функций, где обрабатывается converge
полиадические.
Это не ужасно. Но единственное преимущество, которое он имеет перед оригиналом, - это то, что он не требует очков. И если бы вы попытались расширить это до промежуточных функций в этом конвейере, это было бы совершенно безобразно.
Я считаю, что бессмысленное использование может иногда приводить к более чистому, легкому для чтения и более легкому-поддерживать код. Но нет причин отказываться от него, когда этого не происходит.
Дело не в том, что бессмысленно более функционально, чем остроконечный код. Я думаю, что эта идея начинается с зависти Хаскеля от других языков. Haskell считается идеализированным языком FP, и он оказывается языком, в котором бессмысленное приближение естественно. Но это по крайней мере частично случайно.
Мой стандартный пример - const sum = reduce(add, 0)
чище и понятнее, чем const sum = (xs) => xs.reduce(add, 0)
. Это также очень ясно показывает параллели с const product = reduce(multiply, 1)
или const all = reduce(and, true)
. Но по мере того, как вы становитесь более сложными или когда вам необходимо повторно использовать промежуточные вычисления (как указал Берги), бессмысленный код часто становится пассивом.
У меня нет реального разговора о том,Версия является улучшением по сравнению с оригиналом. Если так, то это только второстепенный. Дальнейшая его переноска значительно ухудшит читабельность.