Энциклопедия Turbo Pascal. Главы 9-11 Страница 26. Предотвращение дублировния кода
|
Страница 26 из 39
Предотвращение дублировния кода
Даже самые лучшие программисты пишут иногда избыточные коды. Избыточный код не ссылается на код, который может быть выделен в подпрограмму; даже не очень опытные программисты понимают это. Кроме того, к избыточности относится и не необходимое дублирова- ние аналогичных предложений внутри процедуры. Чтобы получить луч- шее представление о том, что такое избыточный код, рассмотрим следующий фрагмент:
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). Первая версия работает быстрее и требует значительно меньше памяти. Коротко говоря, избыточный код может быть следствием либо неряшливости при программировании, либо неверного выбора метода реализации процедуры.
|