Giới thiệu lập trình chức năng vào môi trường phát triển của bạn [đã đóng]


15

Đây là một câu chuyện dài nhưng tôi sẽ cố gắng tóm tắt nó tốt nhất có thể. Chúng tôi là một cửa hàng .NET viết phần mềm cho nhiều loại tiền khác nhau. Ví dụ: chúng tôi viết phần mềm quản lý yêu cầu sức khỏe, phần mềm quản lý lương hưu, phần mềm 401 (k) và một số thứ thuộc loại tài chính khác.

Bây giờ chúng ta đang bước vào một lĩnh vực mới: các công cụ phái sinh và phân tích định lượng, có vẻ rất thú vị. Đây là điều sẽ xảy ra trong 8-12 tháng tới tôi đã được thông báo.

Bây giờ, tôi đã tự học một số lập trình chức năng, chủ yếu chỉ là những cái nhìn hời hợt về các ngôn ngữ khác nhau thông qua cuốn sách này nhưng không bao giờ thực sự đào sâu vào nó. Bây giờ, vì chúng tôi là một cửa hàng .NET, tôi đã nghĩ F # có thể là một lựa chọn tốt, bởi vì chúng tôi có khả năng tận dụng một số thư viện .NET và kiến ​​thức hiện có có thể.

Câu hỏi của tôi là, bắt đầu từ đâu? Tôi đang có một thời gian cực kỳ khó khăn khi cố gắng tìm hiểu xem tôi có nên đi với Haskell, Erlang, Scala, F #, v.v.

Có ai có một tình huống tương tự? Nếu vậy, kinh nghiệm của bạn là gì khi chuyển sang chức năng và bạn đã chọn gì và tại sao? Tôi biết đây là một câu hỏi lớn nhưng tôi không biết bất kỳ nhà phát triển nào đang sử dụng các phương thức chức năng ngay bây giờ vì vậy tôi không có nơi nào khác ngoài Googling không ngừng và tìm kiếm các cuộc chiến nảy lửa ở mọi nơi bằng ngôn ngữ chức năng tốt nhất.


đề nghị đọc: Bắt đầu từ đâu
gnat

Câu trả lời:


14

Nguyên mẫu, nguyên mẫu, nguyên mẫu! Lấy một chút chức năng kinh doanh mà bạn nghĩ cần lập trình chức năng và thử các ngôn ngữ khác nhau và xem liệu chúng có thực sự mang lại cho bạn lợi ích và khả năng tương tác mà bạn đang tìm kiếm hay không.


Lời khuyên tốt và tôi sẽ chú ý đến nó, thực tế tôi đang thực hiện cài đặt Erlang ngay bây giờ để cho nó đi.
Nodey The Node Guy

10

Câu hỏi đầu tiên bạn thực sự cần trả lời trung thực là tại sao bạn đang cân nhắc sử dụng ngôn ngữ chức năng. Nếu bạn không thể biện minh cho lý do kinh doanh cho việc chuyển đổi thì bạn không nên làm điều đó. Nói cách khác, muốn giới thiệu một khuôn khổ mới, ngôn ngữ hoặc công nghệ mới khác vào môi trường làm việc của bạn chỉ vì bạn muốn học nó hoặc vì có vẻ như điều "tuyệt vời" tiếp theo chắc chắn là một sai lầm. Vì vậy, trước tiên bạn cần phải tự hỏi mình động lực là gì.

Nếu bạn thực sự cảm thấy bạn cần một ngôn ngữ chức năng để giải quyết một vấn đề cụ thể và giả sử hầu hết các ngôn ngữ chức năng chính sẽ đáp ứng yêu cầu của bạn, thì tôi sẽ đi với ngôn ngữ trưởng thành nhất và có cộng đồng người dùng lớn nhất. Erlang là một lựa chọn tốt và đáp ứng cả hai yêu cầu này, tuy nhiên, trong môi trường hoàn toàn ms / .NET, tôi có thể hiểu bằng cách sử dụng F #.


