2010-11-22 13 views
8

Tôi đang có kế hoạch đắm mình trong mô hình lập trình chức năng và làm cho quá trình suy nghĩ về bản chất thứ hai đối với tôi. .Net/Mono là framework duy nhất/objectmodel mà tôi quen thuộc và tôi không muốn học bất kỳ hệ thống kiểu nào khác. Điều đó làm cho F # một sự cân nhắc rõ ràng vì gánh nặng của việc học một hệ thống kiểu mới sẽ không phải là một yếu tố gây mất tập trung.F # có thể dạy tôi thực hành lập trình chức năng tốt không?

Nhưng mối quan tâm của tôi là về chính ngôn ngữ đó. Nó sẽ tốt như bất kỳ ngôn ngữ lập trình chức năng cổ điển nào khác (ví dụ: Haskell) trong khoan FP vào hộp sọ của tôi?

+1

Bạn có thể sử dụng nhiều ý tưởng của FP bằng nhiều ngôn ngữ khác nhau. Câu hỏi không phải là nó sẽ "khoan FP vào hộp sọ của tôi" - câu hỏi là nó sẽ khuyến khích thói quen FP tốt hay xấu. –

Trả lời

10

Có, nó có thể. Đặc biệt hữu ích và germane ở đây là Real World Functional Programming mà đến tại FP từ cả C# và đặc biệt là quan điểm F #. Bạn sẽ yêu nó.

4

Có, nó chắc chắn sẽ giúp bạn học lập trình chức năng. F # cũng hỗ trợ lập trình hướng đối tượng, vì vậy việc chuyển đổi sẽ dễ dàng hơn. Nếu bạn muốn chuyển sang một ngôn ngữ chức năng đầy đủ, bạn có thể, nhưng tôi thực sự tìm thấy sự kết hợp của OO và FP tốt hơn OO hoặc FP một mình (tôi là một lập trình viên Scala, giống như F #).

2

Mô hình lập trình chức năng? Haskell lò xo ngay lập tức để tâm trí. Nhân tiện, không có khung kế thừa trong Haskell. Theo như tôi biết, khung của bạn là cửa sổ đầu cuối và trình chỉnh sửa lập trình.

Nếu bạn muốn có một ngôn ngữ lập trình chức năng trong khuôn khổ .NET của bạn, bạn sẽ phải gắn bó với F #.

IronPython, nhưng cách này không phải là ngôn ngữ lập trình hàm.

+3

Có, trên thực tế, IronPython không chỉ không phải là ngôn ngữ lập trình hàm, nó không phải là ngôn ngữ lập trình *, nó là trình biên dịch cho ngôn ngữ lập trình Python (cũng không phải là ngôn ngữ lập trình hàm). –

9

