@Yametaro さんのエントリでこんなのを見た。
【あるある】こんなコードは嫌だ【JavaScript】
https://qiita.com/Yametaro/items/6a7ab15e5b1764bdd383
その中の「その4: 関数ネストし過ぎ」が何とかならないかと思って考えてみた。
const [val0, val1, val2] = ["a", "b", "c"];
let name="xxx";
const f0 = (val)=>val+val0;
const f1 = (val)=>val+val1;
const f2 = (val)=>val+val2;
これについて「f0で処理した結果をf1で処理した結果をf2で処理した結果をコンソール出力」というのを考えると普通こんな風になる。
// ordinary
console.log(f2(f1(f0(name))));
うん、見にくい。
そこで知恵を絞ってこんな風にしてみた。
// using custom object
const applier = (val)=>{
const o={
value : val,
apply : (unary)=>{ o.value=unary(o.value); return o; }
};
return o;
};
console.log(applier(name).apply(f0).apply(f1).apply(f2).value);
もうちょい短くしてみる。
// using custom object 2
const applier2 = (val, o={
value : val,
apply : (unary)=>{ o.value=unary(o.value); return o; }
})=> o;
console.log(applier2(name).apply(f0).apply(f1).apply(f2).value);
と、ここまで考えたところで「配列に突っ込んであれこれすりゃいいんじゃね?」と気づいた。
// using array
console.log(
[name].map(item=>f0(item))
.map(item=>f1(item))
.map(item=>f2(item))
.reduce(accumulator=>accumulator)
);
どっとはらい。