2
@ennukiller - Tôi chắc chắn có thể thấy rằng lập trình chức năng sẽ là một lựa chọn tốt cho chúng tôi và tôi sẽ không nói dối - Tôi cũng thích sử dụng nó chỉ để kích thích trí tuệ tuyệt đối mà nó sẽ cung cấp. Chúng tôi sẽ thực hiện một số lượng lớn các tính toán và tôi muốn tận dụng lợi thế của đa lõi. Ngoài ra, điều bắt buộc là mọi hàm toán học đều được chứng minh là đúng, tôi hiểu rằng có thể dễ dàng hơn với hàm.
Nodey The Node Guy

2
Nếu bạn cần bằng chứng, lập trình chức năng thuần túy là tốt nhất. Một số gợi ý ở đây là dành cho các tiện ích bổ sung chức năng cho các ngôn ngữ bắt buộc - chúng có thể quen thuộc hơn, nhưng sẽ không cung cấp cho bạn mã chính xác. Khi có tác dụng phụ, bạn không thể sử dụng thực tế là x = x ('độ trong suốt tham chiếu') và bạn phải chứng minh rằng x sau này trong mã vẫn giữ nguyên giá trị như trước đó. Ví dụ, trong một số ngôn ngữ, điều đó có thể xảy ra dẫn đến x:=3; y:=10; x:=add(x,x);kết quả xkhông phải là 6 và ykhông phải là 10. Để chứng minh chức năng của bạn chính xác trong ngữ cảnh này là không thực tế.
AndrewC

9

Tôi hoàn toàn đồng ý với F # cho một cửa hàng có cơ sở mã .Net hiện có, vì tôi rất đồng ý với Scala cho một cửa hàng có cơ sở mã Java hiện có.

Lập trình chức năng là một công cụ như bất kỳ khác. Được sử dụng tốt và được tích hợp với cách bạn đang phát triển mã, nó có thể giúp bạn làm việc hiệu quả hơn bằng cách giúp bạn dễ dàng suy luận về những gì mã của bạn đang làm. Tuy nhiên, việc chuyển đổi ngôn ngữ không phải là miễn phí, vì vậy đặt cược tốt nhất của bạn là một giải pháp cho phép bạn sử dụng càng nhiều mã hiện có càng lâu càng tốt trong quá trình chuyển đổi. Rốt cuộc, cách chắc chắn nhất để không giới thiệu một ngôn ngữ mới vào môi trường của bạn, sẽ là nói với đồng nghiệp của bạn rằng họ phải viết lại mọi thứ họ đã có cho đến nay để thấy được lợi ích của sự thay đổi, vào thời điểm này, bạn vẫn đang cố gắng bán chúng trên.


7

Tôi sẽ khuyên bạn nên bắt đầu lập trình chức năng mà không cần học một ngôn ngữ mới ngay lập tức. Nó chỉ gây khó khăn hơn nếu bạn đang cố gắng học một mô hình mới khi bạn cũng đang cố gắng nắm bắt cú pháp của một ngôn ngữ mới.

Tất nhiên, các ngôn ngữ được phát triển riêng để lập trình chức năng sẽ có một số lợi thế (như có các cấu trúc cụ thể như hiểu và làm cho cấu trúc dữ liệu không thay đổi theo mặc định), nhưng nói chung, bước lớn nhất cần làm là thay đổi suy nghĩ của bạn thành chức năng Phong cách. C # là tuyệt vời để làm điều đó.

Về cơ bản, bạn chỉ cần ngừng thay đổi trạng thái của mã của bạn. Tôi đã thực hiện điều này bằng Java và nó thậm chí còn dễ dàng hơn với C # vì bạn có lambdas. Khi bạn hiểu rõ phong cách đó và cảm nhận về những gì nó phù hợp, sẽ rất dễ dàng để chọn một ngôn ngữ chức năng (bất kể đó là F # bạn chọn hay Erlang) và cực kỳ hiệu quả với nó.


