Правило 23.
Правило 22.
Правило 21.
Правило 20.
В подпрограммы пользователя лучше предусмотреть передачу данных в виде переменных или констант вместо передачи значений. Это позволяет передавать не копию данных, создаваемую в стеке и требующую при этом дополнительные память и время, а сами данные, что повышает быстродействие.
Function function
Sum(a,b:real):real; sum(VAR a,b:real):real;
Begin begin
Sum:=a+b; sum:=a+b;
end; end;
Еще пример
const
a:integer=5;
b:integer=7;
procedure Inc2(var c:integer;b:integer);
begin
c:=c+c;
b:=b+b;
Writeln('удвоенные:',c:5,b:5) (2)
end;
begin
Writeln('исходные:',a:5,b:5); (1)
Inc2(a,b);
Writeln('результат:',a:5,b:5) (3)
end.
исходные: 5 7
удвоенные: 10 14
результат: 10 7
В этой программе задаются два целых числа 5 и 7. Эти числа передаются процедуре Inc2, в которой удваиваются. Один параметр передается как переменная, другой - как параметр значение.
Удвоение второго формального параметра в процедуре не вызвало изменения фактической переменной b, так как этот параметр описан в заголовке процедуры как параметр-значение.
При обработке сложных типов данных часто приходится пользоваться записями (RECORD). При этом для обращения к полям записи можно использовать два способа доступа: операцию "." или оператор присоединения WITH.
Для доступа к полям записи целесообразнее использовать оператор WITH <переменнаая> DO <оператор>, вместо "." что уменьшает объем загрузочного модуля и увеличивает быстродействие.
Например,
type
Bi=record
day,month:byte;
year:word
end;
var
a,b:Bi
......
with c.bd do month:=9;
вместо c.bd.month:=9;
Type
Birthday = record
Day, month: byte;
Year: word;
End;
var a: birthday;
if (a.day=16) and with a do
(a.month=6) and if (day=16) and
(a.year=1979) then (month=6) and
write('Hi!'); (year=1979) then
write('Hi!');
При использовании параметров порядкового типа вместо операций многократного сравнения с граничными значениями следует применять оператор проверки принадлежности IN, если диапазон изменения параметра позволяет использовать множество:
If ((ch>='0')and(ch<='9')) or
((ch>='A')and(ch<='Z')) or
(ch='@') then
write('Yes')
if ch in ['0'..'9',
'A'..'Z',
'@'] then
write('Yes');
При использовании оператора CASE следует учитывать специфику его работы: проверка условий осуществляется в порядке их задания в операторе. Если проверяемая переменная попадает в какой-либо диапазон, то остальные условия не проверяются, поэтому, если это возможно, следует первыми условиями использовать наиболее вероятные.
При умножении и делении целых чисел на число, являющееся целой степенью числа 2, вместо операций умножения и деления следует использовать операции Shl - сдвиг числа влево (умножение) и Shr – сдвиг числа вправо (деление):
A:=n div 512 a:=n shr 9
A:=n*1024 a:=n shl 10