JavaScriptやPHPで、Function Factoryという言葉を見るのだが、これは共通するパターンのFunctionを生成するためのFunctionということで、例えば
$double = function($x){
return $x*2;
};
$triple = function($x){
return $x*3;
};
$quadruple = function($x){
return $x*4;
};
なんてのは、三つのfunctionを定義していても、よく見ると、2,3,4とかける数字が違うだけで、あとはまったく同じパターン。 このようなfunctionの記述を効率よく行うために
// This is function factory
$create_multiplier = function($y){
return function($x) use ($y) {
return $x * $y;
};
};
//use the function factory to create three functions.
$double = $create_multiplier(2);
$triple = $create_multiplier(3);
$quadruple = $create_multiplier(4);
というような書き方をするテクニック。肝心な部分の記述は一回で済むためコードの管理も簡単になる。
上のコードは返すコードのなかで、$xを認識させるため、 use ( $x )というクローズをいれているが、PHP7.4 からPHPでもアローファンクションが使えるようになり、これだとuse というkeyword無しで、外側で設定されている変数を認識するようになる。ので、
$create_multiplier = function($y){ return fn($x)=>$x*$y;};
//use function factory to create three functions.
$double = $create_multiplier(2);
$triple = $create_multiplier(3);
$quadruple = $create_multiplier(4);
と、ファクトリーの部分の記述がすっきりする。
さらにこの上位のファンクションもアローファンクションで書いてしまうと
$create_multiplier = fn($y)=>fn($x)=>$x*$y;
となり、 プロのコーディングでアローが二つも三つもかさなるような記述が時々でてくるのだが、そろそろ読解がしんどくなってくるので、後で読み返してわかる記述方法としては、よし悪しかなあ。