Параметры подпрограмм (PascalABC.NET): различия между версиями

Материал из Информационная безопасностя
Перейти к навигации Перейти к поиску
Строка 10: Строка 10:
 
  Передавать параметры можно двумя способами.
 
  Передавать параметры можно двумя способами.
  
Первый способ называется передачей по значению. Значение фактического параметра копируется в формальный, после чего связь фактического и формального параметра разрывается. На практике это означает, что подпрограмма может что угодно делать с формальным параметром: значение фактического при этом не изменится. Я написал объявление (фактический параметр), снял с него копию (передал по значению в формальный параметр) и повесил где-то на доску объявлений. Я не знаю, что дальше будет с этой копией и не могу на это повлиять. Для запоминания: «передал – и забыл».
+
Первый способ называется передачей <span style="font-weight: bold; text-decoration: underline;">по значению</span>. Значение фактического параметра копируется в формальный, после чего связь фактического и формального параметра разрывается. На практике это означает, что подпрограмма может что угодно делать с формальным параметром: значение фактического при этом не изменится. Я написал объявление (фактический параметр), снял с него копию (передал по значению в формальный параметр) и повесил где-то на доску объявлений. Я не знаю, что дальше будет с этой копией и не могу на это повлиять. Для запоминания: «передал – и забыл».
  
Второй способ называется передачей по ссылке. Мы не будем сейчас разбираться, что такое ссылка. Важно понять, что никакого копирования данных из фактического параметра в формальный не происходит. Вместо этого, подпрограмма получает непосредственный доступ к фактическому параметру, когда обращается к формальному. Фактически, на время выполнения, формальный и фактический параметр становятся синонимами, «ссылаются» на одни и те же данные. Передача по ссылке позволяет подпрограмме вносить изменения в фактический параметр.
+
Второй способ называется передачей <span style="font-weight: bold; text-decoration: underline;">по ссылке</span>. Мы не будем сейчас разбираться, что такое ссылка. Важно понять, что никакого копирования данных из фактического параметра в формальный не происходит. Вместо этого, подпрограмма получает непосредственный доступ к фактическому параметру, когда обращается к формальному. Фактически, на время выполнения, формальный и фактический параметр становятся синонимами, «ссылаются» на одни и те же данные. Передача по ссылке позволяет подпрограмме вносить изменения в фактический параметр.
  
 
  При передаче по ссылке фактический параметр не может быть выражением – только именем переменной.
 
  При передаче по ссылке фактический параметр не может быть выражением – только именем переменной.

Версия 17:40, 21 мая 2023

Для того, чтобы обмениваться данными с подпрограммами, служит механизм параметров. Подпрограмма должна уметь получать данные от вызывающей программной единицы, а также, при необходимости, возвращать ей измененные данные. Если обмен данными не требуется, параметры не нужны.

Параметры подпрограммы – переменные в ее описании, служащие для обмена данными с другими программными единицами.

Для передачи данных подпрограмме в точке вызова указывается ее имя, за которым в круглых скобках перечисляются через запятую выражения, значения которых будут вычислены и переданы. Такие параметры называются аргументами или фактическими параметрами. В частном случае аргумент может быть просто именем переменной.

В заголовке, описывающем подпрограмму, также указывается список параметров. Это так называемые формальные параметры. Их формальность в том, что при вызове подпрограммы значения формальных параметров замещаются значением фактических и уже с этими значениями выполняется код тела подпрограммы.

Передавать параметры можно двумя способами.

Первый способ называется передачей по значению. Значение фактического параметра копируется в формальный, после чего связь фактического и формального параметра разрывается. На практике это означает, что подпрограмма может что угодно делать с формальным параметром: значение фактического при этом не изменится. Я написал объявление (фактический параметр), снял с него копию (передал по значению в формальный параметр) и повесил где-то на доску объявлений. Я не знаю, что дальше будет с этой копией и не могу на это повлиять. Для запоминания: «передал – и забыл».

Второй способ называется передачей по ссылке. Мы не будем сейчас разбираться, что такое ссылка. Важно понять, что никакого копирования данных из фактического параметра в формальный не происходит. Вместо этого, подпрограмма получает непосредственный доступ к фактическому параметру, когда обращается к формальному. Фактически, на время выполнения, формальный и фактический параметр становятся синонимами, «ссылаются» на одни и те же данные. Передача по ссылке позволяет подпрограмме вносить изменения в фактический параметр.

При передаче по ссылке фактический параметр не может быть выражением – только именем переменной.

Традиционно, функция не должна менять значений аргументов, она лишь возвращает вычисленный результат. Процедура не возвращает значений, поэтому изменять значения аргументов для нее совершенно нормально. Но это лишь традиция, не более того.

Формальные параметры, вызываемые по значению, имеют следующее описание:

имя: тип
имя, имя, …: тип

Формальные параметры, вызываемые по ссылке, описываются несколько иначе:

var имя: тип
var имя, имя, …: тип

Формальные параметры могут иметь значения, которые присваиваются по умолчанию:

имя := значение
имя: тип := значение

Такие формальные параметры должны указываться только после параметров, не получающих начального значения. Умолчание позволяет списку фактических параметров быть короче списка формальных параметров. Параметры вовсе не обязательно должны быть простыми переменными. Например, они могут быть последовательностями и массивами.