Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Итераторы в Delphi   Найти похожие ветки 

 
Cyrax ©   (2006-10-06 00:32) [0]

Как их реализовать?


 
Ketmar ©   (2006-10-06 00:34) [1]

аккуратно.


 
Cyrax ©   (2006-10-06 00:37) [2]

Ещё как...


 
Ketmar ©   (2006-10-06 00:49) [3]

ты это... задачу давай. или тебе универсальные надо? тогда тут без нормальных сопроцессов не обойдёшься.

(больная идея: fibers? не пинать -- сам знаю, что больной на голову %-)


 
Cyrax ©   (2006-10-06 01:03) [4]

А ещё лучше ссылочку, где можно скачать компонент для работы с итераторами... :)/

1. Есть data типа Pointer. Надо пробежаться по n первым элементам типа, например, integer, лежащим по этому указателю.
Желательно без создания дополнительного указателя типа Integer... (*)
Желательно всё в цикле for (а вот это шутка)...

2. Надо получить i-й элемент какого-либо типа по указателю data типа Pointer, используя как можно меньше символов... Желательно 2-3...
(*) в силе.


 
Ketmar ©   (2006-10-06 01:20) [5]

вряд ли так просто всё получится...


 
Celades   (2006-10-06 01:23) [6]

А имеют ли они вообще в Delphi смысл, при отсутсвии в нем парадигмы обобщенного программирования на должном уровне?


 
vuk ©   (2006-10-06 01:54) [7]

А чего здесь сложного-то? Приводим data к типу "указатель на массив элементов нужного типа" и по индексу берем значение. В общем виде i-й элемент массива любо типа получается добавлением к адресу начала массива i, умноженного на размер элемента.

Правда, это я итераторами не называл бы... :)


 
Джо ©   (2006-10-06 03:46) [8]

> [4] Cyrax ©   (06.10.06 01:03)
> 1. Есть data типа Pointer.

Выбросить :)

Переводи в классы и списки классов. Кстати, в BDS2006 можно реализовать (синтаксически) итератор для употребления в новой конструкции for ... in.


 
MBo ©   (2006-10-06 06:19) [9]

можно посмотреть библиотеки DeCal/SDL

Однако для задач в [4] итераторы не нужны.


 
vidiv ©   (2006-10-06 09:52) [10]

Что такое итераторы?


 
Cyrax ©   (2006-10-06 12:06) [11]

vuk ©   (06.10.06 01:54) [7]
Правда, это я итераторами не называл бы... :)

Сойдёт и так...

Джо ©   (06.10.06 03:46) [8]
Переводи в классы и списки классов.

В данном случае это крайне неэффективно...

vidiv ©   (06.10.06 09:52) [10]
Что такое итераторы?

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


 
vuk ©   (2006-10-06 12:24) [12]

to Cyrax ©   (06.10.06 12:06) [11]:
>для управления контейнерами
Нет. Для перебора элементов.


 
Cyrax ©   (2006-10-06 23:14) [13]

vuk ©   (06.10.06 12:24) [12]
> to Cyrax ©   (06.10.06 12:06) [11]:
>>для управления контейнерами
>Нет. Для перебора элементов.

Нет, всё-таки для управления, поскольку перебор - это всего лишь частный случай использования итераторов...


 
default ©   (2006-10-07 00:07) [14]

посмотри как сделаны итераторы в .NET, например, в класс Stack, ArrayList, Quene,...
итераторы там просто перебор элементов


 
default ©   (2006-10-07 00:11) [15]

итератора дословно - перечислитель, ни о каком УПРАВЛЕНИИ речи не идёт


 
default ©   (2006-10-07 01:22) [16]

Удалено модератором
Примечание: Личная переписка. Чат/почта/аська


 
Джо ©   (2006-10-07 02:27) [17]

> [13] Cyrax ©   (06.10.06 23:14)
> vuk ©   (06.10.06 12:24) [12]
> > to Cyrax ©   (06.10.06 12:06) [11]:
> >>для управления контейнерами
> >Нет. Для перебора элементов.
>
> Нет, всё-таки для управления, поскольку перебор - это всего
> лишь частный случай использования итераторов...

Как раз наоборот, вроде. :) Перебор, собственно, и есть главная функция итераторов. А "управляем" мы и ими или нет — дело десятое...


 
vuk ©   (2006-10-07 11:45) [18]

to Cyrax:
Возьмите книжку какую-нибудь, ну хотя бы Буча и посмотрите, как там итераторы описаны.
Кстати, у Буча выделены два типа итераторов - активные и пассивные. Активные - это то, что используется чаще всего(с набором методов/свойств в духе IsDone-Next-Reset-Current). Пассивные - это когда клиент сам перебором не упарвляет, а только передает итератору функцию, которую он вызывает для каждого элемента контейнера. Если кто помнит, то именно так были устроены методы-итераторы в коллекциях TurboVision/OWL.


 
Cyrax ©   (2006-10-09 22:34) [19]

Удалено модератором
Примечание: Личная переписка. Чат/почта/аська


 
Kolan ©   (2006-10-09 22:35) [20]


> Cyrax ©   (06.10.06 00:32)

До итератора я еще не дочитал, но там же есть UML диаграммы на все паттерны.


 
Юрий Зотов ©   (2006-10-09 23:11) [21]

Аффигеть...

Простейший цикл... простейший проход по массиву/списку/коллекции объектов... а как много "хвилософфии"...

Аффигеть....

PS
После знакомства с Джавой не могу отделаться от ощущения, что мир катится к ламеризму.

Не стану утверждать, что это ощущение  безусловно верно, но все же плдтверждения тому есть.

Это еще одно?


 
Kolan ©   (2006-10-09 23:12) [22]


> После знакомства с Джавой

Шас придет iZEN :)


 
Cyrax ©   (2006-10-09 23:20) [23]

Юрий Зотов ©   (09.10.06 23:11) [21]
Аффигеть...
Простейший цикл... простейший проход по массиву/списку/коллекции объектов... а как много "хвилософфии"...
Аффигеть...
После знакомства с Джавой не могу отделаться от ощущения, что мир катится к ламеризму.

Я просто тащщусь от такого запала... (в хорошем смысле, конечно)

Kolan ©   (09.10.06 23:12) [22]
> После знакомства с Джавой
Шас придет iZEN :)

Давай его сюда. Щас споём... (ну, :))


 
Джо ©   (2006-10-09 23:20) [24]

> [21] Юрий Зотов ©   (09.10.06 23:11)
> Аффигеть...
>
> Простейший цикл... простейший проход по массиву/списку/коллекции
> объектов... а как много "хвилософфии"...

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


 
jack128 ©   (2006-10-09 23:26) [25]

Юрий Зотов ©   (09.10.06 23:11) [21]
с другой сторому принцип "Keep It Simple, Stupid" никто не отменял. А  людей, которые понимают его - не так и много. Вот и приходится принудительно заставлять народ следовать ему...


 
Ketmar ©   (2006-10-09 23:30) [26]

>[25] jack128(c) 9-Oct-2006, 23:26
>принцип "Keep It Simple, Stupid"
хорош, когда
а) его не навязывают;
б) оно-таки simple.

%-)


 
jack128 ©   (2006-10-09 23:42) [27]

jack128 ©   (09.10.06 23:26) [25]
с другой стороНЫ
естественно

Ketmar ©   (09.10.06 23:30) [26]
а) его не навязывают;

не знаю... Может быть, а может и нет. Например, стиль форматирования я себе навязывал. Точему тут этот фокус не пройдет ?

Ketmar ©   (09.10.06 23:30) [26]
б) оно-таки simple.

ну ты еще скажи, что джава (как язык) - сложна ;-)


 
Джо ©   (2006-10-09 23:43) [28]

> [27] jack128 ©   (09.10.06 23:42)
> Ketmar ©   (09.10.06 23:30) [26]
> б) оно-таки simple.
> ну ты еще скажи, что джава (как язык) - сложна ;-)

