วิธีจัดระเบียบโปรแกรมการทำงาน [ปิด]


41

ซ้ำได้:
การเขียนโปรแกรมฟังก์ชั่นกับ OOP
วิธีการเขียนรหัสที่จัดการได้ด้วยการเขียนโปรแกรมการทำงาน?

ใน OOP หน่วยพื้นฐานขององค์กรสำหรับโค้ดคือคลาส วิธีการที่ใช้บ่อยใน Java, C # และภาษาที่คล้ายกันคือการจัดระเบียบรหัสของคุณมีไฟล์หนึ่งไฟล์สำหรับแต่ละคลาสด้วยชื่อไฟล์ตามชื่อคลาส

คุณสามารถพิจารณาแต่ละคลาสเหล่านี้เป็นหน่วยขององค์กรเพื่อจัดกลุ่มแนวคิดเดียว

คลาสเหล่านี้อยู่ในเนมสเปซซึ่งมักจะเป็นไปตามโครงสร้างไดเรกทอรีของไฟล์ในโซลูชัน / โครงการ Namespaces เป็นอีกระดับหนึ่งขององค์กร

โครงการขนาดใหญ่ในภาษาที่ใช้งานมักจะจัดระเบียบอย่างไร

คุณจะกำหนดวิธีแบ่งฟังก์ชั่นของคุณเป็นไฟล์ต่าง ๆ ได้อย่างไร?

มีการจัดกลุ่มหน่วยอื่น ๆ ข้างไฟล์ที่ใช้หรือไม่

ปกติรหัสจะถูกจัดระเบียบอย่างไรภายในไฟล์เดียว?


18
@ S.Lott What's stopping you from...ปีและปีของการเขียนโปรแกรมด้วยความคิดที่แตกต่างอย่างสิ้นเชิงจนถึงจุดที่รหัส Haskell ไม่ได้คำนวณทางจิตใจ และแน่นอนคุณกำลังสมมติว่าโครงการจริงมักจะถูกต้องและจัดอย่างเป็นระเบียบ (บางทีพวกเขาเป็น แต่ noob อย่างที่ฉันรู้)
yannis

13
@ S.Lott: ฉันได้ตั้งโปรแกรมใน OOP เสมอ ฉันเริ่มเล่นน้ำในภาษาที่ใช้งานได้เมื่อไม่นานมานี้ด้วยความอยากรู้อยากเห็น คุณพูดว่า: "ทำไมถามที่นี่?" ตอบ: เพื่อรับการให้คำปรึกษาและความเข้าใจจากผู้ที่มีประสบการณ์ (หรือผู้เชี่ยวชาญจากเว็บไซต์) ผู้ที่สามารถสอนฉันในเรื่องนี้ได้ นั่นคือจุดประสงค์ของเว็บไซต์นี้หรือไม่? โปรแกรมเมอร์หรือคำถามทั้งหมดไม่สามารถตอบด้วย: "ทำไมคุณไม่ค้นหาด้วยตัวเอง"? คำตอบคือใช่คุณทำได้ แต่เหตุผลในการถามคำถามคือเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น / เร็วขึ้นจากคนที่เป็นผู้เชี่ยวชาญในเรื่องนั้น
Gilles

5
@ S.Lott: ถ้าเขาเพิ่งอ่านรหัสแบบสุ่มเขาจะรู้ได้อย่างไรว่าการตัดสินใจขององค์กรที่พวกเขาทำนั้นดีหรือไม่ดี และทำไมพวกเขาถึงดีหรือไม่ดี
Carson63000


4
@ S.Lott เพื่อสรุปโดยมีผู้เชี่ยวชาญในภาษาหรือกระบวนทัศน์ระบุโครงการที่มีการจัดระเบียบอย่างดีระบุจุดอ่อน / ข้อบกพร่องใด ๆ ที่อาจมีอยู่ในองค์กรและอธิบายว่าทำไมมีคุณค่ามากกว่าแค่อ่านรหัสและมองไปที่องค์กร ด้วยสมมติฐานว่ามีโครงสร้างที่ดี
Thomas Owens

คำตอบ:


32

ฉันสงสัยว่าสิ่งนี้ขึ้นอยู่กับภาษา เท่าที่การเขียนโปรแกรมการทำงานฉันได้ขลุกอยู่ใน Haskell เป็นส่วนใหญ่ดังนั้นฉันจะอธิบายว่ามันทำงานได้อย่างไร

