ระวังการเสียสละความชัดเจนในขณะที่ไล่อ่านง่าย
แม้ว่าจะif (user.ExistsInDatabase(db))
อ่านได้ดีกว่าif (user.CheckExistsInDatabase(db))
แต่ให้พิจารณากรณีของคลาสที่มีรูปแบบตัวสร้าง (หรือคลาสใด ๆ ที่คุณสามารถตั้งค่าสถานะได้):
user.WithName("Mike").ExistsInDatabase(db).ExistsInDatabase(db2).Build();
ไม่ชัดเจนว่าExistsInDatabase
กำลังตรวจสอบว่ามีอยู่จริงหรือตั้งค่าความจริงว่ามีอยู่จริง คุณจะไม่เขียนif (user.Age())
หรือif (user.Name())
ไม่มีค่าเปรียบเทียบดังนั้นทำไมif (user.Exists())
ความคิดที่ดีจึงเป็นเพราะคุณสมบัติ / ฟังก์ชันนั้นเป็นประเภทบูลีนและคุณสามารถเปลี่ยนชื่อฟังก์ชัน / คุณสมบัติเพื่ออ่านเพิ่มเติมได้เหมือนภาษาอังกฤษตามธรรมชาติ การทำตามรูปแบบเดียวกับที่เราใช้กับประเภทอื่นที่ไม่ใช่บูลีนนั้นแย่มากหรือไม่?
สำหรับประเภทอื่น ๆif
คำสั่งจะเปรียบเทียบค่าที่ส่งคืนของฟังก์ชันกับค่าในโค้ดดังนั้นโค้ดจึงมีลักษณะดังนี้:
if (user.GetAge() >= 18) ...
ซึ่งอ่านว่า "ถ้าผู้ใช้ dot get อายุมากกว่าหรือเท่ากับ 18 ... " จริง - ไม่ใช่ "ภาษาอังกฤษโดยธรรมชาติ" แต่ฉันขอยืนยันว่าobject.verb
ไม่เคยคล้ายกับภาษาอังกฤษตามธรรมชาติและนี่เป็นเพียงแง่มุมพื้นฐานของการเขียนโปรแกรมสมัยใหม่ (สำหรับ ภาษาหลักหลายภาษา) โดยทั่วไปโปรแกรมเมอร์ไม่มีปัญหาในการทำความเข้าใจข้อความข้างต้นดังนั้นสิ่งต่อไปนี้จะแย่กว่านี้หรือไม่?
if (user.CheckExists() == true)
ซึ่งปกติจะสั้นลงเป็น
if (user.CheckExists())
ตามด้วยขั้นตอนร้ายแรง
if (user.Exists())
ในขณะที่มีการกล่าวกันว่า "โค้ดถูกอ่านบ่อยกว่าที่เขียน 10 เท่า" แต่ก็สำคัญมากเช่นกันที่จุดบกพร่องจะถูกมองเห็นได้ง่าย สมมติว่าคุณมีฟังก์ชันที่เรียกว่า Exists () ซึ่งทำให้ออบเจ็กต์มีอยู่และส่งคืนค่าจริง / เท็จตามความสำเร็จ คุณสามารถเห็นรหัสif (user.Exists())
และไม่ได้มองเห็นข้อผิดพลาด - ข้อผิดพลาดจะเห็นได้ชัดมากขึ้นถ้ารหัสอ่านif (user.SetExists())
ตัวอย่างเช่น
นอกจากนี้ user.Exists () อาจมีโค้ดที่ซับซ้อนหรือไม่มีประสิทธิภาพได้อย่างง่ายดายโดยปัดไปที่ฐานข้อมูลเพื่อตรวจสอบบางสิ่ง user.CheckExists () ทำให้ชัดเจนว่าฟังก์ชันทำอะไรบางอย่าง
ดูคำตอบทั้งหมดที่นี่: การตั้งชื่อ Conventions: จะตั้งชื่อเมธอดที่ส่งคืนบูลีนได้อย่างไร
หมายเหตุสุดท้าย - หลังจาก "บอกอย่าถาม" ฟังก์ชันจำนวนมากที่ส่งคืนจริง / เท็จจะหายไปและแทนที่จะถามสถานะของวัตถุคุณจะบอกให้ทำบางสิ่งบางอย่างซึ่งสามารถทำได้ในรูปแบบที่แตกต่างกัน วิธีตามสถานะของมัน
isBabbyFormed