Как язык несложна. Но такая муть :)


 
Zeqfreed ©   (2006-10-09 23:57) [29]

> [28] Джо ©   (09.10.06 23:43)

Тсс! Сейчас iZEN прийдет! :)


 
isasa ©   (2006-10-10 00:02) [30]

Долго крепился, но влезу.

Это от того, что при варианте
type *var;  // type var[];
type **var;  // type var[][];
с последующей
var = (type*)calloc(nSize, typeof(type));
...
Ну очень надо помнить nSize в дальнейшем. Что дико раздражает, когда сравниваешь с динамическими массивамив Дельфи. :)


 
Юрий Зотов ©   (2006-10-10 00:06) [31]

> Джо ©   (09.10.06 23:20) [24]

> Ну почему хвилософии?

Потому что "передача параметра процедурного типа, который будет вызываться для каждого элемента коллекции" - это 11 слов.

А "callback" - это 1 слово. Причем придуманное давным-давно.

"Keep It Simple".
:o)

> jack128 ©   (09.10.06 23:26) [25]

> А  людей, которые понимают его - не так и много. Вот и приходится
> принудительно заставлять народ следовать ему...

Вот именно поэтому такое ощущение и сложилось.

"Хищные вещи века"...


 
Джо ©   (2006-10-10 00:08) [32]

> [31] Юрий Зотов ©   (10.10.06 00:06)
> > Джо ©   (09.10.06 23:20) [24]
>
> > Ну почему хвилософии?
>
> Потому что "передача параметра процедурного типа, который
> будет вызываться для каждого элемента коллекции" - это 11
> слов.
>
> А "callback" - это 1 слово. Причем придуманное давным-давно.

А, Вы об этом. Ну, так я это исключительно в описательных целях. Ибо, на разъяснение понятия "колбэк" — как раз и нужно около 11 слов. У кого выйдет больше — я не виноват :)


 
Ketmar ©   (2006-10-10 00:15) [33]

>[30] isasa(c) 10-Oct-2006, 00:02
>type *var;  // type var[];
>type **var;  // type var[][];
>с последующей
>var = (type*)calloc(nSize, typeof(type));
а это и не жаба уже вовсе, на?


 
isasa ©   (2006-10-10 00:20) [34]

Ketmar ©   (10.10.06 00:15) [33]
Угу.
Жаба еще не успела достать.


 
Ketmar ©   (2006-10-10 00:21) [35]

да ладно тебе. не, писал я на ней немного. язык как язык -- в меру глупый, в меру простой. вот библиотеки... это да. %-)


 
isasa ©   (2006-10-10 00:27) [36]

Ketmar ©   (10.10.06 00:21) [35]
вот библиотеки... это да.

Ооо! Это отдельная песня. Мне NetBeans предложил >400 штук и я прозрел и понял, что выбирать долго придется.
Счастливые люди, я их понимаю - JBoss,  остальных на костер :)


 
Юрий Зотов ©   (2006-10-10 00:30) [37]

> Ketmar ©   (10.10.06 00:21) [35]

Даже и в языке - убивает хотя бы обилие скобок. Наследие C ?

if (лог_выражение)...
Мы не в силах распознать лог_выражение и без скобок?

obj.func()
Мы не в силах отличить метод от поля и без скобок?

И т.д. А в итоге 4 и более закрывающие скобки подряд - это норма.

Раздражает.


 
Ketmar ©   (2006-10-10 00:31) [38]

