ฉันสงสัยว่าสิ่งนี้ขึ้นอยู่กับภาษา เท่าที่การเขียนโปรแกรมการทำงานฉันได้ขลุกอยู่ใน 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 ใกล้ด้านล่างและตรรกะที่อยู่ตรงกลาง
What's stopping you from...
ปีและปีของการเขียนโปรแกรมด้วยความคิดที่แตกต่างอย่างสิ้นเชิงจนถึงจุดที่รหัส Haskell ไม่ได้คำนวณทางจิตใจ และแน่นอนคุณกำลังสมมติว่าโครงการจริงมักจะถูกต้องและจัดอย่างเป็นระเบียบ (บางทีพวกเขาเป็น แต่ noob อย่างที่ฉันรู้)