КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Тема№ 26 Механизмы передачи параметров процедурам
Тема№25 Область видимости переменных
Переменные и прочие объекты, используемые в программе, описания которых содержатся в подпрограмме, являются локальными и действуют только внутри этой подпрограммы. Никакой связи между ними и объектами вызывающей программной единицы, имеющими (возможно, случайно) такие же имена (идентификаторы), нет. Они полностью независимы.
С другой стороны, в подпрограмме можно использовать идентификаторы, описанные только в вызывающей программной единице, но не в самой подпрограмме. Смысл и значение этих Идентификаторов будут одинаковы и там, и там. Такие идентификаторы называются глобальными, или нелокальными. Область действия описания конкретного идентификатора называется его областью видимости. Другими словами, область видимости переменной – это множество операторов, в которых данную переменную можно использовать.
Использования глобальных переменных в подпрограммах следует избегать. Тому есть несколько причин. Одна заключается в том, что подпрограмма, использующая глобальные переменные, становится менее универсальной, чем замкнутая, «самодостаточная» подпрограмма. При ее переносе в другую программу придется тщательно проследить за обменом данными между программными единицами с помощью глобальных переменных. Вторая причина связана с тем, что при использовании глобальных переменных возрастает риск ошибок, подчас трудно обнаружимых, вызванных «несанкционированным» или неучтенным изменением значения глобальной переменной в теле подпрограммы. Такие процедуры (или функции) могут иметь неожиданные побочные эффекты.
Если в подпрограмме описаны другие процедуры или функции, то область видимости описанных в ней переменных распространяется на вложенные подпрограммы, если только в них не описаны переменные с такими же именами.
В заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове программы на их место будут подставлены конкретные значения. Этот список указывается после имени подпрограммы и заключается в круглые скобки.
Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя:
– параметры-значения;
– параметры-переменные, перед которыми должно стоять служебное слово var и за которыми указывается их тип;
– параметры-процедуры, перед которыми должно стоять служебное слово procedure;
– параметры-функции, перед которыми должно стоять служебное слово function и после которых указывается тип значения, возвращаемого функцией в основную программу;
– нетипизированные параметры, перед которыми должно стоять служебное слово var, а указание типа должно отсутствовать.
В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга – точкой с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой.
Примеры заголовков:
procedure P(procedure В; function С: real; Q. W. R: char); procedure A:
Между формальными и фактическими параметрами должно быть полное соответствие:
– формальных и фактических параметров должно быть одинаковое количество;
– порядок следования фактических и формальных параметров должен совпадать;
– тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра. Параметры-значения
Параметры-значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру или функцию). В списке формальных параметров они перечисляются через запятую с обязательным указанием их типов:
procedure Abort(Msg: string):
function Step(N: integer; X; real): real:
Если формальный параметр объявлен как параметр-значение, то фактическим может быть произвольное выражение. При вызове подпрограммы фактические параметры вычисляются и используются в качестве начальных значений формальных параметров, т.е. осуществляется подстановка значений. Если формальный параметр определен как параметр-значение, то перед вызовом процедуры это значение вычисляется, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр – простейшее выражение в виде константы или переменной, все равно процедуре будет передана лишь копия этой константы (переменной). В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отражается на соответствующих фактических параметрах-переменных, которые сохраняют те значения, которые имели до вызова подпрограммы, так как меняются не они, а их копии. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу. Параметры-переменные
Параметры-переменные используются для определения результатов выполнения процедуры и в списке формальных параметров перечисляются после зарезервированного слова var с обязательным указанием типа. Каждому формальному параметру, объявленному как параметр-переменная, должен соответствовать фактический параметр в виде переменной соответствующего типа, например:
procedure Example(var M,N: integer; var Y: real);
Если формальный параметр определен как параметр-переменная, то при вызове процедуры передается сама переменная, а не ее копия, и изменение параметра-переменной приводит к изменению фактического параметра в вызывающей программе. Следовательно, исходные данные в процедуру из программы могут передаваться как через параметры-значения, так и через параметры-переменные, а результаты работы процедуры возвращаются в вызывающую программу только через параметры-переменные
Дата добавления: 2015-04-24; Просмотров: 430; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |