OK, vì vậy, tiêu đề là một chút clickbaity nhưng nghiêm túc tôi đã nói, đừng hỏi đá một lúc. Tôi thích cách nó khuyến khích các phương thức được sử dụng làm thông điệp theo kiểu hướng đối tượng thực sự. Nhưng điều này có một vấn đề dai dẳng đã được giải quyết trong đầu tôi.
Tôi đã nghi ngờ rằng mã được viết tốt có thể tuân theo các nguyên tắc OO và nguyên tắc chức năng cùng một lúc. Tôi đang cố gắng dung hòa những ý tưởng này và điểm hấp dẫn lớn mà tôi đã đạt được là return
.
Một hàm thuần túy có hai phẩm chất:
Gọi nó nhiều lần với cùng một đầu vào luôn cho kết quả giống nhau. Điều này ngụ ý rằng nó là bất biến. Trạng thái của nó chỉ được đặt một lần.
Nó không tạo ra tác dụng phụ. Sự thay đổi duy nhất gây ra bằng cách gọi nó là tạo ra kết quả.
Vì vậy, làm thế nào để một người hoàn toàn hoạt động nếu bạn tuyên thệ sử dụng return
như cách bạn truyền đạt kết quả?
Các nói, đừng hỏi tác phẩm ý tưởng bằng cách sử dụng những gì một số sẽ xem xét một tác dụng phụ. Khi tôi làm việc với một đối tượng, tôi không hỏi nó về trạng thái bên trong của nó. Tôi nói với nó những gì tôi cần phải làm và nó sử dụng trạng thái bên trong của nó để tìm ra những việc cần làm với những gì tôi đã bảo nó làm. Khi tôi nói với nó, tôi không hỏi nó đã làm gì. Tôi chỉ mong nó đã làm một cái gì đó về những gì nó được bảo phải làm.
Tôi nghĩ về Tell, Đừng hỏi nhiều hơn là một tên khác để đóng gói. Khi tôi sử dụng return
tôi không có ý tưởng gì gọi tôi. Tôi không thể nói đó là giao thức, tôi phải buộc nó xử lý giao thức của mình. Mà trong nhiều trường hợp được thể hiện là trạng thái nội bộ. Ngay cả khi những gì được phơi bày không chính xác trạng thái, nó thường chỉ là một số tính toán được thực hiện trên trạng thái và đối số đầu vào. Có một giao diện để đáp ứng thông qua cơ hội để đưa các kết quả vào một cái gì đó có ý nghĩa hơn trạng thái nội bộ hoặc tính toán. Đó là thông điệp truyền qua . Xem ví dụ này .
Quay trở lại vào ban ngày, khi các ổ đĩa thực sự có ổ đĩa trong đó và một ổ ngón tay cái là những gì bạn đã làm trong xe khi bánh xe quá lạnh để chạm vào ngón tay của bạn, tôi được dạy cách mọi người khó chịu khi xem xét các chức năng có thông số. void swap(int *first, int *second)
Có vẻ rất tiện dụng nhưng chúng tôi được khuyến khích viết các hàm trả về kết quả. Vì vậy, tôi lấy điều này để thuộc về đức tin và bắt đầu theo nó.
Nhưng bây giờ tôi thấy mọi người xây dựng kiến trúc nơi các đối tượng cho phép cách họ được xây dựng kiểm soát nơi họ gửi kết quả của họ. Đây là một ví dụ thực hiện . Việc tiêm đối tượng cổng đầu ra có vẻ hơi giống với ý tưởng tham số out một lần nữa. Nhưng đó là cách các đối tượng không được hỏi nói với các đối tượng khác những gì họ đã làm.
Khi tôi lần đầu tiên biết về tác dụng phụ, tôi nghĩ về nó giống như tham số đầu ra. Chúng tôi đã được khuyên đừng làm mọi người ngạc nhiên khi có một số công việc xảy ra theo một cách đáng ngạc nhiên, đó là bằng cách không tuân theo return result
quy ước. Bây giờ chắc chắn, tôi biết có một đống vấn đề phân luồng không đồng bộ song song mà tác dụng phụ gây ra nhưng trả lại thực sự chỉ là một quy ước khiến bạn bỏ kết quả lên ngăn xếp để bất cứ điều gì được gọi là bạn có thể tắt nó sau. Đó là tất cả những gì nó thực sự là.
Điều tôi thực sự đang cố gắng hỏi:
Có phải là return
cách duy nhất để tránh tất cả sự khốn khổ của tác dụng phụ đó và nhận được sự an toàn của luồng mà không cần khóa, v.v. Hoặc tôi có thể làm theo , đừng hỏi theo cách hoàn toàn có chức năng?