LoginSignup
9
4

More than 3 years have passed since last update.

ネストしすぎの()を何とかしたい

Last updated at Posted at 2019-07-18

@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)
);

どっとはらい。

9
4
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4