elseKhố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 iftuyên bố nhưng có những lúc việc thêm một elsekhối theo thói quen là một điều tốt.
Một iftuyê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 elsephầ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 elselầ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 ifvới một khoảng trống elsecó 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 elsechỉ để 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 elsemệ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 IFmệnh đề và một UNLESSmệ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 elsekhối trống vào một ifcâ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 DFSbẫ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 TODObì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 elsehiếm khi sử dụng mã của mình vì nó thường có thể chỉ ra mùi mã.