4

このようにリファクタリングできますか?これらは同等であるため、コードのより単純で単純なバージョンが推奨されますか?

リファクタリング前:

    if (!matcher.matches() && !matcher2.matches() && !matcher3.matches()
            && !matcher4.matches() && !matcher5.matches()
            && !matcher6.matches() && !matcher7.matches()
            && !matcher8.matches()) {
        return true;
    } else
        return false;

リファクタリング後:

    return (matcher.matches() || matcher2.matches() || matcher3.matches()
            || matcher4.matches() || matcher5.matches()
            || matcher6.matches() || matcher7.matches()
            || matcher8.matches()) 
4

3 に答える 3

6

実は違う。1つ目はtrue、すべてのマッチャーが一致しない場合のみです。2番目のステートメントですべてのマッチャーが一致しない場合は、false

return !(matcher.matches() || matcher2.matches() || matcher3.matches()
            || matcher4.matches() || matcher5.matches()
            || matcher6.matches() || matcher7.matches()
            || matcher8.matches()) 

正解です

于 2012-09-14T06:35:44.277 に答える
2

いいえ、同等ではありません。2番目のオプションの前に追加する必要があり!ます。

固定された2番目のオプションは確かにより明確です:

return !(matcher.matches() || matcher2.matches() || matcher3.matches()
            || matcher4.matches() || matcher5.matches()
            || matcher6.matches() || matcher7.matches()
            || matcher8.matches()) 

また、次のようにリファクタリングします。

boolean atLeastOneMatch = matcher.matches() || matcher2.matches() || matcher3.matches()
                || matcher4.matches() || matcher5.matches()
                || matcher6.matches() || matcher7.matches()
                || matcher8.matches();

return !atLeastOneMatch;
于 2012-09-14T06:33:59.727 に答える
0

いいえ、これらは同等ではありません。わかりやすくするために少し控えめにしてください。2つの例だけを使用して、「matcherX.matches()」の代わりにxとyにします。その場合、あなたは尋ねています:

これら2つは同等ですか?

if (!x && !y) {
        return true;
    } else
        return false;

return (x || y);

簡単に始めましょう。まず、最初のステートメントは明らかに直接次のように変換できます

return (!x && !y);

そのための真理値表は次のとおりです。

|    x    |    y    |  !x && !y  |
+---------+---------+------------+
|    T    |    T    |     F      |
|    T    |    F    |     F      |
|    F    |    T    |     F      |
|    F    |    F    |     T      |

つまり、最初の式trueは、どの部分式も真でない場合にのみ返されます。それはと同じです

return !(x || y);
于 2012-09-14T12:41:33.030 に答える