คำถามติดแท็ก state

4
เมื่อการเขียนโปรแกรมในลักษณะการทำงานคุณมีสถานะแอปพลิเคชันเดียวที่คุณสานผ่านตรรกะของแอปพลิเคชันหรือไม่
ฉันจะสร้างระบบที่มีสิ่งต่อไปนี้ทั้งหมดได้อย่างไร : การใช้ฟังก์ชั่นบริสุทธิ์กับวัตถุที่ไม่เปลี่ยนรูป ส่งผ่านไปยังข้อมูลฟังก์ชันที่ฟังก์ชันต้องการเท่านั้นไม่เกิน (เช่นไม่มีวัตถุสถานะแอปพลิเคชันขนาดใหญ่) หลีกเลี่ยงการขัดแย้งกับฟังก์ชันมากเกินไป หลีกเลี่ยงการสร้างวัตถุใหม่เพียงเพื่อจุดประสงค์ในการบรรจุและเอาพารามิเตอร์ออกจากฟังก์ชั่นเพื่อหลีกเลี่ยงการส่งพารามิเตอร์ไปยังฟังก์ชันมากเกินไป ถ้าฉันจะแพ็คหลายรายการไปยังฟังก์ชันเป็นวัตถุเดียวฉันต้องการให้วัตถุนั้นเป็นเจ้าของข้อมูลนั้นไม่ใช่สิ่งที่สร้างขึ้นชั่วคราว สำหรับฉันแล้วดูเหมือนว่ารัฐ monad ทำผิดกฎข้อที่ 2 ถึงแม้ว่ามันจะไม่ชัดเจนเพราะมันถูกสานต่อผ่าน monad ฉันรู้สึกว่าฉันจำเป็นต้องใช้เลนส์อย่างใด แต่มีน้อยมากที่เขียนเกี่ยวกับมันสำหรับภาษาที่ไม่สามารถใช้งานได้ พื้นหลัง ในการออกกำลังกายฉันกำลังแปลงแอปพลิเคชันที่มีอยู่ของฉันจากสไตล์เชิงวัตถุเป็นสไตล์การทำงาน สิ่งแรกที่ฉันพยายามทำคือการสร้างแกนในของแอปพลิเคชันให้ได้มากที่สุด สิ่งหนึ่งที่ฉันได้ยินคือวิธีการจัดการ "รัฐ" ในภาษาที่ใช้งานได้อย่างหมดจดและนี่คือสิ่งที่ฉันเชื่อว่าทำโดย Monads ของรัฐนั่นคือเหตุผลที่คุณเรียกฟังก์ชันบริสุทธิ์ว่า "ผ่านสถานะของ โลกตามที่มันเป็น "จากนั้นเมื่อฟังก์ชั่นกลับมาก็จะกลับสู่สถานะของโลกตามที่มีการเปลี่ยนแปลง เพื่อแสดงให้เห็นว่าวิธีการที่คุณสามารถทำ "สวัสดีโลก" ในลักษณะการทำงานล้วนเป็นเหมือนคุณผ่านโปรแกรมของคุณที่สถานะของหน้าจอและรับกลับสถานะของหน้าจอด้วยการพิมพ์ "สวัสดีโลก" ดังนั้นในทางเทคนิคคุณกำลังโทรไปยังฟังก์ชั่นที่บริสุทธิ์และไม่มีผลข้างเคียง จากนั้นฉันก็ผ่านแอปพลิเคชันของฉันและ: 1. ขั้นแรกให้สถานะแอปพลิเคชันทั้งหมดของฉันเป็นวัตถุระดับโลกเดียว (GameState) 2. ประการที่สองฉันทำให้ GameState ไม่เปลี่ยนรูป คุณไม่สามารถเปลี่ยนได้ หากคุณต้องการการเปลี่ยนแปลงคุณต้องสร้างสิ่งใหม่ ฉันทำสิ่งนี้โดยการเพิ่มตัวคัดลอกตัวเลือกที่จะเลือกหนึ่งหรือมากกว่าหนึ่งช่องที่มีการเปลี่ยนแปลง 3. สำหรับแต่ละแอปพลิเคชันฉันส่งผ่าน GameState เป็นพารามิเตอร์ ภายในฟังก์ชั่นหลังจากที่ทำสิ่งที่มันจะทำมันจะสร้าง GameState ใหม่และส่งคืน …