>[37] Юрий Зотов(c) 10-Oct-2006, 00:30
>Даже и в языке - убивает хотя бы обилие скобок. Наследие C?
таки да. специально делали на цэ похожим -- чтобы народ переманивать было проще. %-(


 
jack128 ©   (2006-10-10 00:36) [39]

Ketmar ©   (10.10.06 0:31) [38]
таки да. специально делали на цэ похожим -- чтобы народ переманивать было проще. %-(


ну дык в дельфи же тоже можно писать:
if (a = b)                                                                                     then
 c();
но никто не говорит, что дельфя сишников переманивает :-D


 
Джо ©   (2006-10-10 00:38) [40]

> [39] jack128 ©   (10.10.06 00:36)
> Ketmar ©   (10.10.06 0:31) [38]
> таки да. специально делали на цэ похожим -- чтобы народ
> переманивать было проще. %-(
>
> ну дык в дельфи же тоже можно писать:
> if (a = b)                                              
>                                       then
> c();
> но никто не говорит, что дельфя сишников переманивает :-
> D

А вот делфистов на Це переманить сложнее, ибо
if a = b then
 c;
писать там нельзя :)


 
Джо ©   (2006-10-10 00:39) [41]

А оператор for, который прямо то ли оператор, то ли функция, это всегда (у меня) вызывает маленький взрыв в голове :)


 
Германн ©   (2006-10-10 00:42) [42]


> if (лог_выражение)...
> Мы не в силах распознать лог_выражение и без скобок?
>

К великому моему сожалению знаю и паскаль-компиллятор такой :-)
Хотя он просто недоделанный, имхо. :-(


 
default ©   (2006-10-10 00:49) [43]

Джо ©   (10.10.06 00:39) [41]
сишный for это потенциально адская машина, только обычно она используется в "ангельском" режиме:)


 
Джо ©   (2006-10-10 01:00) [44]

> [43] default ©   (10.10.06 00:49)
> Джо ©   (10.10.06 00:39) [41]
> сишный for это потенциально адская машина, только обычно
> она используется в "ангельском" режиме:)

Это чертовски здорово сказано.


 
vuk ©   (2006-10-10 01:06) [45]

to Юрий Зотов ©   (09.10.06 23:11) [21]:
>Простейший цикл... простейший проход по массиву/списку/коллекции
>объектов... а как много "хвилософфии"...
Хвилософия, она иной раз полезная бывает. Имея итератор в качестве абстракции можно реализовать эффективный перебор коллекций (не имею в виду TCollection), устроенных совершенно по-разному, например масив и список(настоящий, а не TList). Структуры данных совершенно разные, методы доступа тоже, но итератор позволяет делать перебор в клиентском коде совершенно одинаково. Code Reuse, однако. :)


 
Ketmar ©   (2006-10-10 01:41) [46]

сишный фор -- это тяжёлое наследие макросов и комбайнов. %-)


 
Zeqfreed ©   (2006-10-10 07:23) [47]

> [46] Ketmar ©   (10.10.06 01:41)

Зато, с ним порою можно проделывать презабавнейшие вещи :)
Конечно, если потом пытаться разобрать чужой код с такими извратами, то начинаешь потихоньку ненавидеть автора такого синтаксиса.

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


 
Cyrax ©   (2006-10-10 08:30) [48]

Насчёт сишного оператора for. Реализован максимально гибко и качественно.
А вот "извраты", которые с ним можно сотворить - это всё на совести извращенцев. Нам же предоставляется гибкий инструмент, который не обязан быть урезанным (по современным меркам) только из-за того, что с ним можно извращаться.