1
+1: Tôi đồng ý với bạn. Tôi cũng đã bắt đầu viết mã theo kiểu nhiều chức năng hơn trong Java và C ++ (sử dụng nhiều biến cuối cùng và const hơn, phá vỡ hoạt động phức tạp bằng cách sử dụng thành phần hàm, v.v.). Tôi nghĩ rằng điều này chắc chắn đã cải thiện phong cách lập trình của tôi trong Java và C ++. Sau một thời gian, khi cảm thấy sẵn sàng để đi xa hơn, người ta có thể thử một ngôn ngữ chức năng (Haskell, Ocaml, SML, Lisp, Scala, F #, v.v.)
Giorgio

1

Nếu tất cả những gì bạn muốn là tìm hiểu và hiểu lập trình chức năng, thì chỉ cần cài đặt IronPython và tập trung vào các tính năng chức năng trong Python. Tệ nhất, bạn sẽ học một công cụ có thể được tích hợp với C # để cắt giảm số lượng dòng mã trong một ứng dụng và giúp bạn cung cấp nhiều sản phẩm không có lỗi trước thời hạn.

Hãy xem các bài thuyết trình của DaBeaz về các trình tạo để biết ví dụ về cách tiếp cận chức năng trong Python có thể đơn giản hóa những điều phức tạp http://www.dabeaz.com/generators/

Ngoài ra, tôi nghĩ rằng bạn sẽ khôn ngoan khi đầu tư một chút thời gian với Scala. Nó chạy trên .NET ở chế độ beta, vì vậy bạn có thể cài đặt nó và sử dụng nó ngay hôm nay cho mục đích học tập, và vào mùa thu, nó sẽ ở chế độ phát hành cho .NET. Điều này có nghĩa là bạn có thể viết mã bằng Scala có khả năng di động trên JVM và .NET. Và, vì Scala dựa trên các Diễn viên và thông điệp truyền đi, nên rất dễ dàng để xây dựng một ứng dụng được tạo từ một số chương trình riêng biệt chạy trên một số máy riêng biệt. Khi bạn thêm tính di động .NET / JVM vào hỗn hợp, thì sẽ có một khía cạnh khác cần xem xét. Bạn có thể có một ứng dụng tận dụng cả thư viện Java của bên thứ 3 và thư viện .NET của bên thứ 3 mà không phải loay hoay với việc phát triển các giao thức để làm cho chúng giao tiếp. Cả hai quá trình sẽ được viết bằng Scala, và sẽ sử dụng tin nhắn từ xa Scala (diễn viên từ xa) để liên lạc. Hãy xem Akka, thư viện có vẻ như cuối cùng sẽ trở thành một phần của thư viện tiêu chuẩn của Scala đánh giá theo những gì Formsafe.com đang làm.


+1: Để đề cập đến Scala và tính khả dụng của nó trên các nền tảng khác nhau. Câu hỏi: akka sẽ thay thế việc thực hiện diễn viên hiện tại trong Scala? Hay hai người sẽ tồn tại cạnh nhau?
Giorgio

Không chắc Akka sẽ thay thế các diễn viên Scala hiện tại sớm hay không, nhưng Martin Oderky, người tạo ra Scala đã tham gia với nhà sáng tạo Akka Jonas Boner trong công ty Formsafe. Họ đang quảng bá mạnh mẽ Scala với Akka và giờ là với khung Play. Vì vậy, có khả năng trọng tâm của sự phát triển sẽ tập trung vào Akka. Nếu bạn chỉ học diễn viên với Scala, tốt nhất nên tập trung vào Akka trước.
Michael Dillon

Cảm ơn rất nhiều cho các thông tin! Tôi đã xem xét các diễn viên trong Scala nhưng chỉ là một người rất hời hợt cho đến nay.
Giorgio

-1

Tôi chắc chắn đồng ý với lực đẩy chính của câu trả lời được chấp nhận và cho rằng về cơ bản bạn đang lao vào mọi thứ bằng cách cho Erlang thử, có vẻ như bạn có thể hiểu khá rõ về cách bạn học và chỉ cần một chút nũng nịu hướng đi, rõ ràng đó là một câu trả lời tốt cho bạn ... Nhưng, tôi nghĩ rằng tôi sẽ tiếp cận câu hỏi hơi khác một chút, vì tôi thấy rằng câu trả lời này sẽ không giúp tôi nhiều; Tôi luôn code để học! Vì vậy, đây là suy nghĩ của tôi ...

(BTW, tôi có xu hướng tiếp tục chi tiết phù hợp hơn, giả sử, các chương trong một cuốn sách và tôi chắc chắn rằng tôi không thể kiềm chế hoàn toàn bản năng của mình ở đây, nhưng tôi sẽ thử một chiến thuật khác; sẽ chỉ tóm tắt những suy nghĩ của tôi ở đây, và trong trường hợp ai đó muốn biết thêm chi tiết về bất cứ điều gì, hoặc nghĩ rằng đôi khi tôi nói là sai lệch trong định dạng này, tôi sẽ cố hết sức để nhớ thông qua lời nhắc phản hồi ...)

Để cố gắng giữ bản thân làm nhiệm vụ, đây là sự hiểu biết của tôi về các câu hỏi lực đẩy được hỏi trong OP; Tôi sẽ giữ bên lề ở mức tối thiểu khi cần thiết để giải thích ....

Đầu tiên là câu trả lời nhanh:

tôi đã ở trong một tình huống tương tự? Nó ít nhất là tương tự; Tôi đã ở vị trí lãnh đạo thực hiện nhiều dự án khác nhau mà dù sao cũng có liên quan ... (CRM / Web / DB / Tích hợp dữ liệu / v.v.)

Làm thế nào / tại sao tôi lại chuyển sang chức năng? " Tôi thấy một số ví dụ về LINQ và mặc dù tôi đã mơ về một loại ngôn ngữ truy vấn được tích hợp, gõ tĩnh [vì tôi chủ yếu sử dụng các ngôn ngữ được nhập tĩnh (chủ yếu là C ++ và sau đó là C # )] trong suốt sự nghiệp của tôi ... Nhưng, đó là một môi trường cháy nổ khá nhanh, và mặc dù tôi thường xoay sở để xem những gì sẽ xảy ra trong quá khứ, tôi chưa bao giờ thực sự nghĩ về nó vì vậy tôi không bao giờ thấy trước điều đó có thể / sẽ cho phép các hoạt động trên Plain Old Object (lol!) dễ dàng như vậy, khi tôi thấy nó tôi biết rằng tôi phải có nó ... vì vậy, đó là lý do và khởi đầu của cách: Tôi tập trung vào việc học cách hiểu LINQ .

Bốn ý nghĩ ... errr, không, điều đó không đúng ...

Khi tôi đọc câu trả lời của Martijn Verburg , việc đề cập đến chức năng kinh doanh khiến tôi suy nghĩ ngay lập tức bắt đầu triển khai mã cho bất cứ điều gì tôi đang làm ... Tùy thuộc vào mức độ thử nghiệm ban đầu mà tôi có thể trả lời khác nhau, nhưng giả sử đó chỉ là nhúng ngón chân cái của bạn vào, tôi không chắc rằng tôi có bất cứ điều gì trực tiếp cho công việc (hoặc sắp trở thành công việc) sẽ mang lại cho tôi sự phấn khích / đam mê Tôi nghĩ bạn có thể nên có trong vài vấn đề đầu tiên bạn bắt đầu giải quyết ...

Tôi đã hoàn toàn có cơ sở trong các ngôn ngữ được gõ tĩnh + các ẩn dụ và mô hình OOP + bất cứ điều gì tôi đã vô tình quấn lấy não của mình trong khi giải quyết các vấn đề thực tế của tôi trong nhiều năm qua ... Điểm là, nếu bạn hoàn toàn giống như tôi, bạn có thể có rất nhiều bộ não dành riêng cho những thứ sẽ không giúp bạn nhiều với LINQ / FP.

Tôi nghĩ nó giống như lập trình thủ tục thuần túy so với lập trình OO: có rất nhiều công cụ thủ tục mà bạn sẽ sử dụng trong OOP, nhưng những người đến C ++ từ C mà không ưu tiên Grok / ken / "get" OO cuối cùng là rất rất xấu ở C ++. Tôi thực sự đã phỏng vấn rất nhiều (15+) nhà phát triển phần mềm và trình điều khiển thiết bị lâu năm, những người thực sự nghĩ rằng họ biết C ++, nhưng, hầu hết , có hiểu biết cơ bản / sách giáo khoa về C ++, nhưng thực tế không hiểu gì về có kinh nghiệm về OOP vì họ chưa bao giờ thực sự làm OOP ... Họ đã viết các lớp đa mục đích đơn lẻ với các thành viên tĩnh và các hàm tĩnh với một số lượng các lớp không tĩnh / không đơn lẻ được sử dụng làm cấu trúc.

Và FP có một số khái niệm tương tự (đối với những người không nêu lên mô hình) và những thứ khác đi cùng với nó, và (mặc dù tôi đã tìm thấy sự lai tạo của rất nhiều kỹ thuật là lý tưởng đối với tôi) Tôi hiểu nhiều hơn và nhiều hơn khi thời gian trôi qua chính xác mức độ suy nghĩ của tôi trước khi có được các khả năng chức năng thực sự vào bộ công cụ của tôi; Tôi đã cố gắng thực hiện nhiều thứ trong quá khứ theo cách sáng tạo hơn một chút mà có lẽ hầu hết các lập trình viên OO, nhưng khi tôi sử dụng các khái niệm làm suy nghĩ của tôi bị cản trở như thế nào ... Có rất nhiều vấn đề có thể được giải quyết trong một vài dòng đã sử dụng rất nhiều mâu thuẫn để làm trong C ++ / C #.

đột nhiên bạn thấy mình ...

Trong một bài viết "quá dài"

Bạn đang ở trong một mê cung của "không đọc", tất cả đều giống nhau.

Bạn thấy một teleconference trong tương lai gần, nhanh chóng tiếp cận.
> ngắn gọn
Uhhuh. Chắc chắn rồi. Được rồi, chúng ta sẽ nói chế độ "terse" là "bật".

Bạn thấy một teleconference trong tương lai gần, nhanh chóng tiếp cận.
> điều đó có nghĩa là gì?
Chỉ cần nói. Bạn không phải làm gì sáng nay sao?

Bạn thấy một teleconference trong tương lai gần, nhanh chóng tiếp cận. 
> này, đó có phải là một mối đe dọa đằng sau bạn?
Gì!? Ở ĐÂU?! [chạy đi la hét]

> Xin lỗi, tôi không hiểu WHERE, cụm từ nào?
[tiếp tục chạy và la hét, mỉa mai không chú ý]

Vậy ... tôi nên học gì, PSE thân mến, PSE thân yêu?

Cá nhân tôi bắt đầu trong C # với LINQ. Nó cho phép tôi giới thiệu một vài khái niệm cùng một lúc, và trong khi tôi liên tục đọc về FP và các khái niệm của nó, và nhiều LINQ hơn, và mối quan hệ giữa hai điều này, nó đã cho tôi một bước tiến trong khi vẫn làm việc hiệu quả. Tôi đã thêm vào một vài điều tại một thời điểm, các truy vấn dữ liệu nhanh chóng trở thành một công cụ hữu ích với tôi mà không cần phải hiểu một tấn.

Bây giờ, nhìn lại nó, tôi ước mình có thể thực hiện dự án tiếp theo của mình (đã giải quyết khoảng một năm sau) trước; Tôi đã làm quen với F # một cách vừa phải (điều này, tình cờ, đã cho tôi một khởi đầu tuyệt vời khi học ML (ngôn ngữ kim loại) và đó là các dẫn xuất khác (ví dụ, OCaml .)

Về cơ bản, tôi nghĩ rằng một câu trả lời hợp lý cho 'cái gì' phụ thuộc vào việc tìm ra một cặp vấn đề lập trình tốt mà bạn quan tâm, nhưng tất nhiên nó phải ghép với một chút FP mà bạn muốn tìm hiểu ... (và bạn có thể rửa / lặp lại / muộn hơn sau khi loại bỏ một cái gì đó ra khỏi danh sách ...) Và, tất nhiên, bạn luôn luôn học được nhiều hơn một chút so với điều chính bạn đặt ra để làm; Lúc đầu, tôi đã thực hiện một số bước nhỏ, nhưng sau đó tôi đã làm những việc lớn hơn và để những thứ nhỏ hơn rơi vào vị trí trong khi tôi làm những việc đó.

Đầu tiên, những gì nổi thuyền của bạn? Đặc biệt là lúc đầu, tốt nhất là có một cái gì đó vui vẻ và thú vị (với bạn) và điều đó sẽ giữ cho sự quan tâm của bạn đủ để làm cho nó đáng giá cho bạn. Vì vậy, IOW có vấn đề để giải quyết và các kỹ thuật giải quyết các vấn đề đó ... LINQ và truy vấn dữ liệu nội tuyến cho tôi lúc đầu. Đệ quy là một cái khác đối với tôi, bao gồm đệ quy đuôi, tôi đào GodelEscherBach-ness của nó; và tôi đã đọc về đệ quy đuôi. Trong khoảng thời gian này, những thứ tôi đang làm đã bị trì hoãn và cuối cùng tôi đã có một khối lượng lớn thời gian, vì vậy tôi đã có thể giữ nó trong một thời gian dài. Nó dễ dàng hơn với ít gián đoạn hơn, nhưng vì tôi đã chọn những thứ mà tôi nghĩ là vui vẻ, nó không quá khó ngay cả khi bị gián đoạn công việc. :)

