Энциклопедия Turbo Pascal. Главы 9-11 - Предотвращение дублировния кода
ОГЛАВЛЕНИЕ
Предотвращение дублировния кода
Даже самые лучшие программисты пишут иногда избыточные коды. Избыточный код не ссылается на код, который может быть выделен в подпрограмму; даже не очень опытные программисты понимают это. Кроме того, к избыточности относится и не необходимое дублирование аналогичных предложений внутри процедуры. Чтобы получить лучшее представление о том, что такое избыточный код, рассмотрим следующий фрагмент:
Read(a);
Read(y);
if a<10 then WriteLn('Недопустимый ввод');
if Length(y)=0 then WriteLn('Недопустимый ввод');
В данном случае предложение WriteLn('Недопустимый ввод') встречается дважды. Однако, это не необходимо, так как фрагмент может быть переписан следующим образом
Read(a);
Read(y);
if (a<10 or (Length(y)=0) then WriteLn('Недопустимый ввод');
В таком варианте код не только короче, но и будет в действительности выполняться быстрее, так как выполняется только одно предложение if/then вместо двух.
Данный пример возможно не встретится в реальной программе, так как избыточные предложения являются соседними и их легко обнаружить. Однако, так как избыточные предложения часто разнесены в программе, то такие коды встречаются в большинстве программ.
Избыточность иногда является следствием методов, выбранных для кодирования процедур. Например, далее представлены два метода кодирования функции, которая осуществляет поиск заданного слова в матрице строк:
type
str80 = string[80];
StrArray = array [1..100] of str80;
function StrSearch1(str: StrArray; word: str80): boolean;
{ правильный, неизбыточный код }
var
t: integer;
begin
StrSearch1 := FALSE;
for t := 1 to 100 do
if str[t]=word then StrSearch1 := TRUE;
end;
Function StrSeach2(str: StrArray; word: str80): boolean;
{неправильный, избыточный код }
var
t: integer;
begin
t :=1;
StrSearch := FALSE;
if str[t]=word then StrSearch2 := TRUE
else
begin
t := 2;
while(t<=100) do
begin
if str[t]=word then StrSearch2 := TRUE;
t := t+1;
end;
end;
end;
При втором методе не только дублируются предложения сравнения if/then, но также имеются два предложения присваивания (t:=1 и t:=2). Первая версия работает быстрее и требует значительно меньше памяти.
Коротко говоря, избыточный код может быть следствием либо неряшливости при программировании, либо неверного выбора метода реализации процедуры.