Советы профессионала

Упрощайте логические выражения в операторах if

· Избегайте вызова «лишних» функций и сравнений

Вместо(not(x>x_left)) or (not(x<x_right))следует написать выражение:

(x<=x_left) or (x>=x_right)

Если Вы хотите выяснить, равно ли значение логической переменной b истина –НЕ пишите в операторе if: not(Ord(b)=0)или Ord(b)=1илиb=True.Напишите просто: if b then …

· Используйте дополнительные логические переменные для понимания и упрощения кода

Например, оператор ifимеет вид:

If (elementIndex<0) or (elementIndex>MAX_ELEMENT) or

(elementIndex = LAST_ELEVENT) then…

Добавим в программу две логических переменных violation (нарушение), и completion (завершение) и определим их следующим образом:

violation := (elementIndex<0) or (elementIndex>MAX_ELEMENT);

completion:= (elementIndex = LAST_ELEVENT);

Тогда оператор ifможно записать так:

If violation or completion then…

Упрощайте структуру цикла

· Используйте оператор цикла for, если известно число повторений, и оператор while в других случаях

· Не изменяйте в «теле» цикла for значение показателя цикла!

· Вычисления, не изменяемые в цикле, следует вынести за его пределы

Например, переменная valueвычисляется следующим образом:

for i:=0 to Count-1 do begin

value:= (i+1) ÝBaseValueÝDELTA;

. . .

end;

Видно, что значение произведения BaseValueÝDELTA не зависит от показателя цикла (переменная i)и не изменяется в цикле. Добавим в код переменную increment (приращение)и перепишем цикл следующим образом:

increment:= BaseValueÝDELTA;

for i:=0 to Count-1 do begin

value:= (i+1) Ýincrement;

. . .

end;

· Заменяйте умножение сложением

В рассмотренном выше примере переменная valueна каждом шаге цикла увеличивается на значение переменной increment,поэтомуцикл можно организовать так:

increment:= BaseValueÝDELTA;

value:=0;

for i:=0 to Count-1 do begin

value:= value + increment; //Сравните с первоначальным вариантом!

. . .

end;

· Используйте «размыкание» цикла

Вам необходимо выполнять в цикле похожие действия, которые отличаются небольшой частью, которая выполняется только один раз в начале цикла:

for i:=1 to Count do begin

if i = 1 then begin

{операторы 1}

End

Else begin

{операторы 2}