(Кстати, подобное мнение есть и относительно C#: "Трудности новичков нельзя рассматривать когда мы говорим о профессиональных прграммистах, это похоже на принятие закона, что все велосипеды должны быть трехколесными, потому что маленьким детям трудно без них ездить". Доля правдя в этом есть. Есть и такое мнение: "Безусловно, победит подход C#. Это объективный процесс, который не остановить. Низкоуровневые оптимизации уходят из рабочего процесса программистов". И в этом есть доля правды, хотя предпочитаю переход на C#-подобные средства только после изучения этих "низкоуровневых оптимизаций".)

Что касается паскаля, то его for откровенно слаб в этом отношении (опять-таки по современным меркам)...


 
default ©   (2006-10-10 09:03) [49]

ну что ты

> Итераторы в Delphi
> Как их реализовать?

выполнил задуманное?


 
Cyrax ©   (2006-10-10 09:18) [50]

default ©   (10.10.06 09:03) [49]
выполнил задуманное?

Которое ето - да, то - ещё нет...


 
default ©   (2006-10-10 09:24) [51]

Cyrax ©   (10.10.06 09:18) [50]

> Которое ето - да, то - ещё нет...

я про которое ето
покажи что накодил(


 
Cyrax ©   (2006-10-10 09:27) [52]

Ето - совсем не итераторы. Итераторы я не кодил...
То - это уже что-то. Покажу, когда закончу...


 
Юрий Зотов ©   (2006-10-10 10:14) [53]

> vuk ©   (10.10.06 01:06) [45]

> Хвилософия, она иной раз полезная бывает.

Бывает, Леш. Но только тогда, когда она не из пальца высосана и не за уши притянута. Иными словами, когда она введена для дела, а не выпендрежа лишь ради - такое тоже бывает.

> Имея итератор в качестве абстракции можно реализовать эффективный
> перебор коллекций (не имею в виду TCollection), устроенных совершенно
> по-разному, например масив и список(настоящий, а не TList). Структуры
> данных совершенно разные, методы доступа тоже, но итератор позволяет
> делать перебор в клиентском коде совершенно одинаково.

Леш, вот эти 2 строки дают ровно то же самое (использую синтаксис Delphi, но это не значит, что имеется в виду только она):
property Count: integer...
property Items[Index: integer]: TObject... ;


Ты прекрасно понимаешь, что на любом ОО-языке не представляет абсолютно никакой проблемы создать внутри любого класса-списка (массива, коллекции...) некий публичный подкласс-итератор, унаследованный от стандартного предка и имеющий стандартные методы (First, Last, Next, Prev, HasNext, HasPrev и т.д.).

Но... вот эти 2 две простейшие строчки дают ровно то же самое. И без всяких классов-посредников, на фиг в данном случае не нужных.

Keep It Simple, понимаешь? Это значит, что не надо притягивать философию за уши и высасывать ее из пальца. Лучше оставить ее для более серьезных вещей, где она действительно нужна. Иначе она становится "хвилософфией".


 
vuk ©   (2006-10-10 10:33) [54]

to Cyrax ©   (10.10.06 08:30) [48]:
>Что касается паскаля, то его for откровенно слаб в этом отношении (опять-
>таки по современным меркам)...
В паскале for реализует цикл со счетчиком. Все. Никаких других функций и заморочек. Хочется другого - используется другой вид цикла.

to Юрий Зотов ©   (10.10.06 10:14) [53]:
>Но только тогда, когда она не из пальца высосана и не за уши притянута.
Бывает. Что лично я в данном конкретном случае делал бы, я уже писал в своем ответе автору ветки.

>Но... вот эти 2 две простейшие строчки дают ровно то же самое.
Оно конечно да. Только вот не для всех структур данных индексный метод доступа эффективен, я специально списочные структуры упоминал.


 
Sandman29 ©   (2006-10-10 10:49) [55]

Юрий Зотов

Даже ненависть к Java не поможет реализовать Iterator с помощью только Count и Items. В каких случаях? Сами догадайтесь, чтобы не пришлось читать LMD.

Вот Вам подсказка.
Interface Iterator<E>
boolean hasNext()        Returns true if the iteration has more elements. 
E next()           Returns the next element in the iteration. 
void remove()           Removes from the underlying collection the last element returned by the iterator (optional operation)


 
Игорь Шевченко ©   (2006-10-10 11:25) [56]

Юрий Зотов ©   (09.10.06 23:11) [21]


> После знакомства с Джавой не могу отделаться от ощущения,
>  что мир катится к ламеризму.


А мужики-то и не знают...Пишут себе. Потихоньку на C# с его скобками переползают, катятся туда же.

Дядьки там буржуйские всякие паттерны придумывают - нафига, спрашивается ?


 
pasha_golub ©   (2006-10-10 12:50) [57]

Хочу видеть пример итератора, аж кипятком писаю.


> Sandman29 ©   (10.10.06 10:49) [55]


> Даже ненависть к Java не поможет реализовать Iterator с
> помощью только Count и Items.

Я - ламер! Можно мне ответ на этот вопрос увидеть?


 
Sandman29 ©   (2006-10-10 12:52) [58]

pasha_golub ©   (10.10.06 12:50) [57]

Конечно, можно. Задайся вопросом - всегда ли известен Count.


 
pasha_golub ©   (2006-10-10 12:55) [59]


> Sandman29 ©   (10.10.06 12:52) [58]
>
> pasha_golub ©   (10.10.06 12:50) [57]
>
> Конечно, можно. Задайся вопросом - всегда ли известен Count.
>

При нормальной проектировке всегда. Ведь при добавлении итема, я могу увеличивать счетчик количества, а при удалении (будь-то даже стек или очередь) уменьшать.


 
Sandman29 ©   (2006-10-10 12:58) [60]

pasha_golub ©   (10.10.06 12:55) [59]

А при чем здесь очередь? Это же универсальный итератор.
Например, SELECT FIRST 20 FROM, зачем SELECT NEXT 20 и т.д. Заранее неизвестно, на каком селекте будет облом и сколько именно записей вернется.


 
default ©   (2006-10-10 13:08) [61]

+[60]
да взять хотя бы текстовый файл и его итерирование по строкам
чтобы узнать число строк надо прочитать весь файл, что ни в какие ворота не лезет


 
Игорь Шевченко ©   (2006-10-10 13:16) [62]

pasha_golub ©   (10.10.06 12:55) [59]

Не всегда. Например, при выборке из базы данных


 
pasha_golub ©   (2006-10-10 13:31) [63]

Значит я не понимаю сути итератора. :-)


 
Игорь Шевченко ©   (2006-10-10 13:32) [64]

pasha_golub ©   (10.10.06 13:31) [63]


> Значит я не понимаю сути итератора


Читай и воздастся тебе по чтению твоему.


 
pasha_golub ©   (2006-10-10 13:39) [65]


> Игорь Шевченко ©   (10.10.06 13:32) [64]


> Читай и воздастся тебе по чтению твоему.
>

В каком источнике мудрость сия?


 
default ©   (2006-10-10 13:41) [66]

pasha_golub ©   (10.10.06 13:31) [63]
что может быть непонятно?
если брать пример с текстовым файлов
пусть размер этого файла - 2 гига
а мне надо проитерировать(просмотреть) первые две строки файла
(возможно другое количество, короче это неизвестно на стадии разработки)
так вот ради этих двух строк если использовать вариант с Count придётся перешерстить все 2 гига для подсчёта количества строк притом для того чтобы перебрать каких-то две первые строчки файла
как?


 
default ©   (2006-10-10 13:44) [67]

вот простой интерфейс итератора

public interface IEnumerator
   {
// Interfaces are not serializable
       // Advances the enumerator to the next element of the enumeration and
       // returns a boolean indicating whether an element is available. Upon
       // creation, an enumerator is conceptually positioned before the first
       // element of the enumeration, and the first call to MoveNext
       // brings the first element of the enumeration into view.
       //
       bool MoveNext();
   
       // Returns the current element of the enumeration. The returned value is
       // undefined before the first call to MoveNext and following a
       // call to MoveNext that returned false. Multiple calls to
       // GetCurrent with no intervening calls to MoveNext
       // will return the same object.
       //
       Object Current {
           get;
       }
   
       // Resets the enumerator to the beginning of the enumeration, starting over.
       // The preferred behavior for Reset is to return the exact same enumeration.
       // This means if you modify the underlying collection then call Reset, your
       // IEnumerator will be invalid, just as it would have been if you had called
       // MoveNext or Current.
       //
       void Reset();
   }


 
Игорь Шевченко ©   (2006-10-10 13:46) [68]

pasha_golub ©   (10.10.06 13:39) [65]


> В каком источнике мудрость сия?


Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
"Приемы объектно-ориентированного проектирования. Паттерны проектирования"


 
han_malign ©   (2006-10-10 13:49) [69]


> Заранее неизвестно, на каком селекте будет облом и сколько именно записей вернется.

> да взять хотя бы текстовый файл и его итерирование по строкам
> чтобы узнать число строк надо прочитать весь файл, что ни в какие ворота не лезет

- ну, если зарание не известно какой контейнер используется - с произвольным доступом, или с последовательным - тогда итераторы это насущная необходимость... Но тут нужно для себя решить - инженер-программист я, который всегда знает когда и что делает, или "просто программист", который во всех случаях использует толстые интерфейсы, не задумываясь что - цитирую:

> > Переводи в классы и списки классов.
> В данном случае это крайне неэффективно...


 
Игорь Шевченко ©   (2006-10-10 13:55) [70]

han_malign ©   (10.10.06 13:49) [69]


> - ну, если зарание не известно какой контейнер используется
> - с произвольным доступом, или с последовательным - тогда
> итераторы это насущная необходимость... Но тут нужно для
> себя решить - инженер-программист я, который всегда знает
> когда и что делает, или "просто программист", который во
> всех случаях использует толстые интерфейсы


А думать надо не только о себе.


 
default ©   (2006-10-10 14:01) [71]

han_malign ©   (10.10.06 13:49) [69]
в универсальных методах обычно типичные входные данные обрабатывают оптимальным образом, а все остальные - не очень оптимальным, зато универсальным
типовая практика


 
vuk ©   (2006-10-10 15:11) [72]

to default ©   (10.10.06 14:01) [71]:
>а все остальные - не очень оптимальным, зато универсальным
Так вот как раз итераторы и позволяют универсальность с оптимальностью подружить.


 
Cyrax ©   (2006-10-14 01:45) [73]

default ©   (07.10.06 00:07) [14]
посмотри как сделаны итераторы в .NET, например, в класс Stack, ArrayList, Quene,...
итераторы там просто перебор элементов

Это частичная реализация итераторов в широком (и общепринятом) понимании. В Delphi, например, вообще не используется термин "итератор". Но это не значит, что их нет...

итератора дословно - перечислитель, ни о каком УПРАВЛЕНИИ речи не идёт

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

Джо ©   (07.10.06 02:27) [17]
Как раз наоборот, вроде. :) Перебор, собственно, и есть главная функция итераторов. А "управляем" мы и ими или нет — дело десятое...

