場合によっては何もしないif/else if構造があります。私のキャリアで見たコードから、「空」のケースは通常省略されます。しかし、私がコードを書いたとき、このケースを省くのは適切ではないと感じていますが、単に何もしない実際のケースとしてそれを示すことです。たとえば、数値が5未満で10を超えるときに何かが行われ、その間に何も行われない場合:
int a = 4
if(a < 5) {
do something
} else if(a >=5 && a <= 10) {
// do nothing
} else if(a > 10) {
do something else
}
これがより良いオプションだと私が思った理由は次のとおりです。
そのため、この規約がプログラミングコミュニティに受け入れられるのか、それとも避けられるのかと考えていました。
a
の値をチェックするだけではありません。それはおそらく何かを意味します。
したがって、私は見たいと思います:
Boolean sell = a < 5;
Boolean buy = a > 10;
Boolean error = a >= 5 & a <= 10;
// or even:
Boolean error = !sell & !buy;
/* ^ (that's single source principle: if 5 changes to 6 one day,
* you don't have to remember to change it in two places) */
その後:
if (sell) {
} else if (buy) {
} else if (error) {
}
はっきりしていませんか?
さらに、a
はboth未満である可能性があります5
以上10
??
そうではなく、これらのelse
sは明らかに冗長です。 (なしa
のいずれかのブロック内でif
の値を変更します。ただし、a
は1回です-私の例のように-心配する必要はありません)。
したがって:
Boolean sell = a < 5;
Boolean buy = a > 10;
Boolean error = !sell & !buy;
if (sell) {
}
if (buy) {
}
if (error) {
// handle error
}
これは、私の意見ではより明確で柔軟性があります。ある条件が相互に排他的でなくなった場合、それが発生する可能性があるため、リファクタリングを行う必要はまったくありません。
インターバルを与えることで何もしないのケースを明示的に定義することは避けます。 else
- branchを使用します
int a = 4
if(a < 5) {
do something
} else if(a > 10) {
do something else
} else {
//This should mean: (a >=5 && a <= 10)
// do nothing
// Maybe log something here
// or even add an assertion while development to ensure that the
// branch is only reached in expected cases:
assert (a >=5 && a <= 10) : "I expected 'a' to be 5<=a<=10, but a is:"+a;
}