4
“ OOP ซ่อนรัฐ” หมายความว่าอย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ในหนึ่งในเสียงต่อต้านโอโอพีหลายเรื่องที่ cat-v.orgฉันพบข้อความโดยโจอาร์มสตรองยกการคัดค้านหลายรูปแบบกับ OOP ซึ่งหนึ่งในนั้นคือ: คัดค้าน 4 - วัตถุมีสถานะส่วนตัว รัฐเป็นรากฐานของความชั่วร้ายทั้งหมด ในฟังก์ชั่นเฉพาะที่มีผลข้างเคียงควรหลีกเลี่ยง ในขณะที่สถานะในการเขียนโปรแกรมภาษาไม่พึงประสงค์ในรัฐโลกแห่งความจริงมากมาย ฉันสนใจสถานะบัญชีธนาคารของฉันเป็นอย่างมากและเมื่อฉันฝากหรือถอนเงินจากธนาคารฉันคาดว่าสถานะบัญชีธนาคารของฉันจะได้รับการอัปเดตอย่างถูกต้อง เมื่อพิจารณาจากสถานะที่มีอยู่ในโลกแห่งความเป็นจริงสิ่งอำนวยความสะดวกที่ควรใช้ภาษาโปรแกรมสำหรับการจัดการกับรัฐ? OOPL พูดว่า "ซ่อนสถานะจากโปรแกรมเมอร์" สถานะถูกซ่อนและมองเห็นได้ผ่านฟังก์ชั่นการเข้าถึงเท่านั้น ภาษาโปรแกรมทั่วไป (C, Pascal) บอกว่าการมองเห็นของตัวแปรสถานะถูกควบคุมโดยกฎขอบเขตของภาษา ภาษาที่ประกาศอย่างบริสุทธิ์บอกว่าไม่มีรัฐ สถานะโกลบอลของระบบนั้นจะถูกนำไปใช้กับทุกฟังก์ชั่น กลไกเช่น monads (สำหรับ FPLs) และ DCGs (ภาษาลอจิก) ถูกใช้เพื่อซ่อนสถานะจากโปรแกรมเมอร์ดังนั้นพวกเขาจึงสามารถเขียนโปรแกรม“ ราวกับว่ารัฐไม่สำคัญ” แต่มีการเข้าถึงสถานะของระบบได้อย่างเต็มที่หากจำเป็น ตัวเลือก“ ซ่อนสถานะจากโปรแกรมเมอร์” ที่เลือกโดย OOPL เป็นตัวเลือกที่แย่ที่สุด แทนที่จะเปิดเผยสถานะและพยายามหาวิธีที่จะลดความน่ารำคาญของรัฐพวกเขาก็ซ่อนมันออกไป นี่หมายถึงอะไรกันแน่? ฉันมีประสบการณ์น้อยในขั้นตอนหรือขั้นตอนที่น้อยมากซึ่งส่วนใหญ่เป็น OOP ดังนั้นอาจอธิบายได้ว่าฉันไม่คุ้นเคยกับเรื่องนี้อย่างไร …

