Сообщение от
AlexTheC0d3r
чем объясняется ввод новой переменной t?
Delphi не производит разворачивания циклов, как и вынесение инвариантного кода за пределы цикла. То есть в компиляторе нет как такового оптимизатора, вот я и посчтитала что более рационально будет именно так, потому что метод:
PHP код:
for i:=0 to memo1.lines.count – 1 do
будет вызываться в каждой итерации, то есть каждый раз будет подсчитывать количество элементов, а если у нас там элементов несколько тысяч, допустим 2000 строк, собственно не так уж и много, как и посчитать количество их элементов, но так как тип используемый там идет как
string а не
char и заблогонамеренно неизвестна длина строк, пересчет происходить будет в каждой итерации. Даже если взять что
memo1.lines.count было бы постоянным и пересчета не производилось, то в условии у нас стоит математическое выражение
memo1.lines.count -1
ну соответственно чтобы не заставлять вести лишние подсчеты и желательно вынести количество элементов в отдельную переменную, если конечно оно у нас постоянно и не меняется в теле цикла на произвольное, допустим код вида:
PHP код:
var i:integer;
begin
for i:=0 to Memo1.Lines.Count-1 do
if (i mod 2 = 0) then begin memo1.Lines.Add('a') end;
end;
во первых доказывает нам что VCL вызывает подсчет в каждой итерации, а во вторых указывает на то что количество элементов в теле цикла при его воздействии на Memo меняется и учитывается, что тоже иногда необходимо.
(i mod 2 = 0) использовано только чтобы избежать зацикливания.
Ну и банально даже то что при инкрементации переменной цикла i на более высокое значение компилятор не использует Флаг нуля (ZF) а просто сравнивает значение с 0. Семантически это не верно, но я не вижу в этом особого греха.