16

私の質問はこの前の質問に関連していますが、提供された解決策は、以下に概説した問題に対処していません。Google 検索の後、このような if ステートメントの長い条件文の特定の問題に対処するコード スタイルのガイドラインは見つかりませんでした。

if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

また:

if( isNull(value1) || isToLong(value1) || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}

これら 2 つのスタイルの問題点は、true ブロック内のコードを見つけて条件から分離するのが難しいこと、または長い条件文の後で正しい次の行を判断するのが難しすぎることです。特に if ステートメントが関数または他の if ステートメント内で既にいくつかのタブでインデントされている場合は特にそうです。

次のようなことを行うのが望ましいでしょうか。

if(     isNull(value1) ||
        isToLong(value1) ||
        hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

または、このスタイルは、次のいずれかの方法で新しい条件をそれぞれインデントする方がよいでしょうか。

if( isNull(value1) ||
        isToLong(value1) ||
            hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

if( isNull(value1) 
        || isToLong(value1) 
            || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}

私が提案したものとは異なる、またはより良い方法でこの問題に対処するコーディング スタイル ガイドライン (おそらく企業のコーディング スタイル ポリシー) を持っている人はいますか? どちらが望ましいですか。私が言及したソリューションの長所または短所を見つけることができますか?

4

8 に答える 8

27

このようなものはどうですか?

bool isValid = isNull(value1) || isToLong(value1) || hasBadFormat(valule1);
if( isValid )
{
   doSomething();
}
else
{
   doSomethingElse();
}

条件は別の行に移動され、読みやすくなる可能性があります。

于 2009-06-29T16:19:45.540 に答える
15
if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

今、あなたは本当のブロックを簡単に見ることができると思います。

もちろん、私は好きです:

if( isNull(value1)
    || isToLong(value1)
    || hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

:-)

于 2009-06-29T16:18:37.520 に答える
9

明らかな解決策は、神が意図したように、オープンブレースを次の行に移動することです!

</flamebait>

于 2009-06-29T16:18:19.207 に答える
5

これは私が好む代替手段です:

if(
    isValid = isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)
) {
    doSomething();
}
else {
    doSomethingElse();
}
于 2015-07-23T18:17:30.587 に答える
2

それはあなたが一緒に働く人々の好みと慣習に本当に依存します、しかし最初の2つは私が見た2つの最も一般的な形です。条件を複数行に移動するのは、長すぎてIDEで左右にスクロールする必要がある場合のみにする傾向があります。

これは私がそれを書く方法です:

if(isNull(value1) ||    
   isToLong(value1) ||
   hasBadFormat(valule1))
{    
    doSomething();
}
else
{    
    doSomethingElse();
}

その条件が、すべてを表示するためにスクロールするように強制するのに十分な長さでない限り。そうでない場合、私はこれを行います:

if(isNull(value1) || isToLong(value1) || hasBadFormat(valule1))
{    
    doSomething();
}
else
{    
    doSomethingElse();
}

そしてこの場合、それは十分に短いように思われるので、私は後者を行います。

于 2009-06-29T16:18:53.823 に答える
1

私はオペレーターを行の先頭に配置する傾向があるため、オペレーターはすべて上に表示されます。

そこで、1 つの提案を次に示します。

if(isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1))
{
   doSomething();
} /* if */
else
{
   doSomethingElse();
} /* else */

ここに別のものがあります:

if(0
   || isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1))
/* ...etc... */

(&& の場合は、if(1 && a && b) など)

またはこれ:

if
(
   isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1)
)
/* ...etc... */
于 2009-06-29T17:30:34.283 に答える