Pull to refresh

Comments 5

Вы предлагаете примеры по использованию массива в качестве итератора — и при этом применяете функции которые несовместимы с итераторами.

Мне казалось что общепринятый тайпхинт это @var TypeOfElеment[]

извиняюсь за тупой вопрос, а зачем переизобретать списки и итераторы, если встроенные массивы все это прекрасно имплементируют и встроенные функции работают с любым массивом как угодно — хочешь стек — пожалуйста array_pop/push, хочешь очередь — array_shift/unshift/push, нужен итератор — вот foreach, хочешь можно массив передать по ссылке и т.д.?

или эти все слои абстракций наяриваются ради проверки типов, а я просто застрял в php5?

эти слои абстракций используются для сокрытия реализации коллекции. если код работает с интерфейсом, в любой момент можно написать другую реализацию, где элементы могут браться не из массива, а например из базы сразу.


при этом клиентскому коду будет все равно, т.к. он работает с чем-то, что реализует интерфейс Iterable, например

Хм. В моём понимании пользовательский класс коллекции — это класс описывающий набор однородных структур данных и позволяющий осуществить доступ к ним по средствам итерирования экземпляра класса. То есть, это класс в первую очередь реализующий интерфейс Iterator или IteratorAggregate.


Вы делаете акцент на инкапсуляции операций map/reduce и лишь в самом конце упоминаете итерирование. Каждая ли коллекция у вас является итератором? И если нет, то как вы осуществляете доступ к данным в коллекции?


Вообще, у нас похоже несколько разный подход к разработке. Я не часто работаю с обычными массивами, чаще с набором объектов. Я не припомню кейсов в которых мне нужно было бы фильтровать данные на клиенте. Обычно данные фильтруются на этапе извлечения их из хранилища. У нас коллекции чаще всего используется для потокового чтения или записи.

Sign up to leave a comment.