
238
8 章 フローベースプログラミング
8.2
パイプライン
チェーンはオブジェクトやメソッド呼び出し周りの「流暢な」
API
を構築するため
に有用なパターンですが、関数型
API
のためにはそこまで有用なわけではありませ
ん。
Underscore
は、その関数のほとんどが
1
つ目の引数にコレクションを取るとい
う特性を活かして
_.chain
でチェーンを実装しています。対照的に、本書で定義して
いる関数は
1
つ目の引数に関数を取ります。これは部分適用とカリー化を容易にす
るために選択したものです。
メソッドチェーンには、様々な欠点が存在します。例えば、オブジェクトの
set
と
get
のロジックが堅く連結されてしまうこと(コマンドとクエリの分離(
Folwer
2010
))や、ぎこちないネーミングの問題などがあります。しかし、メソッドチェー
ンにおける一番大きな問題は、ひとつの呼び出しから次の呼び出しに移る際に、共通
の参照を変更してしまうということです(図
8-4
)。一方、関数型
API
は参照ではな
く値そのものを操作し、微妙に(時には大胆に)データを変換して新しい結果値を返
します。
図 8-4 チェーンされたメソッド呼び出しは共通の参照を変異させる
本節では、関数のパイプラインについて説明し、その効果的な使用法を紹介しま
す。理想的には、関数に渡されたオリジナルのデータは実行後もオリジナルのまま残
るべきです。関数型のコードにおけるチェーンは、期待されるデータ値が入力される
と、非破壊的変換を行い、そして新しいデータを返す動作が図 ...