else
Khối rõ ràng
Tôi không đồng ý với điều này như một tuyên bố về chăn bao gồm tất cả các if
tuyên bố nhưng có những lúc việc thêm một else
khối theo thói quen là một điều tốt.
Một if
tuyên bố, theo tôi, thực sự bao gồm hai chức năng riêng biệt.
Nếu chúng ta phải làm một cái gì đó, hãy làm nó ở đây.
Những thứ như thế này rõ ràng không cần một else
phần.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
và trong một số trường hợp khăng khăng thêm vào một sai else
lầm có thể.
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
là không giống như
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
mặc dù nó là chức năng như nhau. Viết cái đầu tiên if
với một khoảng trống else
có thể dẫn bạn đến kết quả thứ hai xấu xí không cần thiết.
Nếu chúng tôi đang kiểm tra một trạng thái cụ thể, thường là một ý tưởng tốt để thêm một khoảng trống else
chỉ để nhắc nhở bạn bao quát sự kiện đó
// 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;
}
}
Hãy nhớ rằng các quy tắc này chỉ áp dụng khi bạn đang viết mã mới . IMHO Các else
mệnh đề trống cần được loại bỏ trước khi đăng ký.
Kiểm tra true
, không chofalse
Một lần nữa, đây là lời khuyên tốt ở cấp độ chung nhưng trong nhiều trường hợp, điều này làm cho mã phức tạp không cần thiết và ít đọc hơn.
Mặc dù mã như
if(!customer.canBuyAlcohol()) {
// ...
}
gây xúc động cho người đọc, nhưng làm cho nó
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
ít nhất là xấu, nếu không nói là tồi tệ hơn.
Tôi đã mã hóa trong BCPL nhiều năm trước và trong ngôn ngữ đó có một IF
mệnh đề và một UNLESS
mệnh đề để bạn có thể viết mã dễ đọc hơn nhiều như:
unless(customer.canBuyAlcohol()) {
// ...
}
đó là tốt hơn đáng kể, nhưng vẫn không hoàn hảo.
Quá trình cá nhân của tôi
Nói chung, khi tôi viết mã mới, tôi sẽ thường thêm một else
khối trống vào một if
câu lệnh chỉ để nhắc nhở tôi rằng tôi chưa bao gồm sự kiện đó. Điều này giúp tôi tránh DFS
bẫy và đảm bảo rằng khi tôi xem lại mã tôi nhận thấy rằng có nhiều việc phải làm. Tuy nhiên, tôi thường thêm một TODO
bình luận để theo dõi.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Tôi thấy rằng nói chung tôi else
hiếm khi sử dụng mã của mình vì nó thường có thể chỉ ra mùi mã.