Bonart » 23.10.2007 09:19:56
По зрелом размышлении предлагаю следующие варианты цикла с параметром:
1. С дискретным параметром:
for параметр[:тип] := выражение [down]to конечное_значение [step шаг] do
список_операторов
end
2. C произвольным параметром:
for параметр[:тип] := выражение next выражение while логическое_выражение do
список_операторов
end
3. С итерацией по множеству:
for параметр[:тип] in множество do
список_операторов
end
Что общего у всех вариантов цикла с параметром - параметр локализуется в цикле (его не видно ни до ни после), на каждой итерации в теле цикла является константой. Это позволяет создавать с одной стороны более прозрачный, с другой - лучше оптимизированный код.
Выражение после next используется каждый раз для получения нового значения параметра. В нем можно (и обычно нужно) использовать его значение на предыдущей итерации.
Например, for i:integer:=1 next i+1 while i<10 do write i; end
Цикл с итерацией по множеству хорош для обслуживания разнообразных коллекций, а также для оптимизаций, связанных с порядком итераций - в этом варианте он неопределен.
Цикл с дискретным параметром отличается лаконизмом, прозрачностью и хорошими возможностями для оптимизации.
По опыту Ады do уже является открывающей операторной скобкой.