
121
5
章
関数を組み立てる関数
本章では、なぜプログラムの実行中にわざわざ関数を作る必要があるのか、どのよ
うに行うのかを説明することによって、第一級関数とその使い方をさらに深く追究し
ます。そして、レゴをパチッと組み合わせるように、関数の部品を集めて、より豊か
な機能をもった関数を「合成する」様々な方法を探ります。
5.1
関数合成の基礎
4
章で紹介した、関数を生成して返す
invoker
関数(
p107
)を思い出してください。
invoker
が返す関数は、オブジェクトを
1
つ目の引数に取り、
invoker
実行時にそのオ
ブジェクトをターゲットにしてメソッド呼び出しを行う関数でした。さて、オブジェ
クトがそのメソッドを持っていない場合、
invoker
関数は
undefined
を返します。こ
れを利用することによって、複数の呼び出しを合成してポリモーフィックな関数、言
い換えると、与えられた引数によって異なる動作を行う関数を生成できます。これ
を行うために、ひとつ以上の関数を引数に取り、それらの関数を
undefined
以外の値
が返されるまで順番に呼び出す方法が必要となります。この機能を提供する
dispatch
関数は命令形プログラミングのスタイルで次のように定義されます。
function dispatch(/*
任意の数の関数
*/) {
var funs = _.toArray(arguments);
var size = funs.length;
return function(target /*, ...