- การเรียกใช้เมธอดหรือฟังก์ชันที่ไม่ทำสิ่งใดมีค่า
ไม่จำเป็นต้องเลวร้าย เมธอดในคลาสพื้นฐานมักเรียกเมธอดว่างที่มีความหมายว่าเป็นจุดแทนที่สำหรับคลาสย่อย ตัวอย่าง: UIView ของ Cocoa Touch มี-didAddSubview:
วิธีที่บันทึกไว้ว่าไม่ทำอะไรเลยในเวอร์ชันเริ่มต้น -addSubview:
วิธีการของ UIView ต้องเรียกใช้-didAddSubview:
แม้ว่ามันจะไม่ทำอะไรเลยเพราะคลาสย่อยอาจใช้มันเพื่อทำบางสิ่งบางอย่าง แน่นอนว่าวิธีการที่ไม่ทำอะไรและมีเหตุผลสำหรับพวกเขา
หากฟังก์ชั่น / วิธีการที่ว่างเปล่าหรือไร้ประโยชน์เห็นได้ชัดว่ามีเหตุผลในอดีตมันควรจะถูกตัดทิ้ง ดูโค้ดรุ่นก่อนหน้าในที่เก็บซอร์สโค้ดของคุณหากคุณไม่แน่ใจ
- การตรวจสอบซ้ำซ้อนทำในไฟล์คลาสวัตถุหรือวิธีการแยกต่างหาก
ยากที่จะบอกว่าไม่เป็นไรหากไม่มีบริบท หากมีการตรวจสอบอย่างชัดเจนด้วยเหตุผลเดียวกันนั่นอาจหมายความว่าไม่มีการแยกความรับผิดชอบอย่างชัดเจนและมีการเรียกการปรับโครงสร้างบางอย่างโดยเฉพาะเมื่อการตรวจสอบทั้งคู่ส่งผลให้มีการดำเนินการเดียวกัน หากการกระทำที่เป็นผลมาจากการตรวจสอบทั้งสองอย่างนั้นไม่เหมือนกันการตรวจสอบทั้งสองครั้งอาจจะถูกดำเนินการด้วยเหตุผลที่แตกต่างกันแม้ว่าเงื่อนไขจะเหมือนกันและก็ถือว่าใช้ได้
- ถ้าข้อความที่ประเมินเป็นจริงเสมอ
มีความแตกต่างใหญ่ระหว่าง:
if (1) {
// ...
}
และ:
if (foo() == true) {
// ...
}
ที่เกิดขึ้นเสมอกลับfoo()
true
กรณีแรกเกิดขึ้นมากมายเมื่อคนกำลังดีบั๊ก มันเป็นเรื่องง่ายที่จะใช้if (0) {...
ชั่วคราวเอาก้อนของรหัสในขณะที่คุณกำลังพยายามที่จะแยกข้อผิดพลาดและเปลี่ยน0
ไป1
ที่จะเรียกคืนรหัสที่ if
ควรจะออกเมื่อคุณทำแน่นอน แต่มันเป็นเรื่องง่ายที่จะลืมขั้นตอนนั้นหรือที่จะพลาดหนึ่งหรือสองถ้าคุณได้ทำในหลายสถานที่ (เป็นความคิดที่ดีที่จะระบุเงื่อนไขดังกล่าวพร้อมกับความคิดเห็นที่คุณสามารถค้นหาในภายหลัง) อันตรายเพียงอย่างเดียวคือความสับสนที่อาจเกิดขึ้นในอนาคต หากคอมไพเลอร์สามารถกำหนดค่าของเงื่อนไข ณ เวลารวบรวมมันจะลบออกทั้งหมด
กรณีที่สองสามารถยอมรับได้ ถ้าเงื่อนไขที่แสดงโดยfoo()
ความต้องการที่จะได้รับการทดสอบจากหลายสถานที่ในรหัสแฟมันออกมาเป็นฟังก์ชั่นที่แยกต่างหากหรือวิธีการที่มักจะเป็นสิ่งที่ถูกต้องที่จะทำแม้ว่าfoo()
มักจะเกิดขึ้นจะต้องมีสิทธิที่แท้จริงในขณะนี้ หากเป็นไปได้ว่าfoo()
ในที่สุดอาจส่งคืนได้false
ให้แยกเงื่อนไขนั้นในวิธีการหรือฟังก์ชั่นเป็นวิธีหนึ่งในการระบุสถานที่ทั้งหมดที่รหัสอาศัยเงื่อนไขนั้น อย่างไรก็ตามการทำเช่นนั้นจะสร้างความเสี่ยงที่foo() == false
เงื่อนไขจะไม่ผ่านการทดสอบและอาจนำไปสู่ปัญหาในภายหลัง วิธีแก้ไขคือเพื่อให้แน่ใจว่าคุณเพิ่มการทดสอบหน่วยที่ทดสอบfalse
กรณีและปัญหาอย่างชัดเจน
- เธรดที่หมุนและไม่ทำอะไรเลย
ดูเหมือนว่าสิ่งประดิษฐ์ของประวัติศาสตร์และสิ่งที่สามารถระบุได้ในระหว่างการตรวจสอบรหัสหรือผ่านการทำโปรไฟล์เป็นระยะของซอฟต์แวร์ ฉันคิดว่ามันอาจถูกสร้างขึ้นโดยเจตนา แต่ฉันมีเวลายากที่จะจินตนาการว่ามีใครบางคนจะทำเช่นนั้นโดยเจตนา
if (false) {...}
บล็อกที่ดีสำหรับการแสดงความคิดเห็นรหัส! </