これに真っ向から対立しているのが、Out parameter。状態を変えるために渡す可変オブジェクトのことを指す。Webを検索してみると、アンチパターンとして紹介されている記事が見つかる。
- Javaプログラマが知るべき9のこと - @katzchang.contexts
- privateメソッドは不要、出力パラメータに御用心 - kagamihogeのblog
- 技術トピックス|やってはいけないJavaプログラミング(4/4) | ウルシステムズ株式会社 | UL Systems, Inc.
でも、"Collectiong parameter"として『実装パターン』や『パターン指向リファクタリング入門』で紹介されていたりする。また、『パターン指向リファクタリング入門』では、その延長線上に"Visitor Pattern"を適用したパターンも紹介されている。
- Collecting Parameter(コレクティングパラメータ) - Strategic Choice
- Collecting Parameterによる累積処理の書き換え - Strategic Choice
- Visitorによる累積処理の書き換え - Strategic Choice
確かにこちらの方が合理的なケースもありそう。でも、基本的にはあまり使わない方がよさそう。コマンドとクエリは分離するのが原則だ。使うなら、Javadocに明記するなりしないと混乱を呼びそう。C#のoutキーワードに相当するものがJavaにはないから、引数の状態を変えるかどうか宣言だけから読み取れない。
ところで、out (C#)に使用例として「メソッドが複数の値を返すようにする場合に便利」だなんて書かれている。同時に扱いたい複数の値があるなら、クラスとしてまとめた方が読みやすくないだろうか。原則として、入力を与えたら戻り値が返ってくる関数として考えたい。
0 件のコメント:
コメントを投稿