3

長くて複雑な条件のリストがあるとします。これは、ifステートメントを実行するためにtrueである必要があります。

if(this == that && foo != bar && foo != that && pins != needles && apples != oranges)
{
    DoSomethingInteresting();
}

通常、このようなことを強いられた場合は、次のように各ステートメントを独自の行に配置します。

if
(
         this == that 
    &&    foo != bar 
    &&    foo != that 
    &&   pins != needles 
    && apples != oranges
)
{
    DoSomethingInteresting();
}

しかし、私はまだこれが少し混乱していると感じています。ifステートメントの内容を次のような独自のプロパティにリファクタリングしたいと思います

if(canDoSomethingInteresting)
{
    DoSomethingInteresting();
}

しかし、それはすべての混乱を引き起こしcanDoSomethingInteresting()、実際には問題を解決しません。

私が言ったように、私のgotoソリューションは真ん中のソリューションです。これは、最後のソリューションのようにロジックを難読化せず、最初のソリューションよりも読みやすいためです。しかし、もっと良い方法があるはずです!

Sylonのコメントに対する回答の例

bool canDoSomethingInteresting
{
    get{
        //If these were real values, we could be more descriptive ;)
        bool thisIsThat = this == that;
        bool fooIsntBar = foo != bar;
        bool fooIsntThat = foo != that;
        return 
        (
               thisIsThat
            && fooIsntBar
            && fooIsntThat
        );
    }
}
if(canDoSomethingInteresting)
{
    DoSomethingInteresting();
}
4

3 に答える 3

6

私の意見では、混乱をプロパティまたはメソッドに移動することはそれほど悪い考えではありません。そうすれば自己完結型になり、if(..) チェックを行うメイン ロジックが読みやすくなります。特にチェックする条件のリストが膨大な場合は、そのチェックを複製しないことを再利用する必要がある場合は、プロパティにいる方がよいでしょう。

if(IsAllowed)
{
   DoSomethingInteresting();
}
于 2013-01-08T05:32:13.737 に答える
1

さまざまな条件のコードを別々の変数に含めることは、読みやすさと保守性を高めるための優れた方法です。あなたの変数が良い名前を付けられるとき、あなたは得る

if (goToNextPage) 
{
    if (notAdmin)
    {
        RedirectToNormalPage();
    }
    else
    {
        RedirectToAdminPage();
    }
}

このようなものと比較して

if ((x == 1) && ((y == 'r') || (y == 't'))) 
{
    if (!a)
    {
        RedirectToNormalPage();
    }
    else
    {
        RedirectToAdminPage();
    }
}

後日コードに戻ったときに、読みたいものを選択させていただきます。

于 2013-01-08T06:05:57.617 に答える
0

方法はよい。より良いメソッド名は、真の場合に何ができるかではなく、何をテストするかを示します。お気に入り

if (isFooValid()) { mergeFoo(); } 

コードフローに論理的に適合する場合、特にその時点で完了しているかどうかを気にしない場合は、if 全体をメソッドにラップすることもよくあります。

maybeMergeFoo();

重要なのは、精神的に一歩下がって、現在のコードと次に記述するコードに最も適したものを探すことです。多くの場合、コードを整理する正しい方法は明らかです。

于 2013-01-08T05:46:45.837 に答える