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
ข้อเพื่อให้คุณสามารถรหัสอื่น ๆ อีกมากมาย readably เป็น:
unless(customer.canBuyAlcohol()) {
// ...
}
ซึ่งดีกว่าอย่างมีนัยสำคัญ แต่ก็ยังไม่สมบูรณ์แบบ
กระบวนการส่วนตัวของฉัน
โดยทั่วไปเมื่อฉันเขียนรหัสใหม่ฉันมักจะเพิ่มelse
บล็อกว่างลงในif
คำสั่งเพียงเพื่อเตือนฉันว่าฉันยังไม่ได้ครอบคลุมเหตุการณ์ที่ไม่คาดคิด สิ่งนี้ช่วยให้ฉันหลีกเลี่ยงDFS
กับดักและทำให้แน่ใจว่าเมื่อฉันตรวจสอบโค้ดฉันสังเกตว่ามีอะไรให้ทำอีกมาก อย่างไรก็ตามฉันมักจะเพิ่มTODO
ความคิดเห็นเพื่อติดตาม
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
ฉันพบว่าโดยทั่วไปฉันใช้งานelse
ไม่ค่อยได้ในโค้ดเพราะมักจะสามารถระบุกลิ่นรหัสได้