ฉันเพิ่งเรียนรู้ F # เพื่อความสนุก (ฉันเป็น VB.NET/C# dev) และฉันชอบสิ่งที่มีให้ ในทางทฤษฎีนั่นคือ แต่ฉันมีปัญหาในการพิจารณาสถานการณ์ที่ฉันจะเลือกรหัสใน F # มากกว่าใน C # ความคิดใด ๆ
ฉันเพิ่งเรียนรู้ F # เพื่อความสนุก (ฉันเป็น VB.NET/C# dev) และฉันชอบสิ่งที่มีให้ ในทางทฤษฎีนั่นคือ แต่ฉันมีปัญหาในการพิจารณาสถานการณ์ที่ฉันจะเลือกรหัสใน F # มากกว่าใน C # ความคิดใด ๆ
คำตอบ:
ข้อโต้แย้งเล็กน้อยสำหรับการโปรแกรมมิงแบบบริสุทธิ์:
สำหรับการรักษาเต็มรูปแบบให้ดูทำไมเรื่องหน้าที่ Programmingและทำไมทำไมหน้าที่ Programming เรื่องเรื่อง
ฉันมีปัญหาในการพิจารณาสถานการณ์ที่ฉันจะเลือกใช้รหัสใน F # มากกว่าใน C # ความคิดใด ๆ
จากที่นี่ :
เซิร์ฟเวอร์แบบอะซิงโครนัส
Metaprogramming (เช่นการแยกวิเคราะห์)
การคำนวณทางเทคนิค
แอปพลิเคชัน GUI
การเขียนโปรแกรมลอจิก
การทดสอบ
ประสิทธิภาพ
inline
สำหรับสิ่งที่เป็นนามธรรมสูงกว่าคำสั่งที่เป็นนามธรรมฟรีนี่คือสิ่งที่ใช้การเขียนโปรแกรมสไตล์การทำงานสำหรับ - ในชีวิตประจำวันมากขึ้นหรือน้อยลง
เราทำสถิติและสถิติประกันภัยด้วยชุดข้อมูลที่มีขนาดค่อนข้างใหญ่ ข้อมูลที่ดึงมาจากฐานข้อมูลคือวัตถุที่เป็นวัตถุคงที่และไม่เปลี่ยนแปลง ไม่มีเหตุผลในการสร้างชั้นเรียนด้วยวิธีการ
การคำนวณแต่ละขั้นตอนจะเพิ่มรายละเอียดเพิ่มเติม แต่ไม่ได้ทำให้วัตถุกลายพันธุ์ ในตอนท้ายของท่อเรากำลังทำการลดแฟนซีเพื่อคำนวณจำนวนเงินและจำนวนและสิ่งอื่น ๆ
ลองนึกภาพสิ่งนี้
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
"เฟส" ของการคำนวณแต่ละครั้งเป็นลูปการโปรแกรมเชิงฟังก์ชันที่สามารถอ่าน - คำนวณ - ผลตอบแทนได้ง่ายและสร้างวัตถุประกอบของสิ่งอื่นรวมทั้งผลลัพธ์
(เราใช้ Python ดังนั้นการเขียนโปรแกรมการทำงานโดยใช้ฟังก์ชั่นเครื่องกำเนิดไฟฟ้า)
มันง่ายกว่าที่จะใช้ไร้สัญชาติและวัตถุที่เปลี่ยนไม่ได้
criteria() |> some_query |> calculate |> enrich |> summarize
ฉันพบว่าผู้ดำเนินการไพพ์ไปข้างหน้าสามารถนำไปสู่รหัสที่ชัดเจนขึ้น แต่ฉันเชือนแช
map
เพื่อให้ได้ผลเหมือนกัน
ในทางเทคนิคแล้วมันไม่ได้เป็นคุณสมบัติเฉพาะของฟังก์ชั่นการเขียนโปรแกรมและ F # ไม่ใช่ภาษาที่ใช้งานได้จริง F # เป็นหนึ่งในลูกหลานของ ML ให้การจับคู่รูปแบบที่ยอดเยี่ยมและประเภทข้อมูลเกี่ยวกับพีชคณิต ดังนั้นสำหรับงานใด ๆ ที่ต้องการโครงสร้างข้อมูลที่ซับซ้อน F # นั้นมีความหมายและใช้งานง่ายกว่า C # มาก
ลองนึกภาพการใช้คอมไพเลอร์ใน C # และ F # - แสดงถึงต้นไม้ไวยากรณ์ที่เป็นนามธรรมและแปลงมันง่ายกว่ามากหากภาษาของคุณมี ADT และการจับคู่รูปแบบ
เหมาะอย่างยิ่งสำหรับแผนที่ลดขนาดของระบบหลายระบบที่มีขนาดใหญ่และการขนานแบบมัลติคอร์ขนาดใหญ่ ค่อนข้างเท่ห์เมื่อพิจารณาว่าเซิร์ฟเวอร์ระดับเริ่มต้นในปัจจุบันมาพร้อมกับ 48 คอร์ (นับ 96 HT)
หากคุณต้องการลองใช้ Haskell อย่างเต็มประสิทธิภาพ Erlang ก็มีของดีๆให้คุณ
Simon Payton-Jones กล่าวเกี่ยวกับ Haskell เขาต้องการมีโปรแกรมที่เห็นได้ชัดว่าไม่มีข้อบกพร่องแทนที่จะไม่มีข้อบกพร่องที่ชัดเจน
(ฉันอาจได้รับใบเสนอราคาปิด แต่คุณได้รับความคิด)
ด้วยการ จำกัด ผลข้างเคียงคุณจะสามารถพิสูจน์ได้ง่ายขึ้น
ข้อดีอย่างหนึ่งที่ชัดเจนคือมันขนานกันได้ง่ายกว่ามาก
F#
ไม่ได้เป็นตัวแทนของการเขียนโปรแกรมฟังก์ชั่นอย่างเต็มที่ ลองClojure
แทน