รหัส Haskell จัดเป็น "โมดูล" ซึ่งโดยทั่วไปเป็นเพียงชุดของฟังก์ชันและชนิดข้อมูล แต่ละโมดูลเป็นไฟล์เดียว โมดูลเป็นสิ่งที่ผสมผสานระหว่างคลาส Java และแพคเกจ Java ขอบเขตที่แน่นอนของสิ่งที่โมดูลจะแตกต่างกันไป โมดูลยังมีการควบคุมฟังก์ชั่นและประเภทก่อสร้างเพื่อส่งออกและคนที่จะซ่อน; สิ่งนี้คล้ายกับprivateและpublicใน Java

ในโปรแกรมของฉันเองฉันต้องการให้โมดูลทำสิ่งหนึ่งความหมาย; สิ่งนี้ทำให้พวกเขาเหมือนคลาส Java ยกเว้นว่าพวกเขาอาจกำหนดหลายชนิดข้อมูล โมดูลที่ฉันใช้จากData.Listไลบรารี่มาตรฐานนั้นเป็นเหมือนแพ็คเกจมากกว่า - มันเป็นชุดของฟังก์ชั่นยูทิลิตี้ที่คล้ายกัน นี่ก็คล้ายกับคลาส Java แบบคงที่เช่นjava.util.Arraysกัน

โมดูลก็เหมือนแพคเกจ Java ที่พวกเขาสามารถซ้อนเพื่อความชัดเจน (ฉันไม่คิดว่าสิ่งนี้มีผลกระทบต่อรหัสตัวเอง) โดยทั่วไปสำหรับโครงการเดียวฉันให้ชื่อ (พูดProject) และให้โมดูลทั้งหมดของฉันเป็นส่วนหนึ่งของโครงการนี้ (เช่นProject.ParseและProject.Run) ถ้าผมเขียนโค้ดที่เป็นเหมือนห้องสมุดกว่าโปรแกรมที่ผมจะจัดระเบียบมันขึ้นอยู่กับสิ่งที่มันทำเหมือนหรือData.List Control.Monadความแตกต่างที่สำคัญอย่างหนึ่งจากภาษาอื่นคือ Haskell สนับสนุนให้ จำกัด IO และวางไว้ในที่เดียว โมดูลจำนวนมากไม่มี IO เลยและสำหรับโครงการใดก็ตามฉันชอบที่จะมีโมดูลมากที่สุดเท่าที่จะเป็นไปได้

ตัวอย่างเช่นฉันกำลังทำงานกับภาษาการเขียนโปรแกรมแบบง่าย ๆ ที่ฉันเรียก TPL (โดยไม่มีเหตุผลที่ดี) สำหรับสิ่งนี้ฉันได้สร้างโมดูลง่าย ๆ สองโมดูล: TPL.Parseซึ่งกำหนดการเป็นตัวแทนภายในของภาษาและวิธีการแยกวิเคราะห์และTPL.Runเรียกใช้ล่ามและจัดการกับตัวแปรและ IO สำหรับการคอมไพล์และรันโค้ดโดยทั่วไปจะมีMainโมดูลซึ่งเป็นสิ่งที่ลงท้ายด้วยการเป็นจุดเริ่มต้นของโปรแกรม

มีอิสระอย่างมากในการจัดระเบียบฟังก์ชันภายในไฟล์ นี่เป็นสิ่งที่ฉันชอบทำ ฉันกำหนดประเภทข้อมูลของฉันไปยังด้านบนก่อนที่จะนำไปใช้ที่อื่น หลังจากกำหนดชนิดข้อมูลแล้วฉันจะใช้สิ่งที่ฉันต้องการเพื่อให้พวกเขาเป็นส่วนหนึ่งของประเภทข้อมูลที่เหมาะสม จากนั้นฉันก็ตามด้วยตรรกะและฟังก์ชั่นตัวช่วยต่างๆตามความเหมาะสม สุดท้ายผมชอบที่จะมีทุกฟังก์ชั่ IO mainของฉันที่ตอนจบด้านล่างมากกับ สิ่งนี้ทำให้ชัดเจนว่ากำลังทำอะไรอยู่ IO และโปรแกรมเริ่มทำงาน

ดังนั้นโดยสรุป: ฟังก์ชั่นจะมีอยู่ในโมดูลแต่ละอันประกอบด้วยไฟล์เดียว โมดูลต่างๆสามารถสร้างโปรแกรมหรือไลบรารีได้ อดีตมักรวมถึงMainโมดูลที่เป็นจุดเริ่มต้นของมัน ภายในไฟล์มีตัวเลือกต่าง ๆ สำหรับองค์กร แต่ฉันต้องการจัดกลุ่มข้อมูลใกล้ด้านบน, IO ใกล้ด้านล่างและตรรกะที่อยู่ตรงกลาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.