私は私のチームのためにC#スタイルガイドを書いており、副作用のない関数スタイルのメソッドの利点を説明しようとしています。提案をバックアップするためにオンライン参照を含めたいのですが、Googleが私が考えているような関数型メソッドチェーンの種類をGoogleには思えません。
「メソッドチェーン」と思ったら、こんな感じ(Rubyで)
userInput.chomp.downcase.split(",").map(&:to_i)[3].to_s(16)
ここで、各メソッドは新しいオブジェクト(おそらく異なるクラスのオブジェクトでも)を返し、すべてに副作用がないため、関数型言語で関数を作成するようなものです。関数のようなメソッドを作成すると、この種のチェーンを非常に簡単に作成でき、私の経験では、コードが大幅に簡略化されます。
しかし、「C#メソッドチェーン」をググると、次のようなものを見つけ続けます
myObj.AddItem(mItem).AddItem(mItem2).AddItem(mItem3);
ここで、各メソッドはレシーバーを変更して返します。これは、関数型プログラミングとは正反対のことであり、どちらかと言えば、チームで推奨したくないことです。私が「C#関数型メソッドチェーン」をググったとしても、上位の結果はStringBuilder
に関するブログ投稿であり、これは各メソッド呼び出しの副作用に完全に依存しています。
これには、「メソッドチェーン」とは別の用語がありますか?または、さらに良いことに、このスタイルの利点を文書化する場所はありますか?
これによく使用される名前は Fluent Interface です。関数型の世界では、単純に 関数構成 です。
しかし、機能の世界以外では、適切な用途はほとんどありません。ええ、それは列挙可能なものに最適です。そして、それは日付/時刻に対して実行可能です。しかし、ほとんどの場合、非常に巧妙な、つまり「読み取り可能」なコードを作成するために悪用される悪質な構成です(ただし、社内の奇妙な流暢なライブラリに精通している一部の人のみが対象です)。
副作用のない関数スタイルのメソッド(特に純粋な関数)doは、テスト容易性、再利用可能性、堅牢性、同時実行性、パフォーマンス... 、この構文のふわふわではありません。