"จำนวนอาร์กิวเมนต์ที่เหมาะสมที่สุดสำหรับฟังก์ชั่นคือศูนย์" นั้นผิดปกติ จำนวนอาร์กิวเมนต์ที่เหมาะสมที่สุดคือจำนวนที่ต้องการเพื่อให้ฟังก์ชันของคุณปราศจากผลข้างเคียง น้อยกว่านั้นและคุณไม่จำเป็นต้องทำให้หน้าที่ของคุณไม่บริสุทธิ์ดังนั้นบังคับให้คุณหลีกทางให้พ้นจากหลุมแห่งความสำเร็จและไต่ระดับความเจ็บปวด บางครั้ง "ลุงบ๊อบ" ก็พร้อมให้คำแนะนำ บางครั้งเขาผิดอย่างงดงาม คำแนะนำข้อโต้แย้งของเขาเป็นศูนย์เป็นตัวอย่างของสิ่งหลัง
( ที่มา: ความเห็นโดย @David Arno ภายใต้คำถามอื่นบนเว็บไซต์นี้ )
ความคิดเห็นที่ได้รับเพิ่มขึ้นอย่างน่าทึ่งจาก 133 upvotes ซึ่งเป็นเหตุผลที่ฉันต้องการที่จะให้ความสนใจอย่างใกล้ชิดกับบุญของมัน
เท่าที่ฉันทราบมีสองวิธีในการเขียนโปรแกรม: การเขียนโปรแกรมการทำงานที่บริสุทธิ์ (สิ่งที่ความคิดเห็นนี้เป็นกำลังใจ) และบอกอย่าถาม (ซึ่งเป็นครั้งคราวแนะนำบนเว็บไซต์นี้เช่นกัน) AFAIK หลักการสองข้อนี้ไม่สามารถใช้ร่วมกันได้ใกล้เคียงกับสิ่งที่ตรงกันข้าม: การทำงานที่บริสุทธิ์สามารถสรุปได้ว่า "เพียงแค่คืนค่าไม่มีผลข้างเคียง" ในขณะที่บอกอย่าถามสามารถสรุปได้ว่า "ไม่คืนสิ่งใดเลย" มีผลข้างเคียงเท่านั้น " นอกจากนี้ฉันยังงุนงงเพราะฉันคิดว่าการบอกอย่าถามถือเป็นแกนหลักของกระบวนทัศน์ OO ในขณะที่ funcitons บริสุทธิ์ถือเป็นแกนหลักของกระบวนทัศน์การทำงาน - ตอนนี้ฉันเห็นฟังก์ชั่นบริสุทธิ์ที่แนะนำใน OO!
ฉันคิดว่านักพัฒนาน่าจะเลือกหนึ่งในกระบวนทัศน์เหล่านี้และยึดติดกับมัน? ฉันต้องยอมรับว่าฉันไม่สามารถพาตัวเองไปติดตามได้ บ่อยครั้งที่มันสะดวกสำหรับฉันที่จะคืนค่าและฉันไม่สามารถมองเห็นได้ว่าฉันจะบรรลุสิ่งที่ฉันต้องการเพื่อให้บรรลุเฉพาะกับผลข้างเคียง บ่อยครั้งที่มันสะดวกสำหรับฉันที่จะมีผลข้างเคียงและฉันไม่เห็นจริง ๆ ว่าฉันจะบรรลุสิ่งที่ฉันต้องการได้รับเพียงแค่คืนค่า นอกจากนี้บ่อยครั้ง (ฉันเดาว่ามันน่ากลัว) ฉันมีวิธีการที่ทำทั้งสองอย่าง
อย่างไรก็ตามจากการโหวตขึ้น 133 ครั้งฉันให้เหตุผลว่าการเขียนโปรแกรมที่ใช้งานได้จริงในปัจจุบันคือ "การชนะ" เพราะมันกลายเป็นฉันทามติที่ดีกว่าที่จะบอกอย่าถาม ถูกต้องหรือไม่
ดังนั้นในตัวอย่างของเกมขี่ม้า antipattern นี้ฉันพยายามทำ : ถ้าฉันต้องการที่จะนำมันไปใช้กับกระบวนทัศน์การทำงานที่บริสุทธิ์ - อย่างไร!
ดูเหมือนว่าฉันมีเหตุผลที่จะมีสถานะการต่อสู้ เนื่องจากเกมนี้เป็นเกมเทิร์นเบสฉันจึงรักษาสถานะการต่อสู้ไว้ในพจนานุกรม (ผู้เล่นหลายคน - อาจมีการต่อสู้จำนวนมากที่ผู้เล่นหลายคนเล่นพร้อมกัน) เมื่อใดก็ตามที่ผู้เล่นหันมาฉันเรียกวิธีการที่เหมาะสมในสถานะการต่อสู้ซึ่ง (a) แก้ไขสถานะตามนั้นและ (b) คืนการอัปเดตให้กับผู้เล่นซึ่งได้รับการต่อเนื่องเป็น JSON และบอกพวกเขาว่าเกิดอะไรขึ้น คณะกรรมการ. ฉันคิดว่านี่เป็นการละเมิดหลักการทั้งสองอย่างชัดแจ้งและในเวลาเดียวกัน
ตกลง - ฉันสามารถสร้างวิธีการคืนค่าสถานะการต่อสู้แทนการปรับเปลี่ยนได้ถ้าฉันต้องการ แต่! จากนั้นฉันจะต้องคัดลอกทุกสิ่งในสถานะการต่อสู้โดยไม่จำเป็นเพียงเพื่อคืนสถานะใหม่ทั้งหมดแทนที่จะแก้ไขให้ถูกต้องหรือไม่?
ทีนี้ถ้าการย้ายเป็นการโจมตีฉันจะคืนค่าตัวละครที่อัปเดต HP ได้หรือไม่ ปัญหาคือมันไม่ง่ายอย่างนั้น: กฎของเกม, ความสามารถและบ่อยครั้งที่จะมีเอฟเฟกต์มากมายกว่าเพียงแค่เอาส่วนหนึ่งของ HP ของผู้เล่นออก ตัวอย่างเช่นมันอาจเพิ่มระยะห่างระหว่างตัวละครใช้เทคนิคพิเศษ ฯลฯ
ดูเหมือนว่าฉันจะปรับเปลี่ยนสถานะได้ง่ายกว่าและง่ายกว่ามาก ...
แต่วิศวกรที่มีประสบการณ์จะรับมือกับสิ่งนี้ได้อย่างไร