Здравствуйте, erigami, Вы писали:
E>Забудьте for как страшный сон.
Откуда это пошло? И чем foreach принципиально лучше, он же то же самое делает, нет? А если мне через одну надо перебрать, или по условию, на каждый чих по итератору писать?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, erigami, Вы писали:
E>>Забудьте for как страшный сон. А>Откуда это пошло? И чем foreach принципиально лучше, он же то же самое делает, нет? А если мне через одну надо перебрать, или по условию, на каждый чих по итератору писать?
Вот во что разворачивается foreach (V v in x) embedded-statement:
{
E e = ((C)(x)).GetEnumerator();
try {
V v;
while (e.MoveNext()) {
v = (V)(T)e.Current;
embedded-statement
}
}
finally {
… // Dispose e
}
}
О самом паттерне (в терминологии Gof Enumerator это Iterator):
Паттерн Iterator
Название и классификация паттерна
Итератор — паттерн поведения объектов.
Назначение
Предоставляет способ последовательного доступа ко всем элементам состав-
ного объекта, не раскрывая его внутреннего представления.
Отсюда и делайте выводы — чем же foreach лучше for.
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, erigami, Вы писали:
E>>Забудьте for как страшный сон. А>Откуда это пошло? И чем foreach принципиально лучше, он же то же самое делает, нет?
Товарищ пересел с C++ или
А>А если мне через одну надо перебрать, или по условию
А чем мешает этому foreach
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[2]: Как получить обратный for each?
От:
Аноним
Дата:
11.09.06 12:57
Оценка:
for vs. foreach предлагаю создать сайт на эту тему с доменом типа
for.net, foreach.net, forFans.org, foreachFans.org ...
моё мнение нужен и for и foreach) только foreach не всегда можно использовать (к примеру если нужно менять коллекцию), но у него свои плюсы перед for.
И чем foreach принципиально лучше, он же то же самое делает, нет?
Он принципиально лучше тем, что каждому, кто видит в коде конструкцию foreach очевидно, что она делает.
Ее достаточно трудно использовать с ошибкой.
В то время, как ошибки в использовании конструкции for это классика, синдром плюс минус единица это раз, нужно знать, какое свойство, Count или Length использовать, это два.
А если мне через одну надо перебрать, или по условию, на каждый чих по итератору писать?
Это будет правильно, если создатель коллекции позаботится о типовых методах доступа к ней.
Здравствуйте, pt4h, Вы писали:
P>Назначение P>Предоставляет способ последовательного доступа ко всем элементам состав- P>ного объекта, не раскрывая его внутреннего представления. P>[/q]
P>Отсюда и делайте выводы — чем же foreach лучше for.
И зачем это нужно для работы со списком или массивом? Понятие о "внутреннем представлении" этих объектов мне кажется надуманным, а разработка на каждый чих (например, обратный перебор или перебор с условием) нового итератора — излишней и не продуктивной. А если надо несколько переборов на много элементов с одинаковым условием делать, писать кэширующий итератор или просматривать весь список каждый раз?
Поверьте, я не ругаюсь, я просто не понимаю.
Здравствуйте, erigami, Вы писали:
E>И чем foreach принципиально лучше, он же то же самое делает, нет? E>Он принципиально лучше тем, что каждому, кто видит в коде конструкцию foreach очевидно, что она делает. E>Ее достаточно трудно использовать с ошибкой. E>В то время, как ошибки в использовании конструкции for это классика, синдром плюс минус единица это раз, нужно знать, какое свойство, Count или Length использовать, это два. E>А если мне через одну надо перебрать, или по условию, на каждый чих по итератору писать? E>Это будет правильно, если создатель коллекции позаботится о типовых методах доступа к ней.
E>данное сообщение получено с www.gotdotnet.ru E>ссылка на оригинальное сообщение
Вот и я ща свое БЕ выскажу...
Да ничем foreach пренципиально не лучше, но только если уважеемые госпада вспомнат чем массив от списка отличается?
и если для перебора списка использовать перегруженый индексатор и произвольный доступ через for...
А для массивов использовать итераторы и foreach...
Вот тогда и получится извращение, и дело не в простоте синтаксиса конструкций или еще чего-то там это и есть особенности внутренней организации
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, pt4h, Вы писали:
P>>Назначение P>>Предоставляет способ последовательного доступа ко всем элементам состав- P>>ного объекта, не раскрывая его внутреннего представления. P>>[/q]
P>>Отсюда и делайте выводы — чем же foreach лучше for.
Мне кажется задачи, которые решаются при помощи коллекций, можно разделить на: те, которые решаются стандартными средствами (for, foreach + реализация коллекцией IEnumerable по умолчанию).
те, которые не решаются через стандартные средства.
Ко второму типу задач, например, можно отнести следующую: обход бинарного дерева в обратном порядке. Дерево тоже можно представить как IEnumerable, а способ обхода дерева как IEnumerator. IEnumerator это реализация алгоритма, который можно повторно использовать и при этом не раскрывается внутреннее прелставление.
А тот же обход списка в обратном порядке, как отвечали выше, можно обойти при помощи for.
То есть, не надо на ровном месте писать кучу энумераторов — пишите их там где это Вам удобно.
А>И зачем это нужно для работы со списком или массивом? Понятие о "внутреннем представлении" этих объектов мне кажется надуманным, а разработка на каждый чих (например, обратный перебор или перебор с условием) нового итератора — излишней и не продуктивной. А если надо несколько переборов на много элементов с одинаковым условием делать, писать кэширующий итератор или просматривать весь список каждый раз? А>Поверьте, я не ругаюсь, я просто не понимаю.
Здравствуйте, vitz, Вы писали:
V>Вот и я ща свое БЕ выскажу...
V>Да ничем foreach пренципиально не лучше, но только если уважеемые госпада вспомнат чем массив от списка отличается? V>и если для перебора списка использовать перегруженый индексатор и произвольный доступ через for... V>А для массивов использовать итераторы и foreach... V>Вот тогда и получится извращение, и дело не в простоте синтаксиса конструкций или еще чего-то там это и есть особенности внутренней организации
Что-то никак не пойму чего ты хотел своим сообщением сказать? Можешь расшифровать (для тех, кто в танке)?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как получить обратный for each?
От:
Аноним
Дата:
11.09.06 16:02
Оценка:
Zapolnyai Queue v processe prohoda foreach-em Potom vnutri etogo Queue eshe odin Queue (rekursivno) — poluchitsya mayatnik