Thay đổi cách suy nghĩ của tôi để chuẩn bị cho lập trình chức năng


9

Khi chuyển sang một phong cách lập trình chức năng sau khi đến từ thủ tục và OOP, tôi cần biết những điều cần biết trước về "cách suy nghĩ mới này"?

Làm thế nào để bạn chuẩn bị cho việc lặn trong thế giới FP và có được nó lần đầu tiên?

Những điều cơ bản để tìm hiểu và đặt thẳng đầu tiên là gì?


2
Điều này quá chung chung, imho. Chỉ cần bắt đầu đọc! Hầu hết các sách và hướng dẫn về lập trình chức năng hiện nay đều bắt đầu với câu trả lời cho câu hỏi của bạn.
devmiles.com

Hãy thử nó sau đó đăng câu hỏi nếu bạn gặp khó khăn về điều gì đó
Tom Squires

@Vladimir Volodin: Điều đó thật tuyệt nhưng nó không bắt buộc đối với mọi cuốn sách. Bạn có thể giới thiệu một số cái tốt (tốt nhất là bất khả tri ngôn ngữ)?
JohnDoDo

Bạn không cần phải lặn . Bạn có thể thử biểu thức lambda bằng ngôn ngữ OOP như c # để làm trơn tru quá trình chuyển đổi từ OOP sang FP.
TomCaps

4
Tôi nghĩ rằng bạn có nó ngược. Hãy thử lập trình chức năng, và cách suy nghĩ của bạn sẽ thay đổi.
kevin cline

Câu trả lời:


10

Nhận một bản sao của "Cấu trúc và giải thích các chương trình máy tính" và tự mình làm việc thông qua chương đầu tiên "Xây dựng trừu tượng với các thủ tục". Giới thiệu tốt nhất về lập trình chức năng tôi đã từng có.

EDIT: Nếu bạn muốn một cái gì đó so sánh hơn, hãy thử "Bảy ngôn ngữ trong bảy tuần" (từ chối trách nhiệm: cuốn sách này vẫn nằm trong danh sách TODO của tôi).


6

Bạn sẽ cần tư duy khai báo thay vì thủ tục "trước tiên hãy làm điều này, sau đó làm điều này, sau đó làm điều này ..." để giải quyết vấn đề. Hiểu đệ quy có thể là điểm khởi đầu tốt, vì đó là một điểm ngọt ngào giữa tư duy thủ tục và khai báo.


4

Bạn đã đặt xe trước ngựa. Bạn không cần phải chuẩn bị. Chỉ cần chọn một ngôn ngữ có vẻ thú vị, tìm một số tài liệu và thử nó. Nếu bạn gặp khó khăn, sau đó dừng lại và tìm kiếm một câu trả lời. Khi bạn tiến bộ, cách suy nghĩ của bạn sẽ thay đổi.


3

FP dựa trên tính toán lamdba. Bạn cần biết rằng. Đó là một điểm khởi đầu tốt. Chức năng là tất cả. Không có khái niệm về trạng thái (mặc dù bạn có thể giả mạo nó ở cấp độ cao hơn).

Trong OOP,

a = 1 a = a + 1

được chấp nhận. Không như vậy trong FP. Bạn không thể chỉ định biến một giá trị khác. Nếu bạn muốn học FP lâu dài, hãy học Haskell. Đây là phiên bản thuần túy nhất của FP ngoài kia và nó cũng khá phức tạp (tôi mới bắt đầu học nó) nhưng vẫn đáng để học nó.

Giới thiệu về Lập trình hàm cung cấp cho bạn một cái nhìn tổng quan ở mức độ cao về tất cả những gì về FP.

Hai hãy cẩn thận

  1. Nếu bạn muốn học FP cho công việc, thì không có quá nhiều vị trí tuyển dụng ngoài kia. Thủ tục và OOP vẫn thống trị thị trường việc làm. Nhưng FP có thể giúp bạn rất nhiều trong việc khám phá những cách mới để giải quyết vấn đề.
  2. Trình biên dịch FP không nhanh chóng. Vì FP quan tâm nhiều hơn đến việc giải quyết vấn đề, bạn không thể mong đợi tốc độ C. Nhưng bạn vẫn có thể đưa ra các hướng dẫn cho trình biên dịch (trong Haskell) để tăng tốc quá trình thực hiện. Sự đánh đổi là bạn có nhiều thời gian tập trung vào chương trình trong tay thay vì các lỗi chữa cháy.

8
"FP dựa trên tính toán lamdba. Bạn cần biết điều đó." Không, bạn không. Biết tính toán lambda không cần thiết để hiểu lập trình chức năng hơn là biết máy Turing (hoặc lắp ráp) là cần thiết để hiểu lập trình mệnh lệnh.
sepp2k

@ sepp2k Để có được thành tích tốt với mục tiêu lâu dài, tôi thành thật tin rằng học tính toán lambda là cần thiết. Bạn có thể học nó mà không cần tính toán lambda nhưng học nó sẽ giúp bạn giỏi hơn ở FP.
Ubermensch

2
FP certianly chỉ tuyên bố rằng trạng thái đó thường bất biến, cũng không chắc chắn tôi đồng ý với tuyên bố về trình biên dịch bị chậm
jk.

@jk. Chắc chắn, họ có trạng thái nhưng không theo cách OO (Các trạng thái có thể được bao gồm trong các hàm hoặc dưới dạng các mẫu khớp và theo các cách tinh tế hơn). Và một trạng thái bất biến có nghĩa là bạn chỉ có một trạng thái duy nhất. Đó là lý do tại sao một hàm phải luôn trả về cùng một giá trị. Về trình biên dịch, tôi không nghĩ rằng chúng có thể khớp với C / C ++ về tốc độ thuần vì trình biên dịch đảm nhiệm các bước cần thiết trong tính toán kết quả thay vì chúng tôi chỉ định thứ tự. FP có lợi thế lớn nhất trong việc giảm chi phí cho nhà phát triển và tính toán song song thay vì tốc độ CPU thuần túy.
Ubermensch

3

Tôi cố gắng hết sức để nhớ câu thần chú sau đây:

Dữ liệu trong -> Chuyển đổi dữ liệu -> Dữ liệu ra

hoặc là

TransformData (Nhập dữ liệu) -> Dữ liệu ra


1
Nó phải là TransformData (DataIn) -> DataOut
Ubermensch

:) như một matra "Data In, Transform Data, Data Out" dễ nói hơn "TransformData, Open ngoặc, Data In, Close ngoặc, Data Out" Tôi chỉ đùa tôi đồng ý với bạn.
Đêm tối

Nó chỉ là một người bạn bình luận thân thiện. Cảm ơn vì sự trả lời.
Ubermensch

Tôi biết, tôi chỉ nói đùa với bạn, không có ý xúc phạm, thực tế tôi nghĩ tôi sẽ cập nhật matra của mình.
Đêm tối

Man-set kỹ năng của bạn là khá lớn.
Ubermensch
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.