명시 적 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
두 번째 결과로 이어질 수 있으며 이는 불필요하게 추악합니다.
특정 상태를 확인하는 경우 빈번한 부분을 추가하여 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
코드 냄새가 자주 나타날 수 있으므로 일반적으로 코드에서 거의 사용 하지 않는 것으로 나타났습니다.