Và mặc dù tôi không nghĩ ra bất cứ điều gì hay ho, tôi có thể nói với bạn về chương trình Cua tự nhận thức, tôi đã xoay sở để có được nó khá tốt.

Và ... Với những gì tôi sẽ học nó, PSE thân yêu, PSE thân yêu, với cái gì?

Đối với điều này, tôi đã sử dụng nhiều thuật toán mà tôi tình cờ quan tâm dù sao, cộng với nhiều điều tôi tự hỏi liệu bạn có thể làm trong F # không, và khi tôi hết ý tưởng, tôi sẽ giải quyết những thứ như 99 chai biaProject Euler vấn đề ...

Tôi chắc rằng bạn có thể tìm thấy rất nhiều điều mà bạn quan tâm mà FP có liên quan; nó cung cấp mọi thứ từ cải tiến cho OOP giúp bạn nêu rõ mọi thứ một cách ngắn gọn hơn tất cả các cách để vặn vẹo theo cách bạn nghĩ về nó trước đây thành một hình dạng mà bạn không nhận ra và thậm chí không có mô hình tinh thần để thể hiện trước.

Nhưng ... Có một lỗ hổng trong mô hình của tôi, PSE thân yêu ...

Và đây là lý do tại sao điều quan trọng là, đặc biệt là lúc ban đầu, nhưng thực sự trong suốt thời gian bạn học (và không phải lúc nào bạn cũng học được?) Ít nhất bạn phải dành một chút thời gian giữa các vấn đề để đọc những thứ không liên quan nhưng vẫn còn FP và thời gian để đọc mã nguồn được viết bởi các chuyên gia, tốt nhất là giải quyết các vấn đề tương tự hoặc tương tự; cũng như lời giải thích của họ về mọi thứ ...

