Tương đương với các nguyên tắc RẮN cho lập trình chức năng


35

Tôi đã tìm thấy các nguyên tắc RẮN khá hữu ích khi nghĩ về thiết kế hướng đối tượng.

Có một bộ nguyên tắc bất khả tri ngôn ngữ tương tự / tương đương được thiết kế cho lập trình chức năng không?


12
FWIW, điều này đã được thảo luận ngắn gọn về SO một năm trước
StuartLC

DI và HOF: lập trình
paul

Video này cũng như các slide trình bày các nguyên tắc RẮN được áp dụng cho Lập trình chức năng. Cả hai đều sử dụng ngôn ngữ Clojure làm ví dụ, nhưng các nguyên tắc này có trong các ngôn ngữ khác.
mascip


Câu trả lời:


14

Có một chút khó khăn để tìm tương đương nhưng tôi có thể thử:

  • S (SRP) trong FP, một hàm tạo LUÔN LUÔN cùng một đầu ra cho cùng một đối số, đây được gọi là độ trong suốt tham chiếu
  • O (OCP) trong FP có một khái niệm gọi là kiểu dữ liệu đại số, hãy xem nó liên quan đến hệ thống phân cấp Class như thế nào và cả hai đều cố gắng giải quyết vấn đề 1
  • L (LSP) Nguyên tắc thay thế Liskov là chống chỉ định 2
  • D (DIP) trong lập trình chức năng nói chung đạt được sự trừu tượng hóa thông qua thành phần chức năng, cũng có một cơ chế khác với sự trợ giúp của lý thuyết thể loại (ví dụ như monoid hoặc functor), cho "Dependency Injection" 3

21
Tôi vẫn đang suy nghĩ về cách bạn nhận được từ Nguyên tắc Trách nhiệm Đơn lẻ đến tính minh bạch tham chiếu . Hai cái đó không liên quan. SRP là về một chức năng có một mục đích duy nhất. Nó có thể hoặc không thể minh bạch về mặt tham chiếu, liên quan đến điều đó.
Goran Jovic

3
Ah, xấu của tôi - tôi hiểu rồi Đây là những từ tương đương theo nghĩa là các nguyên tắc và hình thành cùng một từ viết tắt, không phải theo nghĩa của cùng một điều hoặc tương tự. Xin lỗi cho downvote!
Goran Jovic

1
Phải đó là cách dự định để đọc nó. Tôi đã cố gắng để mô tả một ánh xạ cho các điều khoản trong bối cảnh của fp.
AndreasScheinert

Man tôi ghét rằng bạn không thể chỉnh sửa một bình luận, trên thực tế những điều NÊN có nghĩa là ít nhất là một cái gì đó tương tự.
AndreasScheinert

Có thể các hàm bậc cao hơn có thể cung cấp một số kiểu tiêm phụ thuộc: bạn tiêm một hàm cụ thể làm tham số vào hàm chung (bậc cao hơn).
Giorgio

44

RẮN hóa ra cũng là một ý tưởng tốt cho các lĩnh vực chức năng / mệnh lệnh.

SRP - "Chỉ làm một việc" được lấy từ lập trình bắt buộc ngay từ đầu. Có chức năng nhỏ, tập trung là tốt.

OCP - Cho phép bạn thay đổi hành vi mà không sửa đổi mã là tốt. Lập trình hàm sử dụng các hàm bậc cao hơn nhiều so với thừa kế, nhưng nguyên tắc giữ.

LSP - Việc tuân thủ một số hợp đồng giao diện cũng tốt trong lập trình chức năng như trong hướng đối tượng. Nếu một hàm sắp xếp có một bộ so sánh, thì bạn sẽ mong đợi '0 bằng, ít hơn cung cấp kết quả âm, lớn hơn hành vi của kết quả dương.

ISP - Hầu hết các ngôn ngữ chức năng vẫn có cấu trúc. Việc chỉ định tập dữ liệu nhỏ nhất được yêu cầu bởi một chức năng vẫn là thông lệ tốt. Yêu cầu giao diện cụ thể nhất đối với dữ liệu (tại sao sử dụng Danh sách số nguyên khi liệt kê T cũng hoạt động tốt?) Vẫn còn tốt.

DIP - Chỉ định tham số cho hàm (hoặc hàm bậc cao hơn để truy xuất chúng) thay vì mã hóa cứng để hàm nhận được một số giá trị cũng tốt trong lập trình hàm như trong hướng đối tượng.

Và ngay cả khi thực hiện lập trình hướng đối tượng, nhiều nguyên tắc trong số này cũng áp dụng cho việc thiết kế các phương thức trong các đối tượng.

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.