8
ตัวแปรแนะนำสถานะอย่างไร
ฉันกำลังอ่าน "มาตรฐานการเข้ารหัส C ++" และบรรทัดนี้อยู่ที่นั่น: ตัวแปรแนะนำสถานะและคุณควรจัดการกับสถานะน้อยที่สุดเท่าที่จะเป็นไปได้ด้วยอายุการใช้งานสั้นที่สุด ในที่สุดสิ่งใดที่กลายพันธุ์ไม่เหมาะสมกับรัฐ อะไรที่คุณควรจะมีการจัดการกับเป็นรัฐเล็ก ๆ น้อย ๆ ที่เป็นไปได้หมายถึง? ในภาษาที่ไม่บริสุทธิ์เช่น C ++ การจัดการของรัฐไม่ใช่สิ่งที่คุณกำลังทำจริง ๆ หรือ และวิธีอื่น ๆ ในการจัดการกับสภาพน้อยที่สุดเท่าที่จะทำได้นอกเหนือจากการ จำกัด อายุการใช้งานของตัวแปร?

1
รูปแบบ UI ในภาษาที่ใช้งานได้
ฉันต้องการเริ่มเล่นซอกับ ClojureScript แต่ฉันสับสนเกี่ยวกับบางจุด ปัญหาของฉันคือวิธีที่ดีในการจัดการกับการเปลี่ยนแปลงสถานะที่มาจากการโต้ตอบของผู้ใช้เมื่อคุณพยายามทำงานตามหน้าที่ ขอยกตัวอย่างสักสองสามข้อ ฉันมีแอปพลิเคชันในใจที่ทำงานในเบราว์เซอร์ แต่ฉันคิดว่าปัญหานี้เป็นเรื่องทั่วไปมากกว่า แน่นอนว่าบางสิ่งจะเปลี่ยนไป - DOM เป็นอย่างน้อย แต่ฉันต้องการค้นหาวิธีจัดระเบียบรหัสที่เหลือเพื่อทำงานกับโครงสร้างข้อมูลที่เปลี่ยนแปลงไม่ได้ 1) ว่าฉันต้องการแนบกิจกรรมบางอย่างกับวัตถุ DOM บางอย่าง นี่ไม่ใช่เรื่องยากที่จะทำในลักษณะที่ใช้งานได้เป็นส่วนใหญ่: เมื่อคุณสร้างโหนดคุณจะแนบแผนที่แฮชกับตัวจัดการเหตุการณ์ต่าง ๆ แต่ให้พิจารณากรณีที่คุณใช้การมอบหมายกิจกรรม จากนั้นเมื่อคุณสร้างโหนดใหม่คุณอาจแนบตัวจัดการเหตุการณ์กับโหนดพาเรนต์ที่อาจมีอยู่แล้ว ดังนั้นคุณจะต้องเปลี่ยนแฮชที่เกี่ยวข้องกับโหนดที่มีอยู่แล้ว 2) สมมติว่าฉันกำลังออกแบบโมดูลเติมข้อความอัตโนมัติสำหรับฟิลด์อินพุต ทุกครั้งที่ผู้ใช้กดปุ่มฉันสามารถโทรหาเซิร์ฟเวอร์เพื่อรับคำแนะนำ มันง่ายมาก แต่ตอนนี้สมมติว่าฉันต้องการปรับให้เหมาะสมเล็กน้อย ถ้าฉันรู้ว่าผลที่ตรงกันทั้งหมดfooมีจุดในการถามอีกครั้งเพื่อให้ได้ผลลัพธ์ที่ตรงกันทั้งหมดไม่มีfoobar; ฉันสามารถกรองอดีต ดังนั้นฉันต้องสร้างแคชบางประเภท แคชนี้จะได้รับการอัปเดตทุกครั้งที่ผู้ใช้แทรกคำใหม่ซึ่งไม่ใช่คำที่ป้อนไว้ก่อนหน้านี้ อีกครั้ง: ฉันจะสร้างแบบจำลองแคชได้อย่างไร วิธีที่สมเหตุสมผลที่สุดดูเหมือนจะเป็นคำการแมปแฮชกับผลลัพธ์ แต่ควรจะไม่แน่นอน คุณสามารถแนะนำรูปแบบบางอย่างที่จะทำให้ง่ายต่อการรวมการเปลี่ยนแปลงเนื่องจากการโต้ตอบกับผู้ใช้ในการออกแบบการทำงาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.