Và trong suốt thời gian đó, bạn phải căng thẳng để hiểu tất cả, không phải từ quan điểm cũ mà từ chính bản thân mình ... Đến một lúc nào đó, tôi đã nhấp chuột, và ... điều tôi có thể liên hệ tốt nhất với nó đến ngày càng trở nên thông thạo tiếng Hà Lan; tại một số thời điểm, tôi đã xoay sở đủ để suy nghĩ (tôi đã làm điều đó thông qua việc nhập vai, đó là điều cơ bản mà tôi đã mô tả ở đây; đắm mình vào FP thay vì cố gắng học nó chỉ qua "cuốn sách larnin '" ...

Và, cuối cùng tôi đã làm; Tôi đã xoay sở để nội tâm hóa mọi thứ và vặn vẹo bộ não của mình cho đến khi bắt đầu xuất hiện FP / LINQ mà không cần tôi phải nỗ lực để chuyển nó trở lại thành OOP. (Vâng, tôi đã làm điều đó; tôi phải có một cái gì đó để treo váy của tôi lên. Mũ. Sao cũng được.)

Suy nghĩ cuối cùng ...

Ôi trời ơi, dường như bạn đang mất khả năng nghĩ về chữ ký thông minh của mình
phần tiêu đề. Xấu hổ làm sao.

Các teleconference vẫn đang nhanh chóng tiếp cận. Nó xuất hiện lớn hơn nhiều bây giờ.
> vâng, vâng, tốt .. ngắn gọn và tất cả. Tôi thấy bạn đã xoay sở để mất đi mối thù đó.
 cuộc gọi gần gũi, rằng ... tốt, vâng, tôi đang ... ... KHÔNG CÓ NÓ!
AAAAAAAHHHHHH !! [chạy đi la hét, một lần nữa]

Các teleconference vẫn đang nhanh chóng tiếp cận.
Nó bằng cách nào đó giống với Ngài Lancyjohn Cleezewiz.
Nó gần như là trên bạn.
> này, nhanh chóng quay lại! Tôi có một thử nghiệm để thử với bạn! (và một po-ta-to)

Bạn có thể tìm thấy rất nhiều thông tin trực tuyến về FP, một cách tự nhiên. Điều chính là để hiểu các khái niệm cơ bản, và sau đó học cách áp dụng chúng. Chẳng hạn, tìm hiểu về tính bất biến và tại sao nó quan trọng / hữu ích cho FP. Tôi đặc biệt khuyên bạn nên học một lý thuyết nhỏ để đi cùng với mọi thứ, như làm thế nào mà FP thuần túy có thể dễ dàng hơn nhiều để chứng minh chính thức. Đây là một động lực đằng sau tổ tiên của F #, ML. YMMV tất nhiên bạn có thể là một người chán nản đến rơi nước mắt trong trường hợp đó, rất nhiều ví dụ, rất nhiều thử nghiệm và lỗi để xem chính xác lý do tại sao các kỹ thuật được sử dụng là những gì họ sẽ giúp bạn có 'Aha!' khoảnh khắc bóng đèn.

Vì vậy, bây giờ tôi sẽ để nó ở đó. Hy vọng điều này là một số sử dụng cho một ai đó. Tôi muốn có thêm một chút vào những điều cụ thể để học nhưng hiện tại tôi đã hết thời gian. Tôi hy vọng sẽ tìm thấy một chút thời gian để sớm quay lại với nó mặc dù nó có vẻ là một tuần dài đối với tôi, vì vậy có lẽ sẽ ít nhất là vào cuối tuần.

<3 "Giới thiệu GRUEBOL, một điểm dừng; chỉ cho đến khi SnozzML kết thúc. Sẽ sớm thôi; tôi có một ủy ban lớn giúp tôi lần này." --Grace Hopperwit Egghead, Những từ cuối cùng nổi tiếng , XX97 GUE <3


"SO thân yêu" là gì?
gnat

Là ngăn xếp thân yêu tràn; được cho là phù hợp với nhịp điệu của bài hát 'Có một lỗ trong thùng' xD
Shelleybutoston

khi được đăng bên ngoài SO, điều này dường như làm cho điểm của bạn khó hiểu hơn - hãy xem xét chỉnh sửa ing để giải thích cho điều đó
gnat

trật bánh vâng, thực sự, đã làm. tyvm. :)
Shelleybutoston

nếu có ai có gợi ý về cách cải thiện câu trả lời của tôi, tôi sẽ đánh giá cao nó .. đó có phải là sự hài hước không? hay lời khuyên tồi? nó thực sự dựa trên kinh nghiệm của tôi vì vậy tôi rất vui lòng thay đổi nó nếu tôi có thể làm cho nó hữu ích hơn. cảm ơn;)
Shelleybutoston
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.