Возможно так обстоит дело с C#. Но не с Python и C++...

Юрий Зотов ©   (09.10.06 23:11) [21]
Простейший цикл... простейший проход по массиву/списку/коллекции объектов... а как много "хвилософфии"...

Нет, не простейший проход. Вспомним итераторы ввода, итераторы вывода,
двунаправленные итераторы, последовательные итераторы, итераторы обмена, итераторы произвольного доступа и др.
Функциональность и назначение итераторов в большей мере схожа с функциональностью и назначением указателей, а не с переменной цикла в пакалевском for...

После знакомства с Джавой не могу отделаться от ощущения, что мир катится к ламеризму.
Не стану утверждать, что это ощущение  безусловно верно, но все же плдтверждения тому есть.
Это еще одно?

Да, катится. И очень быстро...

isasa ©   (10.10.06 00:02) [30]
Долго крепился, но влезу.
Это от того, что при варианте
type *var;  // type var[];
type **var;  // type var[][];
с последующей
var = (type*)calloc(nSize, typeof(type));
...
Ну очень надо помнить nSize в дальнейшем. Что дико раздражает, когда сравниваешь с динамическими массивамив Дельфи. :)

Не хуже, чем статические массивы паскаля...
А для этих целей нужно использовать динамические массивы C++...

