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

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




double arrow
Сейчас читают про: