明示的なelse
ブロック
私はこれをすべてのif
声明を網羅する包括的な声明としては同意しelse
ませんが、習慣からブロックを追加することが良いことです。
if
声明は、私の心に、実際には二つの異なる機能をカバーしています。
私たちが何かをすることになっているなら、ここでそれをしてください。
このようなものは明らかに部品を必要としませんelse
。
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
場合によってelse
は、誤解を招く可能性があると主張することもあります。
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
ではないと同じ
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
機能的には同じですが。最初if
に空の文字を書くと、else
不必要にresultい2番目の結果になる可能性があります。
特定の状態を確認している場合は、そのelse
偶然性をカバーすることを思い出させるために空を追加することをお勧めします
// Count wins/losses.
if (doors[firstChoice] == Prize.Car) {
// We would have won without switching!
winWhenNotSwitched += 1;
} else {
// We win if we switched to the car!
if (doors[secondChoice] == Prize.Car) {
// We picked right!
winWhenSwitched += 1;
} else {
// Bad choice.
lost += 1;
}
}
これらのルールは、新しいコードを作成する場合にのみ適用されることに注意してください。IMHO空のelse
句はチェックイン前に削除する必要があります。
テスト用true
ではないため、false
繰り返しますが、これは一般的なレベルでは良いアドバイスですが、多くの場合、これによりコードが不必要に複雑になり、読みにくくなります。
のようなコードにもかかわらず
if(!customer.canBuyAlcohol()) {
// ...
}
読者に不快感を与えるが、それを作る
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
悪くないにしても、少なくとも同じくらい悪いです。
私は何年も前にBCPLでコーディングし、その言語でありIF
句とUNLESS
あなたがはるかに読み出し可能としてコーディングできるよう句:
unless(customer.canBuyAlcohol()) {
// ...
}
大幅に改善されていますが、まだ完全ではありません。
私の個人的なプロセス
一般に、新しいコードを作成するときは、その不測の事態をまだカバーしていないことを思い出させるためelse
に、if
ステートメントに空のブロックを追加することがよくあります。これにより、DFS
トラップを回避し、コードを確認するときに、やるべきことがあることに気付くことができます。ただし、通常はTODO
追跡するためにコメントを追加します。
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
else
コードの臭いをしばしば示すことがあるので、一般的にコードではほとんど使用しません。