数値nに1足してから2を掛ける関数で説明しようと思います。
アロー関数は A = (args...) => {} という表現かと思っていたのですが、
ということですので、以下は分かりますよね?
JavaScript
1const addOneThenDouble = (n) => { return (n + 1) * 2; };
2addOneThenDouble(5);
3//=> 12
アロー関数は() => {return 式;}
の時は() => 式
と書くことが出来ます。
JavaScript
1const addOneThenDouble = (n) => (n + 1) * 2;
2addOneThenDouble(5);
3//=> 12
また、(n) => n + 42
のように、引数が唯一つのとき、n => n + 42
のように引数部まわりのカッコを省略できます。
JavaScript
1const addOneThenDouble = n => (n + 1) * 2;
2addOneThenDouble(5);
3//=> 12
ここで、数値nに1足してから2を掛ける関数を、数値nにX足してからYを掛ける関数に拡張してみようと思います。
JavaScript
1const addXMulY = (x, y, n) => (n + x) * y;
2addXMulY(1, 2, 5);
3//=> 12
足す数、掛ける数が固定でnが様々に変わる場合、いちいち引数に1,2を与えなければならないのが面倒ですね。
そこで以下のように「XとYを引数に取り、「nにX足してからYを掛ける関数」を返す関数」を作ることができます。(念のため、「アロー関数だから」できるわけではありません。functionでもできます。アロー関数で書くとこうなります、ということです)
JavaScript
1const addXMulY = (x, y) => n => (n + x) * y;
2const add1Mul2 = addXMulY(1, 2);
3add1Mul2(5);
4//=> 12
5// 途中関数を変数に保存せず以下のようにも書けます
6addXMulY(1, 2)(5);
7//=> 12
さらに進めて「Xを引数に取り、「Yを引数に取り、「nにX足してからYを掛ける関数」を返す関数」を返す関数」を作ることもできます。
JavaScript
1const addXMulY = x => y => n => (n + x) * y;
2const add1MulY = addXMulY(1);
3const add1Mul2 = add1MulY(2);
4add1Mul2(5);
5//=> 12
6// 途中関数を変数に保存せず以下のようにも書けます
7addXMulY(1)(2)(5);
8//=> 12
一番最後のものをfunctionで書き換えると以下になります。他のも書き換えてみてください。理解が進むと思います。
JavaScript
1const addXMulY = function(x) {
2 return function(y) {
3 return function(n) {
4 return (n + x) * y;
5 };
6 };
7};
8const add1MulY = addXMulY(1);
9const add1Mul2 = add1MulY(2);
10add1Mul2(5);
11//=> 12
12addXMulY(1)(2)(5);
13//=> 12
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/26 02:22