Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ループ内の一部の条件のみ異なるメソッドのリファクタリング

例えば、下記のようにループ内の一部の条件のみが異な
るメソッドの場合、どのようなリファクタリング方法が
あるでしょうか?ほとんど共通の処理なので、重複部分
を取り除きたいのですが...

public String methodA(String s) {
    for (int i = 0; i < s.length(); i++) {
        if (条件A) {
            処理X
        } else {
            処理Y
        }
    }
    return Z;
}

public String methodB(String s) {
    for (int i = 0; i < s.length(); i++) {
        if (条件B) {
            処理X
        } else {
            処理Y
        }
    }
    return Z;
}

6

回答

6507

閲覧

6件の回答

評価

0

例えば、共通のinterfaceを持つクラスA, BのインスタンスをメソッドCに渡して、ifではその戻り値を元に分岐する、とかね。

評価

0

次のJavaだと、上のようなのをλで渡せるようになるので、
モノによっては分かりやすく書けるね。
C#には随分前に導入されて、Javaでも、と言われてたが、
かなりずれ込んだらしい。

別解としては、継承を使ってメソッドAとBを別のクラスで
実装するってのもある(テンプレートと呼ばれるやつ)。

評価

0

処理目的などが分からないのでアレですが、
提示されたケースだと、単純に条件A、条件Bの論理値を
引数で貰うのでは駄目ですか

評価

0

条件がメソッドの戻り値なら、渡すわけにいかないだろう。

評価

0

条件がiの値によって変わるメソッドの戻り値なので、条件
A、条件Bの論理値を引数でもらうことはできないのです。
Template Methodパターンを使うということが一番現実的で
しょうか?

評価

0

メソッドAとBが同一の状況で使われることがないなら、State+Templateが良さそうだね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。