Показать сообщение отдельно
  #6 (permalink)  
Старый 23.04.2010, 03:00
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

вопрос был об интерфейсе класса
php way:
class Itertator {
    function valid(){ ... }   // проверяет, есть ли еще элементы
    function current(){ ... }   // возвращает текущий элемент
    function next(){ ... }   // переходим к следующему и возвращаем его
}

используем, например, так:
for( $i=new Iterator(); $i->valid(); $i->next() )
    ... $i->current() ...

но так теряются возвращаемые значения ($i->next() возвращает следующий). Поэтому я бы сделал, чтобы он возвращал текущий и переходил к следующему. А current сделал бы через next, т.е. созраняем состояние, получаем с помощью next текущий, и восстанавливаем состояние (позицию), чтобы не дублировать код

java way:
class Iterator {
    function hasNext(){ ... }   // проверяем, есть ли еще элементы
    function next(){ ... }   // переходим к следующему и возвращаем его
}

использование:
while( i.hasNext() )
    ... i.next() ...

по сравнению с php-вариантом, не теряются значения и не надо реализовывать current через next

как бы сделали вы? Или прочие другие мысли...

Последний раз редактировалось x-yuri, 23.04.2010 в 03:03.
Ответить с цитированием