Tôi đang có một cuộc tranh luận với bạn tôi về việc liệu hai thực tiễn này chỉ là hai mặt của cùng một đồng tiền, hay liệu một thực sự tốt hơn.
Chúng ta có một hàm lấy tham số, điền vào một thành viên của nó và sau đó trả về nó:
Item predictPrice(Item item)
Tôi tin rằng khi nó hoạt động trên cùng một đối tượng được truyền vào, không có điểm nào xảy ra để trả lại vật phẩm. Trong thực tế, nếu có bất cứ điều gì, từ quan điểm của người gọi, nó sẽ gây nhầm lẫn vì bạn có thể mong đợi nó trả lại một mặt hàng mới mà nó không có.
Ông tuyên bố rằng nó không có gì khác biệt, và thậm chí sẽ không có vấn đề gì nếu nó đã tạo ra một Vật phẩm mới và trả lại nó. Tôi hoàn toàn không đồng ý, vì những lý do sau:
Nếu bạn có nhiều tham chiếu đến mục được truyền vào (hoặc con trỏ hoặc bất cứ thứ gì), thì nó phân bổ một đối tượng mới và trả lại nó có tầm quan trọng quan trọng vì các tham chiếu đó sẽ không chính xác.
Trong các ngôn ngữ không được quản lý bộ nhớ, hàm phân bổ một thể hiện mới xác nhận quyền sở hữu bộ nhớ và do đó chúng ta sẽ phải thực hiện một phương thức dọn dẹp được gọi tại một số điểm.
Phân bổ trên heap có khả năng tốn kém, và do đó, điều quan trọng là liệu hàm được gọi có làm điều đó hay không.
Do đó, tôi tin rằng nó rất quan trọng để có thể nhìn thấy thông qua một chữ ký phương thức cho dù nó sửa đổi một đối tượng hay phân bổ một đối tượng mới. Kết quả là, tôi tin rằng khi hàm chỉ sửa đổi đối tượng được truyền vào, chữ ký sẽ là:
void predictPrice(Item item)
Trong mọi cơ sở mã (được thừa nhận là cơ sở mã C và C ++, không phải Java là ngôn ngữ chúng tôi đang làm việc), tôi đã làm việc với, phong cách trên về cơ bản đã được tuân thủ và được các lập trình viên giàu kinh nghiệm hơn tuân thủ. Ông tuyên bố rằng kích thước mẫu của các cơ sở mã và đồng nghiệp của tôi là nhỏ so với tất cả các cơ sở mã và đồng nghiệp có thể, và do đó kinh nghiệm của tôi không phải là chỉ số thực sự về việc liệu ai có vượt trội hay không.
Vậy, có suy nghĩ gì không?
Item
có class Item ...
và không typedef ...& Item
, địa phương item
đã là một bản sao