Песни о Паскале | страница 136
• любой объект объявляется до своего применения;
• тело процедуры или функции обязательно и размещается последним.
Объявленные внутри подпрограммы константы, типы и переменные – локальные объекты – видны лишь внутри этой подпрограммы. При совпадении их имен с глобальными объектами, локальные имеют преимущество, то есть закрывают собою внешние объекты.
Вызов процедур и функций обычно сопровождается передачей данных между вызываемой подпрограммой с одной стороны и вызывающим её фрагментом с другой. Иначе говоря, данные либо передают внутрь подпрограммы, либо получают от нее. Иногда делают и то, и другое. Существует три способа такого обмена:
• через глобальные переменные;
• через параметры процедур и функций;
• возвратом результата через имя функции.
Передача данных через глобальные переменные кажется самой простой, – ведь эти переменные видны из многих частей программы. Но этот способ оправдан лишь в небольших проектах. С ростом размера и сложности программы все труднее отслеживать взаимные влияния её частей через глобальные переменные. Это запутывает программу и снижает её надежность.
Для обмена данными разумнее использовать параметры процедур и функций, а также имена функций. В табл. 4 показаны три способа передачи данных через параметры.
Табл. 4 – Три способа передачи данных через параметры
Способ передачи данных | Пример заголовка процедуры | Пример вызова |
По значению:в процедуру передается значение параметра. | Procedure ABC (arg:integer); | ABC(10);ABC(X+3); |
По ссылке CONST:В процедуру передается ссылка на константу или переменную, содержащую данные. | Procedure ABC (const arg:integer); | ABC(10);ABC(X); |
По ссылке VAR:В процедуру передается ссылка на переменную, содержащую данные. | Procedure ABC (var arg:integer); | ABC(X) |
Опытного программиста отличает умение эффективно передавать данные; табл. 5 поможет вам выбрать наиболее удачный способ такой передачи.
Табл. 5 – Рекомендуемые способы передачи данных
Куда передавать данные | Рекомендуемый способ |
Только в процедуру или функцию | 1) По значению (простые типы) 2) По ссылке CONST (сложные типы) |
Только из процедуры и функции | 1) Через имя функции (одно значение) 2) По ссылке VAR (несколько значений) |
В обоих направлениях | По ссылке VAR (любые данные) |
В каждом случае предпочтительный способ указан первым. Данные простых типов лучше передавать внутрь подпрограмм по значению. По ссылке CONST передают строки и другие сложные типы данных (скоро мы изучим их). Через имя функции возвращают лишь один результат. А если надо вернуть несколько результатов, или вернуть сложный тип данных, используют ссылки VAR.