จากการเปิดรับ (จำกัด ของฉัน) กับภาษาโปรแกรมที่ใช้งานได้เช่น Clojure ดูเหมือนว่าการห่อหุ้มข้อมูลมีบทบาทสำคัญน้อยกว่า โดยทั่วไปแล้วประเภทเนทีฟประเภทต่าง ๆ เช่นแผนที่หรือชุดเป็นสกุลเงินที่ต้องการใช้แทนข้อมูล นอกจากนี้ข้อมูลนั้นโดยทั่วไปไม่เปลี่ยนรูป
ตัวอย่างเช่นนี่เป็นคำพูดที่โด่งดังจาก Rich Hickey of Clojure ที่มีชื่อเสียงในการสัมภาษณ์เกี่ยวกับเรื่องนี้ :
Fogus: ตามความคิดนั้น - บางคนประหลาดใจกับความจริงที่ว่า Clojure ไม่ได้มีส่วนร่วมในการซ่อนข้อมูลในประเภท ทำไมคุณถึงตัดสินใจทิ้งการซ่อนข้อมูลไว้?
Hickey: ชัดเจนว่า Clojure เน้นการเขียนโปรแกรมให้เป็นนามธรรม ถึงจุดหนึ่งบางคนจะต้องเข้าถึงข้อมูล และหากคุณมีความเห็นว่า "ส่วนตัว" คุณต้องมีแนวคิดเกี่ยวกับสิทธิ์และความน่าเชื่อถือที่สอดคล้องกัน และนั่นเป็นการเพิ่มความซับซ้อนและคุณค่าเพียงเล็กน้อยสร้างความแข็งแกร่งในระบบและมักบังคับให้สิ่งต่าง ๆ อาศัยอยู่ในสถานที่ที่ไม่ควรทำ นี่คือนอกเหนือไปจากการสูญเสียอื่น ๆ ที่เกิดขึ้นเมื่อข้อมูลง่าย ๆ ถูกใส่เข้าไปในชั้นเรียน ในกรณีที่ข้อมูลไม่เปลี่ยนรูปมีอันตรายเล็กน้อยที่สามารถให้การเข้าถึงนอกเหนือจากที่ใครบางคนอาจขึ้นอยู่กับสิ่งที่อาจเปลี่ยนแปลง เอาล่ะคนทำอย่างนั้นตลอดเวลาในชีวิตจริงและเมื่อสิ่งต่าง ๆ เปลี่ยนแปลงพวกเขาก็ปรับตัว และถ้าพวกเขามีเหตุผล พวกเขารู้เมื่อพวกเขาตัดสินใจตามสิ่งที่สามารถเปลี่ยนแปลงได้ว่าพวกเขาจะต้องปรับตัวในอนาคต ดังนั้นจึงเป็นการตัดสินใจในการจัดการความเสี่ยงฉันคิดว่าโปรแกรมเมอร์ควรมีอิสระที่จะทำ หากผู้คนไม่มีความรู้สึกอ่อนไหวต่อความปรารถนาที่จะเขียนโปรแกรมให้เป็นนามธรรมและระมัดระวังในการแต่งงานกับรายละเอียดการดำเนินการพวกเขาจะไม่เป็นโปรแกรมเมอร์ที่ดี
มาจากโลกของ OO ดูเหมือนว่ามันจะซับซ้อนหลักการบางอย่างที่ฉันได้เรียนรู้ในช่วงหลายปีที่ผ่านมา สิ่งเหล่านี้รวมถึงการซ่อนข้อมูลกฎหมายของ Demeter และหลักการเข้าถึงแบบเดียวกัน กระทู้ทั่วไปที่ถูกห่อหุ้มช่วยให้เราสามารถกำหนด API ให้ผู้อื่นรู้ว่าพวกเขาควรและไม่ควรสัมผัส ในสาระสำคัญการสร้างสัญญาที่อนุญาตให้ผู้ดูแลโค้ดบางส่วนสามารถทำการเปลี่ยนแปลงและรีแฟคเตอร์ได้อย่างอิสระโดยไม่ต้องกังวลว่ามันจะแนะนำบั๊กในรหัสของผู้บริโภคได้อย่างไร (หลักการเปิด / ปิด) นอกจากนี้ยังมีอินเทอร์เฟซที่สะอาดและ curated สำหรับโปรแกรมเมอร์อื่น ๆ เพื่อให้ทราบว่าเครื่องมือใดที่พวกเขาสามารถใช้เพื่อรับหรือสร้างตามข้อมูลนั้น
เมื่อข้อมูลได้รับอนุญาตให้เข้าถึงโดยตรงสัญญา API นั้นจะใช้งานไม่ได้และข้อดีของการห่อหุ้มทั้งหมดจะหายไป นอกจากนี้ข้อมูลที่ไม่เปลี่ยนรูปอย่างเคร่งครัดดูเหมือนว่าจะส่งผ่านโครงสร้างเฉพาะโดเมน (วัตถุ, โครงสร้าง, บันทึก) มีประโยชน์น้อยกว่ามากในแง่ของการเป็นตัวแทนของรัฐและชุดของการกระทำที่สามารถทำได้ในสถานะนั้น
ฟังก์ชั่นโค๊ทโค้ดจะจัดการปัญหาเหล่านี้ที่ดูเหมือนว่าจะเกิดขึ้นเมื่อขนาดของโค้ดเบสโตขึ้นอย่างมากซึ่งจำเป็นต้องมีการกำหนด APIs และนักพัฒนาจำนวนมากที่เกี่ยวข้องกับการทำงานกับส่วนต่าง ๆ ของระบบ? มีตัวอย่างของสถานการณ์นี้ที่แสดงให้เห็นถึงวิธีการจัดการกับฐานรหัสประเภทนี้หรือไม่?
Also, strictly immutable data seems to make passing around domain-specific structures (objects, structs, records) much less useful in the sense of representing a state and the set of actions that can be performed on that state.
ไม่ได้จริงๆ สิ่งเดียวที่เปลี่ยนแปลงคือการเปลี่ยนแปลงจะจบลงที่วัตถุใหม่ นี่เป็นชัยชนะครั้งใหญ่เมื่อพูดถึงเหตุผลเกี่ยวกับรหัส ผ่านวัตถุที่ไม่แน่นอนรอบ ๆ หมายถึงการติดตามว่าใครอาจกลายพันธุ์พวกเขาปัญหาที่ไต่ขึ้นกับขนาดของรหัส