web-dev-qa-db-ja.com

Java8:なぜ2つの合成メソッド:andThenとcompose?

Java8と関数型プログラミングの両方の初心者として、関数構成について読むとき、これを行う2つのメソッドandThencomposeがある理由が見つからないので、私は何かが足りないと思います。 。

f.andThen(g)g.compose(f)とまったく同じであるため、なぜ両方が必要なのですか。

4
Ioanna

composeは従来の操作です。その順序は数学者によって決定されました。ただし、元々は数学者によって決定された多くのことのように、順序はプログラマにとって非常に便利な規則ではありません。関数型プログラミングは数学と強いつながりがあるため、とにかく操作を含めます。

Haskellのような言語では、compose演算子しかないため、次のようにすべてを逆方向に読み書きする必要があります。

filter even . concat . filter ((> 2) . length)

2より大きい長さのフィルターが最初に発生し、次にconcat、次に偶数のフィルターが発生します。これには慣れていますが、それでも面倒なので、他の言語ではandThenなどの合成演算子を作成して、実行する順序で合成関数を記述できます。誰でも簡単にそのような演算子をHaskellのプログラムに追加することもできます。それについて言えば、それはもはや慣用的なHaskellではありません。

ドメインからの翻訳が簡単になる方を自由に使用してください。

7
Karl Bielefeldt

= v =また、2つの引数に対してBiFunctionが1つの場合と同じように機能するFunctionインターフェイスもあります。このインターフェイスには2つの引数では機能しないため、composeはありませんが、andThenはあります。したがって、Function#andThenの利点の1つは、BiFunctionとの一貫性です。

1
Jym Dyer