นี่คือตัวอย่างที่เชื่อฉันจะเรียนรู้ Haskell (และเด็กชายนฉันดีใจที่ฉันไม่)
-- program to copy a file --
import System.Environment
main = do
--read command-line arguments
[file1, file2] <- getArgs
--copy file contents
str <- readFile file1
writeFile file2 str
ตกลงมันเป็นโปรแกรมสั้น ๆ ที่อ่านได้ ในแง่นั้นมันดีกว่าโปรแกรม C แต่สิ่งนี้แตกต่างจาก (พูด) โปรแกรม Python ที่มีโครงสร้างคล้ายกันมากอย่างไร?
คำตอบคือขี้เกียจประเมิน ในภาษาส่วนใหญ่ (แม้แต่ฟังก์ชันการทำงานบางอย่าง) โปรแกรมที่มีโครงสร้างเหมือนกับโปรแกรมข้างต้นจะส่งผลให้ไฟล์ทั้งหมดถูกโหลดลงในหน่วยความจำแล้วเขียนอีกครั้งภายใต้ชื่อใหม่
Haskell "ขี้เกียจ" มันไม่คำนวณสิ่งต่าง ๆ จนกว่าจะจำเป็นและโดยส่วนขยายจะไม่คำนวณสิ่งที่ไม่เคยต้องการ ตัวอย่างเช่นหากคุณต้องการลบwriteFile
บรรทัด Haskell จะไม่รบกวนการอ่านอะไรจากไฟล์ในตอนแรก
ตามที่เป็นอยู่ Haskell ตระหนักดีว่าwriteFile
ขึ้นอยู่กับreadFile
และสามารถเพิ่มประสิทธิภาพเส้นทางข้อมูลนี้ได้
แม้ว่าผลลัพธ์จะขึ้นอยู่กับคอมไพเลอร์ แต่โดยทั่วไปสิ่งที่จะเกิดขึ้นเมื่อคุณเรียกใช้โปรแกรมข้างต้นคือสิ่งนี้: โปรแกรมอ่านบล็อก (พูด 8KB) ของไฟล์แรกจากนั้นเขียนลงในไฟล์ที่สองจากนั้นอ่านบล็อกอื่นจากไฟล์แรก ไฟล์และเขียนลงในไฟล์ที่สองและอื่น ๆ (ลองวิ่งstrace
ดูสิ!)
... ซึ่งดูเหมือนมากว่าการใช้ C อย่างมีประสิทธิภาพของการคัดลอกไฟล์จะทำอย่างไร
ดังนั้น Haskell ช่วยให้คุณเขียนโปรแกรมขนาดกะทัดรัดอ่านง่ายโดยไม่ต้องเสียสละประสิทธิภาพมากมาย
สิ่งที่ฉันต้องเพิ่มอีกอย่างคือ Haskell ทำให้การเขียนโปรแกรม buggy ทำได้ยาก ระบบประเภทที่น่าทึ่งไม่มีผลข้างเคียงและแน่นอนความกะทัดรัดของรหัส Haskell ช่วยลดข้อบกพร่องด้วยเหตุผลอย่างน้อยสามประการ:
การออกแบบโปรแกรมที่ดีขึ้น ความซับซ้อนที่ลดลงทำให้เกิดข้อผิดพลาดทางตรรกะน้อยลง
รหัสขนาดกะทัดรัด มีข้อบกพร่องน้อยลง
ข้อผิดพลาดในการรวบรวม จำนวนของข้อบกพร่องเพียงแค่ไม่ถูกต้อง Haskell
Haskell ไม่ใช่สำหรับทุกคน แต่ทุกคนควรลองดู