7

tôi đã tự hỏi về những lợi ích của chương trình không quốc tịch, và tìm thấy một ai đó chia sẻ câu hỏi của tôi: Advantages of stateless programming?ưu điểm của lập trình trạng thái?

như tôi đọc qua các câu trả lời, mặc dù nó khiến tôi tò mò về câu hỏi ngược lại. những ưu điểm của lập trình stateful là gì? có vẻ như có rất nhiều tập trung vào mã không quốc tịch gần đây nhưng tôi cảnh giác với các xu hướng.

có vẻ như chương trình nhà nước (có nghĩa là bắt buộc) có thể tự vay cho một số trường hợp tốt hơn chương trình không trạng thái (không có chức năng) và tôi muốn có thể nhận ra vấn đề nào có thể được giải quyết bằng lập trình stateful.

+0

Tôi nghĩ rằng câu hỏi của bạn là một câu hỏi rõ ràng ở cốt lõi, tuy nhiên bạn cần phải cải thiện câu hỏi: Xóa đoạn cuối cùng (chủ quan) và cố gắng chủ động loại câu trả lời bạn đang mong đợi. –

+1

tại sao câu hỏi này đóng lại, trong khi câu hỏi ngược lại (liên kết với ở trên) thì không? – ericsoco

+0

@JohannesRudolph - được ghi chú và chỉnh sửa. – ericsoco

Trả lời

6

Chỉ có một số ít trường hợp có những lợi thế không thể tranh cãi đối với mô hình lập trình dựa trên trạng thái chia sẻ, có thể thay đổi so với mô hình lập trình không trạng thái bất biến. Một lĩnh vực mà khả năng đột biến có thể mang lại lợi thế rất lớn là cho phép các thuật toán hoạt động tại chỗ. Wiki haskell có một ví dụ tuyệt vời về việc triển khai quicksort: http://www.haskell.org/haskellwiki/Introduction#When_C_is_better

Để tóm tắt, khi bạn không cho phép sửa đổi bộ nhớ danh sách, bạn cần tạo bản sao được sắp xếp của nó. Điều này cũng đúng đối với hầu hết các thuật toán khác làm thay đổi một số cấu trúc dữ liệu, ví dụ: một cây AVL.

Nói chung, các ngôn ngữ lập trình chức năng có xu hướng tập trung nhiều bộ nhớ hơn so với các ngôn ngữ bắt buộc của chúng. Bộ nhớ là rẻ ngày nay, tuy nhiên băng thông là rất quan trọng và tốc độ bộ nhớ không tăng tỷ lệ thuận với sự gia tăng chúng ta thấy trong sức mạnh của CPU. Tuy nhiên, cần lưu ý rằng mô hình thực thi của Haskell cho phép Trình biên dịch thực hiện một số tối ưu hóa thuận tiện, cũng liên quan đến việc sử dụng bộ nhớ và các mẫu truy cập. Ở một mức độ nào đó, điều này có thể bù đắp cho những bất lợi về mặt lý thuyết.

1

Tính rõ ràng là chìa khóa. Tôi thích lập trình chức năng (hiện tại tôi đang ở trên một bản lề đinh tán), nhưng nhà nước là cách thế giới hoạt động. Không phải ngẫu nhiên mà mô hình hướng đối tượng phổ biến hơn chức năng hay bất kỳ loại lập trình nào khác. OOP và lập trình thủ tục là con đường kháng cự ít nhất cho các lập trình viên mới. Hầu hết mọi người hiểu trực giác ý tưởng của một vật thể như một thứ gì đó thay đổi trạng thái (nó có thể di chuyển, hoặc thay đổi màu sắc, vv) thay vì bộ kết hợp Y giúp đệ quy.

+0

Tôi không biết nếu tôi mua cái này. Rốt cuộc, một lý do họ là "con đường kháng cự ít nhất" là vì các ngôn ngữ OOP đã trở nên phổ biến, có nghĩa là chúng có nhiều hướng dẫn hơn, nhiều công cụ hơn, nhiều IDE hơn, mọi thứ hơn. Nhưng phổ biến không có nghĩa là đơn giản về khái niệm. – thedayturns

+0

Tôi đồng ý với điều đó đối với một số ngôn ngữ (OOP được triển khai tốt là rất tốt). Quan điểm của tôi là mọi người nghĩ trong tiểu bang. Bản thân thế giới chỉ là một máy trạng thái hữu hạn. – semisight

+3

"trạng thái là cách hoạt động của worl" - một giả thuyết triết học mang tính suy đoán cao. Người ta có thể phản đối: "Cơ học toán học và lượng tử là cách mà thế giới hoạt động (và trong những hoàn cảnh nhất định có vẻ như là trạng thái)." – Ingo

1

Nhà nước là quan trọng. Mỗi bit trong vũ trụ này có trạng thái, nó là trạng thái xác định cách hệ thống hoạt động, trạng thái làm cho hệ thống năng động và có thể sử dụng được, nhưng khi trạng thái rất quan trọng, điều quan trọng là trạng thái này được truy cập và thao tác như thế nào. Sẽ không tốt nếu bất kỳ người nào có thể thao túng trạng thái của người khác (nhà nước như một nội dung trong não của một con người). Quan điểm của tôi về trạng thái là nó phải được làm rõ ràng và không phải là cái gì đó nằm rải rác trên mã của bạn và trở nên rất tiềm ẩn rằng rất khó để biết trạng thái của hệ thống là gì và phần nào của hệ thống chịu trách nhiệm về phần nào của nhà nước. Nhà nước nên được kiểm soát theo cách mà bạn có thể dễ dàng nói rằng phần này của trạng thái của hệ thống được xử lý bởi mô-đun này và chỉ mô-đun này.

Trong bất kỳ chương trình FP thực nào, nó sẽ luôn có 2 phần, một phần không trạng thái sẽ là thuật toán cốt lõi của bạn vv và một phần khác sẽ duy trì trạng thái của chương trình.

Các vấn đề liên quan