Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(ループ内の一部の条件のみ異なるメソッドのリファクタリング)
閲覧数:418
掲示板(ループ内の一部の条件のみ異なるメソッドのリファクタリング)
名前
匿名
題名 ループ内の一部の条件のみ異なるメソッドのリファクタリング
質問内容

質問を評価する
(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;
}
質問日時 2013-11-18 21:51:39
名前
匿名
回答内容

回答を評価する
(0ポイント)
例えば、共通のinterfaceを持つクラスA, BのインスタンスをメソッドCに渡して、ifではその戻り値を元に分岐する、とかね。
回答日時 2013-11-19 00:30:59
名前
匿名
回答内容

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

別解としては、継承を使ってメソッドAとBを別のクラスで
実装するってのもある(テンプレートと呼ばれるやつ)。
回答日時 2013-11-19 07:47:12
名前
匿名
回答内容

回答を評価する
(0ポイント)
処理目的などが分からないのでアレですが、
提示されたケースだと、単純に条件A、条件Bの論理値を
引数で貰うのでは駄目ですか
回答日時 2013-11-19 17:58:14
名前
匿名
回答内容

回答を評価する
(0ポイント)
条件がメソッドの戻り値なら、渡すわけにいかないだろう。
回答日時 2013-11-19 21:15:25
名前
匿名
回答内容

回答を評価する
(0ポイント)
条件がiの値によって変わるメソッドの戻り値なので、条件
A、条件Bの論理値を引数でもらうことはできないのです。
Template Methodパターンを使うということが一番現実的で
しょうか?
回答日時 2013-11-19 21:51:14
名前
匿名
回答内容

回答を評価する
(0ポイント)
メソッドAとBが同一の状況で使われることがないなら、State+Templateが良さそうだね。
回答日時 2013-11-19 21:55:21
回答内容を入力し、「確認」ボタンをクリックしてください。
ログインしていません。ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 ユーザIDをお持ちでない方は「ID登録」からユーザIDの登録を行ってください。
氏名 匿名
回答内容
 



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道