Tại sao lập trình hàm


38

Thỏa thuận với lập trình chức năng là gì? Tôi thấy nói về nó rất nhiều nhưng thành thật mà nói tôi chưa bao giờ thấy chúng hữu ích. Tại sao nhiều trường đại học rõ ràng dạy họ?


6
Rất lớn trong lập trình AI.
thủy sinh

3
@aqua - không nên là một câu trả lời tại sao không?
Martin Beckett

5
Tôi cũng muốn chỉ ra rằng ngay cả các ngôn ngữ OO truyền thống đang bắt đầu bao gồm các khái niệm từ lập trình chức năng. Linq (bằng .NET), là một trường hợp điển hình.
apoorv020

Tôi nghĩ rằng lập trình chức năng tập thể dục bộ não của bạn nhiều hơn, và có thể dẫn đến mã thực sự. Vì vậy, nó khá mát mẻ.
Adel

2
@ apoorv020: Và thuốc generic, bộ dữ liệu và bộ sưu tập rác và ... tất cả đều có nguồn gốc từ các ngôn ngữ chức năng.
Jon Harrop

Câu trả lời:


60

Bắt đầu với Tại sao các vấn đề lập trình chức năng . Sau đó chuyển sang Why Why chức năng lập trình vấn đề . Một vài viên đạn:

  • Lập trình hàm cho phép bạn suy luận về các vấn đề khác nhau
  • Sự trừu tượng hóa chức năng rất mạnh mẽ và cho phép bạn DRY mã của bạn theo những cách không có sẵn cho các mô hình khác
  • Trong tương lai đa lõi của chúng tôi, các ngôn ngữ chức năng có thể dễ dàng phân chia thành các tác vụ đồng thời (mặc dù các ngôn ngữ không đúng chức năng cũng đang làm việc chăm chỉ về vấn đề này).
  • Việc chứng minh rằng các chương trình được viết bằng ngôn ngữ chức năng thuần túy (không có tác dụng phụ) là chính xác về mặt toán học.

5
+1 - Đây đều là những điểm tuyệt vời và chúng được giải thích chính xác hơn và chi tiết chính xác hơn những gì tôi đã cố gắng thực hiện.
jmort253

1
Với điểm thứ tư của bạn, bạn có nghĩa là ngôn ngữ có thể được chứng minh là đúng, hoặc các chương trình được viết trong ngôn ngữ? Dù sao, cả ngôn ngữ và chương trình không tinh khiết được viết bằng ngôn ngữ không tinh khiết đều có thể được chứng minh là chính xác, nó chỉ khó hơn và lộn xộn hơn nhiều.
Jörg W Mittag

1
@ Jorg W Mittag, cũng dễ dàng hơn nhiều để suy luận về các thuộc tính của chính ngôn ngữ. Ngữ nghĩa học hàm nghĩa là tầm thường đối với các ngôn ngữ chức năng, và khá phức tạp đối với mệnh lệnh.
SK-logic

thật buồn cười khi liên kết thứ hai cung cấp một số đối số "rõ ràng", biết rằng tôi thậm chí không đọc liên kết thứ nhất.
jokoon

+1: Câu trả lời tuyệt vời. Tôi đặc biệt thích cách bạn đặt các gạch đầu dòng # 1 và # 2 cho các từ.
Jim G.

9

Các khái niệm lập trình chức năng xây dựng một nền tảng sẽ thay đổi cách bạn suy nghĩ và giúp bạn giải quyết các vấn đề trong thế giới thực.

Khái niệm này tương tự như lý do tại sao tất cả chúng ta đều học Giải tích đa biến, Đại số và / hoặc Vật lý Kỹ thuật như các chuyên ngành Khoa học Máy tính, mặc dù chúng ta có thể không cần kiến ​​thức cụ thể đó trong sự nghiệp.

Đây là lý do tại sao các trường Luật yêu thích các ứng cử viên với một BS trong Toán học. Nghiên cứu Toán học dạy bạn suy nghĩ về nhiều khái niệm một cách hợp lý và lập trình chức năng dạy cho bạn sự trừu tượng và nhiều khái niệm quan trọng khác giúp bạn phá vỡ các vấn đề và nhìn chúng theo một khía cạnh khác.

Tóm lại, lập trình chức năng giúp dạy bạn cách học.


Có lẽ nó không thực sự cần một cái tên sau đó? Nó không chỉ đơn giản là "chính xác" thiết kế chương trình?

4

Khi bạn đang bắt đầu, lập trình chức năng là mô hình tư duy tốt nhất. Bởi vì hầu hết các chương trình của bạn sẽ không yêu cầu hướng đối tượng. Ít nhất đó là kinh nghiệm của tôi.

Tuy nhiên, bây giờ tôi có được một số ứng dụng yêu cầu phân tách hiển thị và logic, đó là khi tôi bắt đầu tách tất cả logic và mã hiển thị, để giúp mọi người dễ dàng làm những gì tốt nhất.

Nhưng bạn sẽ không biết tại sao phải làm điều đó, trừ khi bạn thành thạo Chức năng trước. Tôi không bao giờ thích mọi người đẩy OO xuống cho tôi, hoặc rằng OO là giải pháp cho mọi thứ. Chỉ cần đảm bảo rằng bất kỳ cách tiếp cận nào bạn sử dụng, sẽ có ý nghĩa đối với những gì bạn đang làm và không quá khó để học quá nhiều thời gian khỏi công việc bạn được trả tiền để làm.


1
+1 - Tôi thích rằng bạn chỉ ra bằng cách sử dụng kỹ thuật tốt nhất cho công việc: Hãy chắc chắn rằng nó có ý nghĩa.
jmort253

1
Đáng buồn thay, ý thức chung là hiếm trong ngành công nghiệp của chúng tôi. Bởi vì mỗi chúng ta có những trải nghiệm hoàn toàn khác nhau, do những sai lầm chúng ta mắc phải khác nhau, mỗi chúng ta đều phát triển những thói quen khác nhau và tại sao chúng ta thực hiện chúng ... Chẳng hạn như điều chỉnh nguồn, không có ý nghĩa với bất kỳ ai luôn làm việc chính họ.
crosenblum

"Tâm lý chung là điều phân phối công bằng nhất trên thế giới, vì mỗi người đều nghĩ rằng anh ta rất có duyên với nó đến nỗi ngay cả những người khó thỏa mãn trong tất cả các vấn đề khác cũng không có thói quen mong muốn nhiều hơn họ có. " - Descartes

3

Bởi vì nó nhấn mạnh động từ, không phải danh từ. Đôi khi đó là những động từ quan trọng.


OOP nhấn mạnh danh từ. Đôi khi nó là danh từ quan trọng. Làm thế nào để chúng ta biết cái nào? - Sai tiến thoái lưỡng nan. Hệ thống bị dừng

3

Bởi vì nói chung nó sử dụng ít mã hơn để hoàn thành cùng một nhiệm vụ. Ít mã để viết, là ít mã để duy trì. Bên cạnh việc ít mã hơn, nó cũng có xu hướng có ít trạng thái hơn, và do đó, lý do đơn giản hơn một chút (một khi bạn đã quen với nó).


Vì vậy, đó không phải chỉ đơn giản là định nghĩa của 'tốt hơn' sao? Tại sao chúng tôi muốn làm bất cứ điều gì khác ngoài những gì bạn đã mô tả?

2

Có lẽ bởi vì các trường đại học muốn dạy một cái gì đó từ tất cả các mô hình lập trình, và đối với một số thứ nhất định, lập trình chức năng sẽ tốt hơn (như mô tả chuyển động của các nhân vật trong game và mô tả hoạt hình)

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.