คำตอบอื่น ๆ อีกมากมายมุ่งเน้นไปที่ด้านประสิทธิภาพ (ขนาน) ของการเขียนโปรแกรมเชิงฟังก์ชันซึ่งฉันเชื่อว่าสำคัญมาก อย่างไรก็ตามคุณได้ถามเป็นพิเศษเกี่ยวกับผลผลิตเช่นเดียวกับคุณสามารถตั้งโปรแกรมสิ่งเดียวกันนี้ได้เร็วกว่าในกระบวนทัศน์ที่จำเป็นหรือไม่
ฉันพบ (จากประสบการณ์ส่วนตัว) จริงๆว่าการเขียนโปรแกรมใน F # ตรงกับวิธีที่ฉันคิดดีกว่าและมันก็ง่ายกว่า ฉันคิดว่านั่นคือความแตกต่างที่ยิ่งใหญ่ที่สุด ฉันได้ตั้งโปรแกรมทั้งใน F # และ C # และมี "การต่อสู้ภาษา" ใน F # ซึ่งฉันชอบน้อยกว่ามาก คุณไม่ต้องคิดถึงรายละเอียดใน F # นี่คือตัวอย่างบางส่วนของสิ่งที่ฉันพบว่าฉันชอบมาก
ตัวอย่างเช่นแม้ว่า F # จะพิมพ์แบบคงที่ (ทุกประเภทจะได้รับการแก้ไขในเวลาคอมไพล์) การอนุมานประเภทจะระบุว่าคุณมีประเภทใดดังนั้นคุณจึงไม่จำเป็นต้องพูด และถ้ามันคิดไม่ออกมันจะทำให้ฟังก์ชัน / คลาส / อะไรก็ได้ทั่วไปโดยอัตโนมัติ ดังนั้นคุณไม่จำเป็นต้องเขียนอะไรทั่วไปทั้งหมดมันเป็นไปโดยอัตโนมัติ ฉันพบว่านั่นหมายความว่าฉันใช้เวลามากขึ้นในการคิดถึงปัญหาและวิธีการนำไปใช้น้อยลง ในความเป็นจริงเมื่อใดก็ตามที่ฉันกลับมาที่ C # ฉันพบว่าฉันคิดถึงการอนุมานแบบนี้จริงๆคุณจะไม่มีทางรู้เลยว่ามันกวนใจแค่ไหนจนกว่าคุณจะไม่ต้องทำอีกต่อไป
นอกจากนี้ใน F # คุณจะเรียกใช้ฟังก์ชันแทนการเขียนลูป เป็นการเปลี่ยนแปลงเล็กน้อย แต่มีความสำคัญเพราะคุณไม่ต้องคิดเกี่ยวกับโครงสร้างแบบวนซ้ำอีกต่อไป ตัวอย่างเช่นนี่คือโค้ดส่วนหนึ่งที่จะผ่านและจับคู่บางอย่าง (ฉันจำไม่ได้ว่ามันมาจากปริศนาออยเลอร์ของโครงการ):
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
ฉันรู้ว่าการทำตัวกรองแล้วแผนที่ (นั่นคือการแปลงของแต่ละองค์ประกอบ) ใน C # นั้นค่อนข้างง่าย แต่คุณต้องคิดในระดับที่ต่ำกว่า โดยเฉพาะอย่างยิ่งคุณจะต้องเขียนลูปเองและมีคำสั่ง if ที่ชัดเจนของคุณเองและสิ่งเหล่านั้น ตั้งแต่เรียนรู้ F # ฉันรู้ว่าฉันพบว่าการเขียนโค้ดในรูปแบบการทำงานง่ายขึ้นโดยที่ถ้าคุณต้องการกรองคุณต้องเขียน "ตัวกรอง" และถ้าคุณต้องการแมปคุณเขียน "แผนที่" แทนที่จะใช้ แต่ละรายละเอียด
ฉันชอบตัวดำเนินการ |> ซึ่งฉันคิดว่าแยก F # ออกจาก ocaml และอาจเป็นภาษาที่ใช้งานได้อื่น ๆ มันเป็นตัวดำเนินการไปป์ซึ่งช่วยให้คุณ "ไพพ์" เอาต์พุตของนิพจน์หนึ่งไปยังอินพุตของนิพจน์อื่น มันทำให้โค้ดเป็นไปตามวิธีคิดของฉันมากขึ้น เช่นเดียวกับในข้อมูลโค้ดด้านบนที่กล่าวว่า "ใช้ลำดับปัจจัยกรองแล้วแมป" เป็นการคิดระดับสูงมากซึ่งคุณไม่ได้ใช้ภาษาโปรแกรมที่จำเป็นเพราะคุณยุ่งอยู่กับการเขียน loop และ if statement เป็นสิ่งหนึ่งที่ฉันคิดถึงมากที่สุดเมื่อใดก็ตามที่ฉันใช้ภาษาอื่น
โดยทั่วไปแล้วแม้ว่าฉันจะเขียนโปรแกรมได้ทั้ง C # และ F # แต่ฉันก็พบว่าการใช้ F # นั้นง่ายกว่าเพราะคุณสามารถคิดในระดับที่สูงขึ้นได้ ฉันจะเถียงว่าเนื่องจากรายละเอียดเล็ก ๆ น้อย ๆ ถูกลบออกจากการเขียนโปรแกรมเชิงฟังก์ชัน (อย่างน้อยใน F #) ทำให้ฉันมีประสิทธิผลมากขึ้น
แก้ไข : ฉันเห็นหนึ่งในความคิดเห็นที่คุณขอตัวอย่างของ "state" ในภาษาโปรแกรมที่ใช้งานได้ F # สามารถเขียนได้ตามความจำเป็นดังนั้นนี่คือตัวอย่างโดยตรงของวิธีที่คุณสามารถมีสถานะที่ไม่แน่นอนใน F #:
let mutable x = 5
for i in 1..10 do
x <- x + i