![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Правило 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. Правило 21. Для доступа к полям записи целесообразнее использовать оператор 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! ');
Правило 22. При использовании параметров порядкового типа вместо операций многократного сравнения с граничными значениями следует применять оператор проверки принадлежности 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');
Правило 23. При использовании оператора CASE следует учитывать специфику его работы: проверка условий осуществляется в порядке их задания в операторе. Если проверяемая переменная попадает в какой-либо диапазон, то остальные условия не проверяются, поэтому, если это возможно, следует первыми условиями использовать наиболее вероятные.
|