ความคิดของค่าคงที่มีการเชื่อมโยงอย่างมากกับ 'ผลข้างเคียง' ฉันเชื่อว่ามันได้รับการโปรโมตโดยแนวทาง 'Design by Contract (DbC) ของเบอร์แทรนด์เมเยอร์สำหรับการออกแบบซอฟต์แวร์
DbC เสริมสร้างชนิดข้อมูลนามธรรม (กระดูกสันหลังของชั้นเรียน) มี 3 สิ่งที่สำคัญความคิด, ปัจจัย, postconditions, ค่าคงที่ มันอธิบายได้ง่ายเมื่อพูดถึงขั้นตอนดังนั้นฉันจะพยายามอธิบายโดยอ้างอิงกับมัน:
เงื่อนไขหมายถึงการป้อนข้อมูลของเงื่อนไขสำหรับขั้นตอนต้องเคารพในการสั่งซื้อที่จะเรียกขั้นตอนที่ เงื่อนไขนี้จะต้องได้รับการเคารพและบังคับใช้โดยลูกค้าของขั้นตอนนั้น ๆ ผู้ออกแบบกระบวนงานอาจปกป้องจากไคลเอนต์ที่ไม่เคารพเงื่อนไขก่อนโดยอ้างเงื่อนไขว่าเป็นบรรทัดแรกในกระบวนงาน ตัวอย่างเช่นมีวิธีการเงื่อนไขอาจจะdouble divide(double dividend, double divisor)
divisor != 0
postconditionแสดงให้เห็นถึงสภาพที่อยู่บนข้อมูลออกหลังจากที่ผลตอบแทนขั้นตอน; เป็นหน้าที่ของผู้ออกแบบขั้นตอนทั้งหมดในการเคารพ postcondition หากเงื่อนไขนั้นได้รับการเคารพ ในรูปแบบการเขียนโปรแกรมการป้องกันก่อนที่จะกลับมา postcondition สามารถยืนยันได้
คงสามารถถือได้ว่าเป็นทั้งเงื่อนไขและ postcondition แต่ด้วยความเข้าใจที่แตกต่างกันสำหรับเงื่อนไขและ postcondition จากแนวคิดดังกล่าวข้างต้น ค่าคงที่โดยทั่วไปบอกว่าถ้าอินพุตมีเงื่อนไขเฉพาะพบก่อนโพรซีเดอร์ถูกเรียกใช้จากนั้นเงื่อนไขเฉพาะนั้นจะใช้ได้หลังจากโพรซีเดอร์ถูกเรียก ตัวอย่างเช่นค่าคงที่ที่ถูกต้องสำหรับโพรซีเดอร์boolean search(int term, int array[])
อาจบอกว่าสถานะarray
ก่อนการโทรนั้นจะเหมือนกันหลังจากการโทร
การบังคับใช้ค่าคงที่เกี่ยวกับขั้นตอน (และไม่เพียง แต่ขั้นตอน) เป็นสิ่งที่ดีเพราะมันจะช่วยลดผลข้างเคียง ; สิ่งนี้มีประโยชน์เนื่องจากผลข้างเคียงเป็นความชั่วร้ายที่ยิ่งใหญ่ในการเขียนโปรแกรม โพรซีเดอร์เฉพาะอาจเปลี่ยนแปลงสถานะของอินพุตอาร์กิวเมนต์หรือเปลี่ยนสถานะของตัวแปรโกลบอลบางตัวหรือขึ้นอยู่กับตัวแปรโกลบอลบางตัว สิ่งนี้อาจนำไปสู่สถานการณ์ที่น่ารังเกียจที่การโทรที่เหมือนกันสองครั้งในโพรซีเดอร์เดียวกัน (ที่มีอินพุตเดียวกัน) อาจให้เอาต์พุตที่ต่างกัน สิ่งนี้นำไปสู่การรู้ประวัติของการโทรและเป็นการยากที่จะดีบั๊กโดยเฉพาะอย่างยิ่งในบริบทแบบมัลติเธรด