Советы профессионала
Упрощайте логические выражения в операторах 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}