Юрий Зотов ©   (10.10.06 00:30) [37]
Даже и в языке - убивает хотя бы обилие скобок. Наследие C ?
if (лог_выражение)...
Мы не в силах распознать лог_выражение и без скобок?

И не в силах распознать блок операторов без then ?..
И вообще, в if может быть не только логическое выражение... и много чего ещё... Это всё в сторону гибкости и эффективности...

obj.func()
Мы не в силах отличить метод от поля и без скобок?

Удобочитаемость кода. Не думаю, что поставить две скобки сложнее, чем написать begin, end, then и т.п.

Юрий Зотов ©   (10.10.06 10:14) [53]
> vuk ©   (10.10.06 01:06) [45]
> Хвилософия, она иной раз полезная бывает.
Бывает, Леш. Но только тогда, когда она не из пальца высосана и не за уши притянута. Иными словами, когда она введена для дела, а не выпендрежа лишь ради - такое тоже бывает.
Keep It Simple, понимаешь? Это значит, что не надо притягивать философию за уши и высасывать ее из пальца. Лучше оставить ее для более серьезных вещей, где она действительно нужна. Иначе она становится "хвилософфией".

Думаю, это не относится к текущей ветке...

Но... вот эти 2 две простейшие строчки дают ровно то же самое. И без всяких классов-посредников, на фиг в данном случае не нужных.

