ВУЗ:
процедуре. Детали того, как именно каждая процедура выполняет свою задачу, скрыты от главной программы.
Параметры. Обычно не рекомендуется предоставлять информацию для совместного использования с помощью гло-
бальных переменных, поскольку при этом трудно определить, какая часть программы использует эти данные. Лучше всего в
явном виде определить, какие данные используются в каждом модуле программы. Для этого нужно перечислить данные,
которые передаются процедуре оператором вызова. В свою очередь, заголовок процедуры содержит список переменных,
которым будут присвоены значения, полученные при вызове процедуры, как и в нашем псевдокоде, описанном в главе 4.
Элементы обоих списков называют параметрами (parameters).
При вызове процедуры параметры, перечисленные в вызывающем программном модуле, ставятся в однозначное соот-
ветствие параметрам, перечисленным в заголовке процедуры; первый параметр в вызывающем модуле соответствует перво-
му параметру в заголовке процедуры и так далее. Затем значения параметров из вызывающего модуля присваиваются соот-
ветствующим параметрам процедуры, и процедура выполняется. Таким образом, как и в нашем псевдокоде, параметры, пе-
речисленные в заголовке процедуры, указывают, где будут размещены конкретные данные при вызове процедуры. Поэтому
такие параметры часто называют формальными (formal parameters), тогда как параметры, перечисленные в вызывающем мо-
дуле, именуют фактическими (actual parameters), поскольку они представляют реальные данные.
В некоторых языках программирования передача данных от фактических параметров к формальным осуществляется
посредством копирования. При этом процедура может манипулировать лишь предоставленными ей копиями. Говорят, что
такие параметры передаются по значению (passed value). Передача данных по значению защищает переменные в вызываю-
щем модуле от ошибочного изменения плохо разработанной процедурой. Например, если вызывающий модуль передает
процедуре номер социального страхования работника, то крайне нежелательно, чтобы она этот номер изменила.
К сожалению, передача параметров по значению неэффективна, особенно когда параметрами являются большие блоки
данных. Более эффективный способ передачи параметров процедуре состоит в предоставлении ей прямого доступа к факти-
ческим параметрам посредством указания их адресов. В этом случае говорят, что параметры передаются по ссылке (passed by
reference). Напомним, что передача параметров по ссылке позволяет вызываемой процедуре модифицировать данные в вы-
зывающем модуле. Такой подход был бы желателен, например, при сортировке списка. И действительно, в этом случае вы-
зов процедуры сортировки имел бы результатом переупорядочивание исходного списка.
Например, пусть процедура Demo описана так, как показано ниже:
procedure Demo(Forma1)
Formal ← Formal+1;
Кроме того, предположим, что переменной Actual присвоено значение 5, после чего процедура Demo вызывается с
помощью следующего оператора:
Demo(Actual)
(Здесь использована синтаксическая конструкция, более характерная для языков программирования, чем для нашего
псевдокода, в котором этот оператор имел бы вид "вызвать процедуру Demo с параметром Actual".) В этом слу-
чае, если параметры передаются по значению, то изменения, внесенные в переменную Formal при выполнении процедуры
Demo, не отразятся на значении переменной Actual (рис. 5.10). Однако если параметры передаются по ссылке, значение
переменной Actual увеличится на единицу (рис. 5.11).
В разных языках программирования передача параметров осуществляется различными методами, но в любом случае
использование параметров позволяет писать процедуры в абстрактном виде и применять их к конкретным данным в нужный
момент.
Функции. Обычно назначение программного модуля состоит в выполнении действия и/или вычислении значения. Когда
упор делается на вычислении значения, программный модуль может быть реализован в виде функции. В данном случае тер-
мин функция относится к программному модулю, который во всем похож на процедуру, за исключением того, что он воз-
вращает в вызывающий модуль не список параметров, а единственное значение, которое называется "значением функции".
Значение функции связано с именем функции так же, как значение переменной связано с именем переменной. Отличие за-
ключается лишь в усилиях, которые нужно приложить, чтобы получить значение. При ссылке на переменную соответствующее
значение извлекается из основной памяти, при использовании функции значение вычисляется путем выполнения инструк-
ций, содержащихся в теле функции.
Например, если Total – это переменная, которой присвоена общая стоимость единицы продукции (цена плюс налог на
продажу), то стоимость двух таких единиц можно найти, вычислив следующее выражение:
2 * Total
Страницы
- « первая
- ‹ предыдущая
- …
- 121
- 122
- 123
- 124
- 125
- …
- следующая ›
- последняя »