Đây có lẽ không phải là thứ bạn sẽ hiểu sâu cho đến khi bạn đã làm việc trong một dự án phần mềm lớn trong vài năm. Nhiều chuyên ngành khoa học máy tính mới sẽ cung cấp cho bạn câu trả lời với tất cả các từ phù hợp (đóng gói, chức năng với dữ liệu và khả năng bảo trì) nhưng ít người thực sự hiểu tại sao tất cả những thứ đó lại tốt.
Hãy xem qua một vài ví dụ.
- Nếu các mảng được trả về, thì tất cả các giá trị cần được tính toán trước hoặc nhiều giá trị nhỏ cần được trả về mà bạn có thể xây dựng các giá trị phức tạp hơn từ đó.
Hãy nghĩ về một phương thức API trả về danh sách các bài đăng trên WordPress. Các bài viết này đều có tác giả, tác giả có tên, địa chỉ e-mail, thậm chí có thể là lý lịch kèm theo tiểu sử của họ.
Nếu bạn đang trả lại tất cả các bài đăng trong một mảng, bạn sẽ phải tự giới hạn mình trong việc trả về một mảng ID bài đăng:
[233, 41, 204, 111]
hoặc trả về một mảng lớn trông giống như sau:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
Trường hợp đầu tiên trả về danh sách các ID không hữu ích lắm đối với bạn vì sau đó bạn cần thực hiện lệnh gọi API cho từng ID để nhận một số thông tin về bài đăng đó.
Trường hợp thứ hai sẽ kéo nhiều thông tin hơn bạn cần 90% thời gian và làm nhiều công việc hơn (đặc biệt nếu bất kỳ trường nào trong số đó rất phức tạp để xây dựng).
Mặt khác, một đối tượng có thể cung cấp cho bạn quyền truy cập vào tất cả thông tin bạn cần, nhưng chưa thực sự lấy được thông tin đó. Việc xác định giá trị của các trường có thể được thực hiện một cách lười biếng (nghĩa là khi giá trị là cần thiết chứ không phải trước) khi sử dụng một đối tượng.
- Mảng hiển thị nhiều dữ liệu và khả năng hơn dự định
Quay lại ví dụ về mảng lớn được trả về. Bây giờ ai đó có thể xây dựng một ứng dụng lặp lại từng giá trị bên trong mảng bài đăng và in nó. Nếu API được cập nhật để chỉ thêm một phần tử bổ sung vào mảng bài đăng đó thì mã ứng dụng sẽ bị hỏng vì nó sẽ in một số trường mới mà có lẽ không nên. Nếu thứ tự của các mục trong mảng bài đăng mà API trả về thay đổi, điều đó cũng sẽ phá vỡ mã ứng dụng. Vì vậy, việc trả về một mảng sẽ tạo ra tất cả các loại phụ thuộc có thể có mà một đối tượng sẽ không tạo ra.
Một đối tượng có thể chứa thông tin bên trong nó sẽ cho phép nó cung cấp chức năng hữu ích cho bạn. Ví dụ, một đối tượng bài đăng có thể đủ thông minh để trả về các bài đăng trước đó hoặc tiếp theo. Một mảng không thể làm điều đó cho bạn.
Tất cả những lợi ích của các đối tượng nêu trên giúp tạo ra một hệ thống linh hoạt hơn.
count()
hoặc cácarray_*()
chức năng trên chúng (ít nhất là liên quan đến việc lưu trữ / trả về dữ liệu khóa => giá trị). Dường như không ai đề cập đến nó, hoặc tôi đang thiếu một cái gì đó?