Javascript.RU

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

Объект-итератор
имеется, например, журнал ошибок. Нужно написать объект-итератор, с помощью которого можно было бы последовательно просмотривать сообщения (от первого к последнему). При этом нельзя терять возвращаемые сообщения. Какой бы вы предложили интерфейс? Язык программирования - не имеет значения

почему нельзя терять сообщения: для некоторых сообщений используется krumo, который при первом вызове, кроме результата выводит css+js
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2010, 20:40
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
Какой бы вы предложили интерфейс? Язык программирования - не имеет значения
Ну это смотря под какую среду пишешь. Или подразумевался веб?

Последний раз редактировалось B~Vladi, 22.04.2010 в 23:17.
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2010, 22:14
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

пока что не знаю, как среда может повлиять. Предложи несколько вариантов

т.е. вопрос в интерфейсе итератора с указанными ограничениями. Что конкретно он будет итерировать не так важно
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2010, 23:15
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
пока что не знаю, как среда может повлиять.
Если сравнивать браузер и DirectX, то тут преимущества очевидны. Что касается DirectX, то это уже Си.
Ответить с цитированием
  #5 (permalink)  
Старый 23.04.2010, 01:38
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

искренне не понимаю ваш вопрос
[telepatemode]
в STL вам подошел бы любой контейнер последовательности, со свзанным с ним последовательным итератором
[/telepatemode]
[telepatemode=2]
в WEB-е, вам бы подошла база ВСЕХ сообщений, и хранение последнего просмотренного сообщения в сессии.
при это вы всегда можете вернутся к началу(как сессии, так и вообще всех сообщений), и начать вновь последовательный(по uid сообщений) просмотр их
[/telepatemode]
Ответить с цитированием
  #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.
Ответить с цитированием
  #7 (permalink)  
Старый 23.04.2010, 03:23
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

что вам мешает организовать ваш JAVA-style, в PHP?

вы знакомы с итераторами в STL?
они спокойно позволяют работать способами схожими с обоими вашими способами.
думаю вам это поможет
Код:
vector<int> arr;
arr.push_back(3);//добавление элемента в конец
...
arr.push_back(5);//добавление элемента в конец

//способ 1
for(vector<int>::iterator i=arr.begin();i!=arr.end();i++)
	{
	cout<<*i;
	}
//способ 2
vector<int>::iterator i=arr.begin();
while(i!=arr.end())
	{
	cout<<*i;
	i++;
	}
Ответить с цитированием
  #8 (permalink)  
Старый 23.04.2010, 09:25
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Gvozd
что вам мешает организовать ваш JAVA-style, в PHP?
ничего

Сообщение от Gvozd
вы знакомы с итераторами в STL?
они спокойно позволяют работать способами схожими с обоими вашими способами.
php-вариант - это по сути и есть STL-вариант

C++-вариант... Опять же по сути отличие в том, что итератор здесь - внешняя сущность, указатель. В остальном, это php-вариант. И это отличие никак не влияет на озвученные мной проблемы: потеря элементов "массива" и дублирование логики в current/next

подробнее о проблемах:
1) выводим журнал, но для некоторых сообщений используем внешнюю библиотеку, которая при первом использовании вместе с результатом возвращает немного css+js. Т.е. сообщения "на лету" преобразуются и надо не потерять первое преобразованное с помощью библиотеки сообщение
2) одно сообщение на страничке не равно одному сообщению в журнале и тем более одной строке в журнале (текстовый файл), т.е. переход к следующему сообщению это не i++, поэтому я бы предпочел реализовать переход к следующему и получение текущего значения в одном методе

p.s. наверное, плохо объяснил проблему... или это ни разу не проблема...
p.p.s. после того как четко объяснил проблему, стало понятно, что java-вариант в данном случае лучше подходит. Хм, где-то читал, что пытаясь объяснить кому-то проблему, сам лучше ее понимаешь
Ответить с цитированием
  #9 (permalink)  
Старый 30.04.2010, 12:48
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

p.p.p.s. если вынести вывод информации из итератора, первая проблема исчезает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объект как свойство объекта Cooskon Общие вопросы Javascript 6 16.02.2010 21:41
Подскажите как узнать существует ли объект в памяти? Yazla Общие вопросы Javascript 2 05.11.2009 20:05
Объект при загрузке страницы и после операций над ним fact jQuery 7 20.04.2009 22:02
Получить объект содержащий caller no_alex Общие вопросы Javascript 14 20.03.2009 21:37
Получение ссылки на объект из метода Octane Общие вопросы Javascript 7 21.08.2008 15:09