Prawdopodobnie nie jest to coś, co będziesz głęboko rozumieć, dopóki nie będziesz pracować nad dużym projektem oprogramowania przez kilka lat. Wiele nowych kierunków informatycznych udzieli odpowiedzi za pomocą wszystkich właściwych słów (hermetyzacja, funkcjonalność z danymi i łatwość konserwacji), ale niewielu naprawdę zrozumie, dlaczego warto mieć to wszystko.
Przeanalizujmy kilka przykładów.
- Jeśli zwracane są tablice, wówczas albo wszystkie wartości muszą zostać obliczone z góry, albo trzeba zwrócić wiele małych wartości, z których można zbudować bardziej złożone wartości.
Pomyśl o metodzie API, która zwraca listę postów WordPress. Wszystkie te posty mają autorów, autorzy mają nazwiska, adresy e-mail, a może nawet profile z ich biografiami.
Jeśli zwracasz wszystkie posty w tablicy, musisz ograniczyć się do zwracania tablicy identyfikatorów postów:
[233, 41, 204, 111]
lub zwraca ogromną tablicę, która wygląda mniej więcej tak:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
Pierwszy przypadek zwracania listy identyfikatorów nie jest dla Ciebie zbyt pomocny, ponieważ wtedy musisz wykonać wywołanie API dla każdego identyfikatora, aby uzyskać informacje o tym poście.
Drugi przypadek będzie wymagał o wiele więcej informacji niż potrzebujesz przez 90% czasu i będzie wykonywał znacznie więcej pracy (zwłaszcza jeśli którekolwiek z tych pól jest bardzo skomplikowane).
Z drugiej strony obiekt może zapewnić dostęp do wszystkich potrzebnych informacji, ale jeszcze ich nie pobrał. Określanie wartości pól można wykonać leniwie (to znaczy, gdy wartość jest potrzebna, a nie wcześniej) podczas korzystania z obiektu.
- Tablice udostępniają więcej danych i możliwości niż zamierzano
Wróć do przykładu zwracanej masowej tablicy. Teraz ktoś może prawdopodobnie zbudować aplikację, która iteruje po każdej wartości w tablicy postów i drukuje ją. Jeśli API zostanie zaktualizowane, aby dodać tylko jeden dodatkowy element do tej tablicy postów, kod aplikacji ulegnie awarii, ponieważ będzie drukować nowe pole, którego prawdopodobnie nie powinien. Jeśli kolejność elementów w tablicy wiadomości zwróconej przez interfejs API ulegnie zmianie, spowoduje to również uszkodzenie kodu aplikacji. Zatem zwrócenie tablicy tworzy wszelkiego rodzaju możliwe zależności, których obiekt by nie utworzył.
Obiekt może zawierać w sobie informacje, które pozwolą mu zapewnić użyteczną funkcjonalność. Na przykład obiekt postu może być wystarczająco inteligentny, aby zwrócić poprzednie lub następne posty. Tablica nigdy nie mogłaby tego za Ciebie zrobić.
Wszystkie wymienione wyżej zalety obiektów pomagają stworzyć bardziej elastyczny system.
count()lubarray_*()funkcji na nich (przynajmniej w odniesieniu do przechowywania / zwracania danych klucza => wartości). Wydaje się, że nikt o tym nie wspomina, czy czegoś mi brakuje?