Параметры процедур и функций
Параметры процедур и функций
Параметры, указываемые при описании подпрограммы, называются формальными. Параметры, указываемые при вызове подпрограммы, называются фактическими.
Если формальный параметр описан с предваряющим ключевым словом var или const, то его называют параметром-переменной и говорят, что он передается по ссылке. Если же параметр описан без слов var или const, то его называют параметром-значением и говорят, что он передается по значению. Слово ссылка используется в PascalABC.NET также в другом значении - для ссылочных типов.
Если параметр передается по значению, то при вызове подпрограммы значения фактических параметров присваиваются соответствующим формальным параметрам. Типы фактических параметров-значений должны быть совместимы по присваиванию с типами соответствующих формальных параметров.
Например, пусть имеется следующее описание процедуры:
procedure PrintSquare(i: integer);
begin
writeln(i*i);
;
Тогда при вызове PrintSquare(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, после чего выполнится тело процедуры.Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в теле процедуры соответствующий ему формальный параметр. В итоге любые изменения формального параметра-переменной внутри процедуры приводят к соответствующим изменениям фактического параметра. Фактические параметры-переменные должны быть переменными, а их типы должны быть эквивалентны типам соответствующих формальных параметров.
Например, если описана процедура
procedure Mult2(var a: integer);
begin
a := a*2;
;
то после вызова Mult2(d) значение d увеличится в 2 раза.В качестве фактического параметра-значения можно указывать любое выражение, тип которого совпадает с типом формального параметра или неявно к нему приводится. В качестве фактического параметра-переменной можно указывать только переменную, тип которой в точности совпадает с типом формального параметра.
При передаче параметра по ссылке в подпрограмму передается адрес фактического параметра. Поэтому если параметр занимает много памяти (массив, запись, строка), то обычно он также передается по ссылке. В результате в процедуру передается не сам параметр, а его адрес, что экономит память и время работы. При этом если параметр меняется внутри подпрограммы, то он передается с ключевым словом var, если не меняется - с ключевым словом const:
Например:
type
Person = record
name: string;
age,height,weight: integer;
end;procedure Print(const p: Person);
begin
write(p.name,,p.age,,p.height,,p.weight);
end;
procedure IncAge(var p: Person);
begin
Inc(p.age);
end;
Отметим особенности передачи динамических массивов в качестве параметров подпрограмм.
Поскольку динамический массив является ссылкой, то при изменении формального параметра-динамического массива внутри подпрограммы меняется соответствующий фактический параметр. Например, в результате работы программы
procedure p(a: array of integer);
begin
a[1] := 2;
end;
var b: array of integer := (1,1);
begin
p(b);
writeln(b[1]);
end.
будет выведено 2. Передавать динамические массивы по ссылке имеет смысл только в случае если память под динамический массив перераспределяется внутри подпрограммы:
procedure q(var a: array of integer);
begin
SetLength(a,10);
end;
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
27.5. Параметры транзитных узлов и параметры получателя IPv6
27.5. Параметры транзитных узлов и параметры получателя IPv6 Параметры для транзитных узлов и параметры получателя IPv6 имеют одинаковый формат, показанный на рис. 27.3. Восьмиразрядное поле следующий заголовок (next header) идентифицирует следующий заголовок, который следует за
Создание процедур
Создание процедур Процедуры - это критические функциональные единицы VBA-программы в том смысле, что вы можете выполнить только программный код, содержащийся в какой-либо процедуре.Основными VBА - процедурам и являются процедуры двух типов- Sub (подпрограммы) и Function (функции).
Типы процедур
Типы процедур Почти весь создаваемый вами программный код будет содержаться в процедурах всего двух типов - Sub и Function. Процедуры обработки событий, выполняемые в VBA, когда происходит какое-либо событие, например щелчок кнопки мыши, являются специальными процедурами типа
Отличия процедур типа Function от процедур типа Sub
Отличия процедур типа Function от процедур типа Sub Между процедурами типа Function и типа Sub есть одно существенное отличие: в процедуре типа Function обязательно где-то должен присутствовать по крайней мере один оператор, задающий значение этой функции. При этом используется имя
Организация процедур
Организация процедур Любую VBA-программу, независимо от ее длины, можно оформить в виде одной единственной процедуры. Так зачем же создавать себе лишние заботы, разбивая программу на процедуры? Главная причина в том, что это существенно упрощает контроль над выполняемой
Создание процедур свойств
Создание процедур свойств Секрет наделения объекта свойством состоит в написании пары специальных процедур - процедур свойств Property Let и Property Get. Обе процедуры в паре должны иметь одинаковые имена.Именем свойства будет то, которое вы выберете для процедур Property Let и Property Get.
Вызов процедур и функций
Вызов процедур и функций Процедуры и функции вызываются по их названию с указанием в круглых скобках списка параметров, например:s:= IntToStr(i); //вызов функции IntToStrdelete(s, 1, 2); {вызов процедуры delete, которая удаляет из строки s два символа, начиная с первого. В данном случае,
Совет 46. Передавайте алгоритмам объекты функций вместо функций
Совет 46. Передавайте алгоритмам объекты функций вместо функций Часто говорят, что повышение уровня абстракции языков высокого уровня приводит к снижению эффективности сгенерированного кода. Александр Степанов, изобретатель STL, однажды разработал небольшой комплекс
5.2. Синтаксис хранимых процедур
5.2. Синтаксис хранимых процедур Сохраненная подпрограмма является процедурой или функцией. Сохраненные подпрограммы созданы командами CREATE PROCEDURE и CREATE FUNCTION. Процедура вызывается, используя инструкцию CALL, и может только передавать обратные значения, используя переменные
7.3.2. Параметры-ссылки и параметры-указатели
7.3.2. Параметры-ссылки и параметры-указатели Когда же лучше использовать параметры-ссылки, а когда – параметры-указатели? В конце концов, и те и другие позволяют функции модифицировать объекты, эффективно передавать в функцию большие объекты типа класса. Что выбрать:
12.3.5. Адаптеры функций для объектов-функций
12.3.5. Адаптеры функций для объектов-функций В стандартной библиотеке имеется также ряд адаптеров функций, предназначенных для специализации и расширения как унарных, так и бинарных объектов-функций. Адаптеры – это специальные классы, разбитые на следующие две
Тестирование процедур
Тестирование процедур Разработчикам не нужно напоминать о необходимости строгого тестирования модулей PSQL, прежде чем передавать их в работу, где они в один скверный день могут принести большой вред. Синтаксический анализатор предупредит вас об ошибках кодирования PSQL,
19.11.2. Вызов функций из файла функций
19.11.2. Вызов функций из файла функций Мы уже рассматривали, каким образом функции вызываются из командной строки. Эти типы функций обычно используются утилитами, создающими системные сообщения.А теперь воспользуемся снова описанной выше функцией, но в этом случае
Описание процедур и функций
0
Роль процедур создания
Роль процедур создания Инвариант класса задает множество свойств объектов (экземпляров класса), которые должны выполняться в стабильные времена жизни объектов. В частности, эти свойства должны выполняться сразу после создания экземпляра объекта.Стандартный механизм
Примеры процедур
Примеры процедур Точно так же мы можем поступать и в тайм-менеджменте, разрабатывая процедуры везде, где только возможно. Вот несколько примеров.Процедура 1: заправка по воскресеньямЯ заправляю машину каждое воскресенье. Я разработал эту процедуру, и она хорошо служит