Centaur
16:44 06-02-2003
Кодируя итератор, сделай, чтобы его bool Next(...) возвращал false не на последнем элементе, а за ним.
Иначе кто-нибудь забудет обработать последний элемент:
MyElement element;
MyEnum* enum = new MyEnum(...);
while (enum->Next(&element))
{
  // process element
}
Комментарии:
Anafay
17:22 11-02-2003
Именно поэтому не рекомендуется делать функции, которые совершают какие-то действия, кроме возврата значения:

from
   i:=my_collection.get_new_iterator
   -- Или, если уже есть, i.start
until
   i.is_off
loop
   do_something(i.item)
   i.next
end


В таком варианте подобная ошибка невозможна.
Centaur
19:05 11-02-2003
А вот так красивее…
Perl:
foreach $element (@collection) {
  statement;
}
PHP:
foreach ($collection as $element) {
  statement;
}
C#:
foreach (ElementType element in collection) {
  statement;
}

отредактировано: 11-02-2003 19:06 - Centaur

Anafay
19:54 11-02-2003
А вот так еще лучше (все тот же Eiffel):
my_collection.do_all(agent do_something(?))

отредактировано: 11-02-2003 19:55 - Anafay