Nhiều câu trả lời khác đã tập trung vào khía cạnh hiệu suất (song song) của lập trình chức năng, mà tôi tin là rất quan trọng. Tuy nhiên, bạn đã hỏi cụ thể về năng suất, như trong, bạn có thể lập trình điều tương tự nhanh hơn trong một mô hình chức năng hơn là trong một mô hình bắt buộc.
Tôi thực sự thấy (từ kinh nghiệm cá nhân) rằng lập trình trong F # phù hợp với cách tôi nghĩ tốt hơn, và vì vậy nó dễ dàng hơn. Tôi nghĩ đó là sự khác biệt lớn nhất. Tôi đã lập trình ở cả F # và C #, và có rất ít "chiến đấu với ngôn ngữ" trong F #, mà tôi yêu thích. Bạn không cần phải suy nghĩ về các chi tiết trong F #. Dưới đây là một vài ví dụ về những gì tôi thấy tôi thực sự thích.
Ví dụ: mặc dù F # được nhập tĩnh (tất cả các loại được giải quyết tại thời điểm biên dịch), kiểu suy luận chỉ ra loại bạn có, vì vậy bạn không cần phải nói. Và nếu không thể tìm ra nó, nó sẽ tự động làm cho hàm / lớp / bất cứ thứ gì chung chung của bạn. Vì vậy, bạn không bao giờ phải viết bất kỳ cái gì chung chung, tất cả đều tự động. Tôi thấy điều đó có nghĩa là tôi đang dành nhiều thời gian hơn để suy nghĩ về vấn đề và giảm cách thực hiện nó. Trên thực tế, bất cứ khi nào tôi quay lại C #, tôi thấy tôi thực sự nhớ loại suy luận này, bạn không bao giờ nhận ra nó gây mất tập trung như thế nào cho đến khi bạn không cần phải làm điều đó nữa.
Cũng trong F #, thay vì viết các vòng lặp, bạn gọi các hàm. Đó là một thay đổi tinh tế, nhưng có ý nghĩa, bởi vì bạn không phải suy nghĩ về cấu trúc vòng lặp nữa. Ví dụ: đây là một đoạn mã sẽ đi qua và khớp với thứ gì đó (tôi không thể nhớ cái gì, đó là từ câu đố Euler của dự án):
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
Tôi nhận ra rằng thực hiện bộ lọc sau đó bản đồ (đó là chuyển đổi từng yếu tố) trong C # sẽ khá đơn giản, nhưng bạn phải suy nghĩ ở cấp độ thấp hơn. Đặc biệt, bạn phải tự viết vòng lặp và có câu lệnh if rõ ràng của riêng bạn và các loại điều đó. Từ khi học F #, tôi nhận ra rằng tôi thấy việc viết mã theo cách chức năng dễ dàng hơn, nếu bạn muốn lọc, bạn viết "bộ lọc" và nếu bạn muốn lập bản đồ, bạn viết "bản đồ", thay vì thực hiện từng chi tiết
Tôi cũng thích toán tử |> mà tôi nghĩ tách F # khỏi ocaml và có thể các ngôn ngữ chức năng khác. Đó là toán tử đường ống, nó cho phép bạn "dẫn" đầu ra của một biểu thức vào đầu vào của một biểu thức khác. Nó làm cho mã theo cách tôi nghĩ nhiều hơn. Giống như trong đoạn mã trên, có nghĩa là, "lấy chuỗi các yếu tố, lọc nó, sau đó ánh xạ nó." Đó là một mức độ suy nghĩ rất cao, mà bạn không có được bằng một ngôn ngữ lập trình bắt buộc bởi vì bạn quá bận rộn để viết vòng lặp và câu lệnh if. Đó là điều tôi nhớ nhất mỗi khi tôi đi vào một ngôn ngữ khác.
Vì vậy, nói chung, mặc dù tôi có thể lập trình ở cả C # và F #, tôi thấy việc sử dụng F # dễ dàng hơn vì bạn có thể nghĩ ở cấp cao hơn. Tôi sẽ lập luận rằng vì các chi tiết nhỏ hơn được loại bỏ khỏi lập trình chức năng (ít nhất là trong F #), nên tôi làm việc hiệu quả hơn.
Chỉnh sửa : Tôi thấy trong một trong những ý kiến mà bạn đã hỏi ví dụ về "trạng thái" trong ngôn ngữ lập trình chức năng. F # có thể được viết một cách bắt buộc, vì vậy đây là một ví dụ trực tiếp về cách bạn có thể có trạng thái có thể thay đổi trong F #:
let mutable x = 5
for i in 1..10 do
x <- x + i