Tôi nghĩ rằng lợi ích của việc học lập trình chức năng với F # (đặc biệt nếu bạn đã có kinh nghiệm với C# và .NET) là bạn sẽ dễ dàng hơn khi tạo một dự án thú vị.

  • Một lý do là bạn đã quen thuộc với các thư viện .NET (đó là dễ dàng để truy cập từ F #)
  • Lý do thứ hai là F # là không tinh khiết, vì vậy bạn có thể bắt đầu viết mã mà làm việc và sau đó cải thiện nó để làm cho nó hoạt động hiệu quả hơn.

F # hỗ trợ nhiều mô hình, nhưng nó chủ yếu là ngôn ngữ chức năng (so với Python hoặc C# hỗ trợ nhiều mô hình quá, nhưng không phải là chức năng nguyên thủy). Điều này làm cho nó dễ dàng hơn để buộc bản thân bạn sử dụng phong cách chức năng. Nó dễ dàng hơn để tránh các mô hình bắt buộc, bởi vì chúng khó viết hơn trong F # (và mã trông tồi tệ hơn).

Tôi nghĩ rằng một khi bạn "có được" các chương trình cơ bản về chức năng, sẽ dễ dàng hơn khi học các ngôn ngữ chức năng khác nếu bạn vẫn quan tâm. Nó chắc chắn là tốt đẹp để biết một chút về Haskell hoặc Đề án, bởi vì họ là triệt để hơn (trong một số cách).

Nếu bạn giỏi khái niệm understadning mà không sử dụng chúng trong một số dự án thực thì bắt đầu với một số ngôn ngữ cổ điển sử dụng một số cuốn sách kinh điển có thể là một lựa chọn tốt (ví dụ: Haskell School of Expression hoặc Structure and Interpretation of Computer Programs). Tôi không có ý nghĩa này trong bất kỳ ý nghĩa tiêu cực nào - cá nhân tôi rất thích đọc sách kỹ thuật mà không cần thử ví dụ, vì tôi vẫn có thể lấy các khái niệm thú vị từ chỉ đọc (và để thực hành, luôn có Google). Tất nhiên, bạn có thể viết một số mã trong Haskell hoặc Scheme, nhưng với tư cách là một lập trình viên .NET, có thể bạn sẽ thấy viết mã F # thú vị hơn ...

3

F #, trong nhiều trường hợp, có thể tốt hơn hầu hết "ngôn ngữ lập trình chức năng cổ điển khác [s]". Vì bạn đã biết .NET, bạn sẽ có thể tận dụng toàn bộ kiến ​​thức .NET của mình trong khi chọn hai thứ hữu ích từ F #:

  1. Mô hình lập trình chức năng. Đó là, làm thế nào để chương trình theo phong cách của FP. Bạn có thể sử dụng nó bằng bất kỳ ngôn ngữ nào. Tôi thường tìm hiểu về FP trong mã C# của mình, bởi vì tôi thấy nó là một cách dễ dàng hơn và có thể tái sử dụng để viết phần mềm.

  2. Cú pháp lập trình chức năng của một ngôn ngữ. F # rất giống với OCAML, và gia đình ML tạo nên một trong 3 ngôn ngữ chính của ngôn ngữ FP. Hai biggies khác là gia đình Miranda (trong đó Haskell là đại diện chính hiện đại) và gia đình LISP (nơi Common Lisp và Scheme là hai đại diện lớn).

Trong F #, nó có thể giúp bạn phân biệt rõ ràng giữa các loại F # và loại .NET. Records, Tuples và Discriminated Unions (khá nhiều) hoàn toàn là F #, và chúng được sử dụng trong hầu hết các ngôn ngữ chức năng. Sử dụng rất nhiều nếu bạn muốn tìm hiểu FP. Các lớp, cấu trúc và giao diện cũng có trong đó, nhưng đó là các khái niệm .NET. Sử dụng chúng khi cần thiết, nhưng cố gắng tránh chúng nói chung, vì sợ rằng bạn sẽ chỉ viết "C# với cú pháp ngốc nghếch" thay vì F # thành ngữ.

Những điều bạn thực sự bỏ lỡ từ Haskell là độ tinh khiết thực sự (eh, không lớn lắm), đánh giá lười biếng theo mặc định (thay đổi lớn) và nhập lớp. Bạn có thể làm eval lười biếng trong F #, nhưng bạn phải sử dụng rõ ràng Lazy <> các lớp học để có được nó. Có đánh giá lười biếng ở khắp mọi nơi là một trong những điều thực sự độc đáo và mạnh mẽ trong Haskell, nhưng nó không phải là một khái niệm FP nghiêm ngặt. Loại lớp học rất mạnh mẽ, nhưng bạn có thể nhận được mà không có chúng cho hầu hết các tình huống thực tế. Chúng chỉ là một mức độ trừu tượng cao hơn, cắt giảm một số tấm lò hơi và sự lặp lại.

Độ tinh khiết thực sự thường mang tính học thuật cao hơn. Nó có những ưu điểm nhất định, nhưng nếu bạn đã từng sử dụng .NET và các kỹ thuật không tinh khiết, bạn sẽ chỉ thấy khó khăn khi làm việc xung quanh cho đến khi bạn hoàn toàn mua vào tư duy FP.