私はcompose()
のデフォルトメソッドと同等のラムダ式の使用を比較していました。私はラムダ式の代わりにcompose()
を使用して唯一の欠点を参照してください質問How to do function composition?を解決するために、2つのアプローチを比較し、しかしラムダ式の代わりにcompose()を使用する理由は何ですか?
hereを指摘して
たぶんその理由は、表現力や機能的なスタイルのプログラミングをコーディングすることに関するものです。
accepted answerに応じcompose()
と第一のアプローチ:
Function<Person, Address> personToAddress = Person::getAddress;
Function<Address, String> addressToCountry = Address::getCountry;
Function<Person, String> toCountry = addressToCountry.compose(personToAddress);
ラムダ式と第二のアプローチ:
Function<Person, String> toCountry = p -> p.getAddress().getCountry();
私は二番目のを好むのはなぜ?まず、それほど冗長ではありません。第2に、明示的な補助変数personToAddress
とaddressToCountry
は必要ありません。
ラムダを明示的に使用する代わりにcompose()
を使用する理由はありますか?
2つ目の関数は、2つの関数が渡されたときに適切です。すなわちそれらは既に存在する。 –
あなたの簡単な例では、人からアドレスを取得する方法と国から住所を取得する方法の両方を知っています。しかし、あなたがアドレスを取得する方法を知らない場合はどうなりますか?もし 'Person'が' List
'を持っていて、あなたが要求しているものが分からないとどうなりますか?次に、クライアントのcallsiteからマッパーを要求し、答えを作成することができます。 –ニット・ピックするだけで、ローカル変数は厳密には必要ではありません。キャストを使用して、メソッドリファレンスを 'Function'型にリンクすることができます –