Lập trình hàm là một mô hình khai báo. Một trong những điểm mạnh với FP là tránh các tác dụng phụ. Người ta nói rằng đối với một số vấn đề, FP không phù hợp.
Đối với những vấn đề phổ biến không phải là lập trình chức năng phù hợp?
Lập trình hàm là một mô hình khai báo. Một trong những điểm mạnh với FP là tránh các tác dụng phụ. Người ta nói rằng đối với một số vấn đề, FP không phù hợp.
Đối với những vấn đề phổ biến không phải là lập trình chức năng phù hợp?
Câu trả lời:
Các ứng dụng rất tự nhiên trong tự nhiên. Trò chơi điện tử là một ví dụ điển hình vì chúng mô hình hóa thế giới thực. Sẽ có ý nghĩa hơn nhiều khi nghĩ về việc sửa đổi trạng thái của thế giới thay vì xây dựng lại từ trạng thái trước mỗi khi có gì đó thay đổi.
Một ví dụ cụ thể sẽ thay đổi sức khỏe của quái vật sau khi nó bị bắn. Việc thay đổi sức khỏe của nó đơn giản hơn nhiều so với việc thay thế nó bằng một con quái vật hoàn toàn mới giống nhau về mọi mặt ngoại trừ bây giờ nó có ít sức khỏe hơn. Những loại thay đổi này tạo nên mọi thứ trong thế giới trò chơi và thực hiện điều này theo cách thức chức năng thuần túy không trực quan lắm. Tôi tưởng tượng có thể có một số hình phạt hiệu suất đáng kể, ít nhất là nếu bạn đang thực hiện nó bằng một ngôn ngữ hoàn toàn chức năng.
(Như một lưu ý phụ, một số vấn đề trong trò chơi rất phù hợp với lập trình chức năng, chẳng hạn như AI. Một ngôn ngữ chức năng / mệnh lệnh lai sẽ phù hợp tuyệt vời cho những trường hợp đó.)
Lập trình nhúng thời gian thực là tất cả về các tác dụng phụ. Tương tác với io kỹ thuật số và analog, bộ hẹn giờ, cổng nối tiếp và song song, mọi thứ thú vị đều được thực hiện bằng cách gọi các chức năng với các hiệu ứng phụ.
Tôi cho rằng lập trình GUI không phù hợp với lập trình chức năng. GUI nói chung rất có trạng thái và việc mô hình hóa / quản lý chúng bằng trạng thái dễ dàng hơn nhiều so với sử dụng hiệu ứng phụ miễn phí. Chắc chắn có thể sử dụng ngôn ngữ lập trình chức năng cho GUI ... nhưng có lẽ đó không phải là ý kiến hay.
Như đã lưu ý trong một câu trả lời khác, các trò chơi thường dễ quản lý hơn bằng cách theo dõi trạng thái và trong khi bạn có thể viết một trò chơi bằng ngôn ngữ chức năng, việc làm như vậy thường dễ dàng và hiệu quả hơn trong ngôn ngữ "trạng thái" (nghĩa là hướng đối tượng ngôn ngữ).
Ứng dụng kinh doanh dựa trên dữ liệu. Giao diện người dùng và các thao tác dữ liệu đơn giản không cần FP.
filter
, reduce
và map
. Ném vào một số sort
, partition
, groupBy
. Xét cho cùng, ngôn ngữ lập trình được sử dụng rộng rãi nhất để viết các ứng dụng như vậy là Excel, đây là ngôn ngữ chức năng.
Bạn không thể dễ dàng loại bỏ bất kỳ vấn đề nào được đặt ra vì không phù hợp với lập trình chức năng.
Phần lớn phụ thuộc vào ngôn ngữ thực tế được sử dụng cho lập trình chức năng và các tính năng của nó.
Một ví dụ là Erlang đã được đề cập cho các hệ thống nhúng thời gian thực.
Đầy đủ trạng thái cũng không phải là một tiêu chí tốt để chống lại lập trình chức năng, có một số cách thành công được thực hiện trong các ngôn ngữ lập trình chức năng để đối phó với điều này.
Tác dụng phụ cũng thường được đề cập chống lại lập trình chức năng. Mỗi chương trình không hoàn toàn độc đoán đều có tác dụng phụ. Vì vậy, mọi ngôn ngữ FP trong thế giới thực đều có một số cách để đối phó với điều này, vấn đề chỉ là làm thế nào để gói gọn các tác dụng phụ của thế giới.
Không cần các tác dụng phụ tùy ý như các biến toàn cục.
Nhưng có những bộ vấn đề giúp bạn dễ dàng tham gia vào lập trình chức năng hơn vì chúng không làm thay đổi cách nhìn vấn đề quen thuộc của bạn nhiều như vậy. Nhưng một khi bạn quản lý để suy nghĩ chức năng, ngày càng nhiều bộ vấn đề được mở ra để ít tác dụng phụ hơn.
Ngay cả khi lập trình C, luôn luôn là một ý tưởng tốt để giảm các tác dụng phụ tùy ý như các biến toàn cục càng nhiều càng tốt.