2009-06-29 4 views
15

私の質問はthis previous questionに関連していますが、提供されている解決策は私が以下に概説した問題に対処していません。 Googleの検索の後、私はこのようなif文で長い条件文の特定の問題に対処するコードスタイルのガイドラインを見つけられませんでした。'if'文の長い条件文をインデントする方法は?

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

OR:

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

私はこれらの2つのスタイルを持っている問題は、それが難しい私の目は真のブロック内のコードを見つけると条件からそれを分離することを可能にするである、またはそれはあります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(); 
} 

誰もがコーディングを持っていますがこの問題を私が提案した方法とは違った方法で解決するか、それとももっと良い方法で解決するのか、どちらが好ましいと私が言及した解決策に何らかの反対意見を見つけることができますか?

答えて

8

明白な解決策は、神が意図したように、中括弧を次の行に移動することです。

</flamebait>

+0

- ラインキャンプ。 – DaveE

+0

それは低品質としてフラグが立てられたので、私は実際にこの答えにつまずきました。しかし、私はちょうど削除を推薦することができません。 :) – helmbert

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

今、あなたは私が考えて簡単に真のブロックを参照してください。もちろん

、私が好む:

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

:-)

+0

何あなたの会社がブロック場合、中括弧はif文と同じ行に表示されるようにあなたは、純粋エミュレートしなければならないポリシーの状態を符号化する場合は?私の2つのソリューションのどれを好むと思いますか?私が認識していない問題はありますか? – Jayson

+0

私はブレースは1と同じラインであるとき、私の第二の例はかなり良い仕事だと思います。 –

2

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

これは、私はそれを書くだろうかです:

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

、条件がすべてを見るためにスクロールする私を強制するのに十分な長さではない場合を除き。そうでない場合、私はこれを行うだろう:

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

そして、この場合は、それが十分に短いと思われることから、私は後者にしてください。

21

どうやってこのようなことができますか?

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

条件を別の行に移動すると、読みやすくなります。

+0

これははるかに読みやすいIMOです。 –

+0

+1ちょうど私が答えようとしていたもの。私はこの1つだけを考えていた – Nifle

+0

...これは、あなたが&&たりして、ラインの長さを抑えることができ、特に以来、あまりにも良いオプションのように思える||各行の次のテストではisValid。 – Jayson

1

私は演算子を行の先頭に置く傾向があります。

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

は別です:

だから、ここ1つの提案だ

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

(それは次のようになり、& &については(1 & & & & B)、などの場合)

またはこの:

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

私はおそらく、このようにそれを行うだけです。 Horstmann Styleと呼ばれていますが、やや違ったやり方です。

if (bool)  // comment 
{ dothis;   
    andthis;  
} else if (bool) // comment 
{ dothis;  
    andthis;   
} else   // comment 
{ dothis;   
    andthis;  
} 
5

これは私が好む選択肢である:これは、オープン・ブレースオンの-自身に私をひっくり返した一つのことである

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