"Số lượng đối số lý tưởng cho một hàm là 0" là hoàn toàn sai. Số lượng đối số lý tưởng là chính xác số lượng cần thiết để cho phép chức năng của bạn không có hiệu ứng phụ. Ít hơn thế và bạn không cần thiết phải làm cho các chức năng của mình không trong sạch, do đó buộc bạn phải tránh xa hố thành công và leo lên nỗi đau. Đôi khi "chú Bob" được chú ý với lời khuyên của ông. Đôi khi anh ấy sai một cách ngoạn mục. Lời khuyên không đối số của anh ấy là một ví dụ về sau này
( Nguồn: bình luận của @David Arno dưới một câu hỏi khác trên trang web này )
Nhận xét đã đạt được số lượng ngoạn mục 133 lần nâng cấp, đó là lý do tại sao tôi muốn chú ý hơn đến giá trị của nó.
Theo như tôi biết, có hai cách riêng biệt trong lập trình: lập trình chức năng thuần túy (nhận xét này là gì đáng khích lệ) và nói, đừng hỏi (điều này thỉnh thoảng cũng được đề xuất trên trang web này). AFAIK hai nguyên tắc này về cơ bản không tương thích, gần như đối lập với nhau: chức năng thuần túy có thể được tóm tắt là "chỉ trả về giá trị, không có tác dụng phụ" trong khi nói, đừng hỏi có thể tóm tắt là "không trả lại bất cứ điều gì," chỉ có tác dụng phụ ". Ngoài ra, tôi cảm thấy bối rối vì tôi nghĩ rằng, đừng hỏi được coi là cốt lõi của mô hình OO trong khi funcitons thuần túy được coi là cốt lõi của mô hình chức năng - bây giờ tôi thấy các hàm thuần túy được đề xuất trong OO!
Tôi cho rằng các nhà phát triển có thể nên chọn một trong những mô hình này và tuân theo nó? Vâng, tôi phải thừa nhận tôi không bao giờ có thể mang theo mình. Thông thường, nó có vẻ thuận tiện cho tôi để trả lại một giá trị và tôi thực sự không thể thấy làm thế nào tôi có thể đạt được những gì tôi muốn đạt được chỉ với các tác dụng phụ. Thông thường, nó có vẻ thuận tiện đối với tôi khi có tác dụng phụ và tôi thực sự không thể thấy làm thế nào tôi có thể đạt được những gì tôi muốn đạt được chỉ bằng cách trả lại giá trị. Ngoài ra, đôi khi (tôi đoán điều này thật kinh khủng) Tôi có phương pháp làm cả hai.
Tuy nhiên, từ 133 lần nâng cấp này, tôi cho rằng lập trình chức năng thuần túy hiện đang "chiến thắng" vì nó trở thành một sự đồng thuận mà nó vượt trội để nói, đừng hỏi. Điều này có đúng không?
Do đó, trên ví dụ về trò chơi cưỡi mô hình này, tôi đang cố gắng thực hiện : Nếu tôi muốn đưa nó phù hợp với mô hình chức năng thuần túy - LÀM THẾ NÀO?!
Nó có vẻ hợp lý với tôi để có một trạng thái chiến đấu. Vì đây là một trò chơi theo lượt, tôi giữ các trạng thái chiến đấu trong từ điển (nhiều người chơi - có thể có nhiều trận chiến được chơi bởi nhiều người chơi cùng một lúc). Bất cứ khi nào người chơi đến lượt, tôi gọi một phương thức thích hợp ở trạng thái chiến đấu (a) sửa đổi trạng thái cho phù hợp và (b) trả lại các cập nhật cho người chơi, được nối tiếp thành JSON và về cơ bản chỉ cho họ biết những gì vừa xảy ra trên bảng. Điều này, tôi cho rằng, là vi phạm trắng trợn các nguyên tắc CẢ và đồng thời.
OK - Tôi có thể tạo một phương thức TRẢ LẠI trạng thái chiến đấu thay vì sửa đổi nó tại chỗ nếu tôi thực sự muốn. Nhưng! Sau đó tôi có phải sao chép mọi thứ trong trạng thái chiến đấu một cách không cần thiết chỉ để trả lại trạng thái hoàn toàn mới thay vì sửa đổi nó tại chỗ không?
Bây giờ có lẽ nếu di chuyển là một cuộc tấn công, tôi có thể trả lại một nhân vật được cập nhật HP không? Vấn đề là, nó không đơn giản: luật chơi, di chuyển có thể và thường sẽ có nhiều hiệu ứng hơn là chỉ loại bỏ một phần HP của người chơi. Ví dụ: nó có thể tăng khoảng cách giữa các ký tự, áp dụng các hiệu ứng đặc biệt, v.v.
Có vẻ đơn giản hơn nhiều đối với tôi khi chỉ sửa đổi trạng thái tại chỗ và trả lại các cập nhật ...
Nhưng làm thế nào một kỹ sư giàu kinh nghiệm sẽ giải quyết điều này?