Gần đây tôi đã học F # cho vui (Tôi là VB.NET/C# dev) và tôi thực sự thích một số thứ mà nó cung cấp. Về mặt lý thuyết là vậy. Nhưng tôi gặp khó khăn khi nghĩ đến các kịch bản mà tôi sẽ chọn viết mã trong F # thay vì trong C #. Có ý kiến gì không?
Gần đây tôi đã học F # cho vui (Tôi là VB.NET/C# dev) và tôi thực sự thích một số thứ mà nó cung cấp. Về mặt lý thuyết là vậy. Nhưng tôi gặp khó khăn khi nghĩ đến các kịch bản mà tôi sẽ chọn viết mã trong F # thay vì trong C #. Có ý kiến gì không?
Câu trả lời:
Một vài đối số cho lập trình hàm thuần túy:
Để biết cách xử lý đầy đủ, hãy xem Tại sao vấn đề lập trình chức năng và tại sao vấn đề lập trình chức năng lại có vấn đề .
Tôi gặp khó khăn khi nghĩ đến các kịch bản mà tôi sẽ chọn viết mã trong F # thay vì trong C #. Có ý kiến gì không?
Từ đây :
Máy chủ không đồng bộ
Siêu lập trình (ví dụ phân tích cú pháp)
Máy tính kỹ thuật
Ứng dụng GUI
Lập trình logic
Kiểm tra
Hiệu suất
inline
cho trừu tượng bậc cao miễn phí.Đây là những gì sử dụng lập trình kiểu chức năng cho - trên cơ sở nhiều hơn hoặc ít hơn hàng ngày.
Chúng tôi làm rất nhiều thứ thống kê và tính toán với bộ dữ liệu khá lớn. Dữ liệu được lấy từ cơ sở dữ liệu là - về cơ bản là các đối tượng tĩnh, không thay đổi. Không có lý do để tạo một lớp với các phương thức.
Mỗi giai đoạn tính toán sẽ thêm một số chi tiết bổ sung, nhưng về cơ bản không làm biến đổi đối tượng. Ở phần cuối của đường ống, chúng tôi thực sự đang thực hiện một phép rút gọn để tính tổng và tổng và các thứ khác.
Hãy tưởng tượng điều này.
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
Mỗi "giai đoạn" của phép tính là một vòng lập trình chức năng thực hiện việc tính toán đọc đơn giản và tạo ra một đối tượng tổng hợp của những thứ khác cộng với kết quả.
(Chúng tôi sử dụng Python, do đó lập trình chức năng sử dụng các hàm tạo.)
Sử dụng các vật thể không trạng thái, bất biến dễ dàng hơn.
criteria() |> some_query |> calculate |> enrich |> summarize
Tôi thấy toán tử đường ống phía trước có thể dẫn đến mã rõ ràng hơn nhưng tôi lạc đề.
map
để có được hiệu ứng tương tự.
Về mặt kỹ thuật, nó không phải là một thuộc tính duy nhất của lập trình chức năng và F # không phải là ngôn ngữ chức năng thuần túy. F #, là một trong những hậu duệ ML, cung cấp một kiểu dữ liệu phù hợp và đại số tuyệt vời. Vì vậy, đối với bất kỳ tác vụ nào yêu cầu cấu trúc dữ liệu phức tạp, F # sẽ biểu cảm và dễ sử dụng hơn nhiều so với C #.
Hãy tưởng tượng việc thực hiện một trình biên dịch trong C # và F # - đại diện cho một cây cú pháp trừu tượng và biến đổi nó đơn giản hơn nhiều nếu ngôn ngữ của bạn cung cấp ADT và khớp mẫu.
Nếu bạn muốn có đầy đủ chức năng hãy thử Haskell, Erlang cũng có một số thứ rất tuyệt về nó.
Simon Payton-Jones nói về Haskell, anh ấy muốn có một chương trình rõ ràng không có lỗi, thay vì không có lỗi rõ ràng.
(Tôi có thể đã trích dẫn một chút, nhưng bạn có ý tưởng)
Bằng cách hạn chế các tác dụng phụ, bạn sẽ dễ dàng chứng minh mã của mình là chính xác.
Một lợi thế nhất định là nó dễ dàng song song hơn nhiều.
F#
không đại diện đầy đủ của lập trình chức năng. Hãy thửClojure
thay thế.