В C++ никаких классов посредников для этих целей (я об итераторах) не используется... Кроме того, итераторы в C++ реализованы на уровне стандарта, что сильно облегчает жизнь ~трудящихся~...

vuk ©   (10.10.06 10:33) [54]
to Cyrax ©   (10.10.06 08:30) [48]:
>Что касается паскаля, то его for откровенно слаб в этом отношении (опять-
>таки по современным меркам)...
В паскале for реализует цикл со счетчиком. Все. Никаких других функций и заморочек. Хочется другого - используется другой вид цикла.

А вот "другое" потребует лишних "заморочек" (и не малых) в других циклах. Банальная потребность в указании шага - и придётся задействовать while или repeat, где уже теряется лаконичность, удобочитаемость и эффективность кода...

Но только тогда, когда она не из пальца высосана и не за уши притянута.
Бывает. Что лично я в данном конкретном случае делал бы, я уже писал в своем ответе автору ветки.

Всё номёками да номёками... про кокую философию речь-то идёт ?

Игорь Шевченко ©   (10.10.06 11:25) [56]
Дядьки там буржуйские всякие паттерны придумывают - нафига, спрашивается ?

"В частности, данное средство позволяет проектировать эффективные, компактные и безопасные с точки зрения типов контейнерные классы и удобно ими пользоваться. Без шаблонов проектировщику пришлось бы прибегать к к слабо или динамически типизированным вариантам, что отрицательно сказалось бы на структуре и эффективности программы"


 
Anatoly Podgoretsky ©   (2006-10-14 12:11) [74]

Ketmar ©   (10.10.06 01:41) [46]
Не называй это FOR это просто слова похожие, это вообще то WHILE


 
Ketmar ©   (2006-10-15 18:10) [75]

>[74] Anatoly Podgoretsky(c) 14-Oct-2006, 12:11
>Не называй это FOR это просто слова похожие, это вообще то
>WHILE
ну так я и говорю -- комбайн. а фором его Керниган с Ричи назвали. %-)


 
Cyrax ©   (2006-10-15 19:58) [76]

vuk ©   (07.10.06 11:45) [18]
to Cyrax:
Возьмите книжку какую-нибудь, ну хотя бы Буча...

Можно сцылку. А то скачал одну - но не ту...



Страницы: 1 2 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.077 c
2-1161186419
Tab
2006-10-18 19:46
2006.11.05
Создание классов


15-1160558067
Gero
2006-10-11 13:14
2006.11.05
Ну вот, я старался, рисовал сердце, а тему удалили


2-1161086311
regdown
2006-10-17 15:58
2006.11.05
Помгите с записью ресурсов


3-1157931407
boss_zbk
2006-09-11 03:36
2006.11.05
Как выдать сообщение


2-1161337013
svt
2006-10-20 13:36
2006.11.05
access 2.0