Java8と関数型プログラミングの両方の初心者として、関数構成について読むとき、これを行う2つのメソッドandThen
とcompose
がある理由が見つからないので、私は何かが足りないと思います。 。
f.andThen(g)
はg.compose(f)
とまったく同じであるため、なぜ両方が必要なのですか。
compose
は従来の操作です。その順序は数学者によって決定されました。ただし、元々は数学者によって決定された多くのことのように、順序はプログラマにとって非常に便利な規則ではありません。関数型プログラミングは数学と強いつながりがあるため、とにかく操作を含めます。
Haskellのような言語では、compose演算子しかないため、次のようにすべてを逆方向に読み書きする必要があります。
filter even . concat . filter ((> 2) . length)
2より大きい長さのフィルターが最初に発生し、次にconcat
、次に偶数のフィルターが発生します。これには慣れていますが、それでも面倒なので、他の言語ではandThen
などの合成演算子を作成して、実行する順序で合成関数を記述できます。誰でも簡単にそのような演算子をHaskellのプログラムに追加することもできます。それについて言えば、それはもはや慣用的なHaskellではありません。
ドメインからの翻訳が簡単になる方を自由に使用してください。
= v =また、2つの引数に対してBiFunction
が1つの場合と同じように機能するFunction
インターフェイスもあります。このインターフェイスには2つの引数では機能しないため、compose
はありませんが、andThen
はあります。したがって、Function#andThen
の利点の1つは、BiFunction
との一貫性です。