vitaly_l писал(а):Да, СПАСИБО, понял, если там будет 77777 AND и OR в условии цикла, при условии что, это нужно только для одной из 88888-boolean, то разумнее вынести такое условие из условия цикла, внутрь цикла; и там, внутри цикла - оградить первым boolean, иначе цикл "сожжёт процессор" на втором обороте.
отгородить первым boolean?
хе, условия в паскале (по стандарту языка) являются
short-cut evaluated.
А это значит, что компилятор, не до проверяет значение логического выражения, если точно знает его результат (ложность или правдивость).
Как итог, правильно написанное условие цикла уже отгородит себя первым булеаном.
Например, такой вот цикл
- Код: Выделить всё
i:=1;
while (i<=length(s)) and not (s[i] in 'a') do inc(i);
в паскале не упадёт, даже если строчка s пустая. (хотя казалось бы должен, т.к. s[1] при пустой строке это нарушение границ).
Нужно заметить, что PascalScript, не смотря на имя Pascal, эту ключевую особенность паскаля не реализует, и подобный цикл вполне может упасть.
Тот же, пример, но через for+break
- Код: Выделить всё
for i:=1 to length(s) do
if s[i]='a' then Break;
следует заметить, что цилк с for, может быть экономнее (c точки зрения CPU), в том смысле что length(s) вычисляется одиножды. Но это другая история.