売りと買いで対称的な処理をどうやってひとつにまとめるか

たとえば Buy メソッドと Sell メソッドがあって、売り買いの別が違うだけで対称的な処理を書いてあることが良くある。で、これをひとつのメソッドにまとめるにはどうすればよいかで迷う。
単純に引数 bool buy みたいなものを持ったメソッド Trade(bool buy) にまとめてしまうとしても、結局メソッドの中で if 文で2つに分かれるだけになってしまうことになりかねない。これでも外部インターフェースはひとつにまとまっているから、それなりの成果はあるのだが、しかし内部もキレイにまとめたい。このやりかたが良く分からない。


たとえば買いが

if (x >= 0)

で売りが

if (x <= 0)

という処理をしていた場合、これをひとつにまとめると、

if ((buy && x >= 0) || (!buy && x <= 0))

みたいなことになりかねない。これはあまりにも汚い。
少なくとも三項演算子を使って、

if (buy ? (x >= 0) : (x <= 0))

と書くと良い。三項演算子の使用には世間では是非があるが、unibon は基本的に三項演算子を使うことで簡潔になるのなら積極的に使ったほうが良いと考える。楽をするために使うのではない。簡潔にするために使うのだ。特に処理に対称性があるのあるのならば、むしろ三項演算子を使うべきだと思う。(これには三項演算子の代わりとなるメソッドを作ることも含む。)