Параметры в функции и процедуры могут передаваться в основном двумя способами:
по значению и по ссылке. То, что вы могли видеть в рассмотренном ранее примере —
это передача параметра по значению. В этом случае в заголовке процедуры
указывается имя параметра и его тип. Например:
procedure TForm1.F2(Ch:char);
В этом случае Ch — это локальное имя формального параметра, используемое только
внутри данной процедуры. При вызове этой процедуры, который может иметь вид:
F2(Ch2);
в памяти создается временная переменная с именем Ch и в нее копируется значение
аргумента Ch2. На этом связь между Ch и Ch2 разрывается. Вы можете изменять
внутри процедуры значение Ch, но это никак не отразится на значении внешней
переменной Ch2, указанной в вызове функции в качестве аргумента.
Такая передача параметров по значению имеет свои достоинства и недостатки.
Достоинство заключается в том, что процедура не может испортить переданный в нее
аргумент. Это важно для надежной работы приложения и позволяет разрабатывать
процедуру, не задумываясь о том, не использованы ли где-то в программе те же
имена параметров. Но у передачи параметра по значению имеется и ряд недостатков.
Во-первых, процедура не может изменить значение аргумента, а иногда это очень
желательно. Во-вторых, копирование значения аргумента требует дополнительных
затрат времени и памяти для хранения копии. Если речь идет о какой-то переменной
простого типа, это, конечно, не существенно. Но если, например, аргумент —
массив из тысячи элементов, то соображения затрат времени и памяти могут стать
существенными. И в-третьих, после окончания работы процедуры временная
переменная, хранившая значение параметра, уничтожается. Поэтому ее нельзя
использовать, например, для накопления какой-то информации.
Доя реализации второго способа передачи информации – по ссылке, перед именем
параметра в заголовке функции должно быть указано ключевое слово var.
Например:
procedure TForm1.F2(var Ch:char);
В этом случае не происходит копирования значения аргумента в локальную,
временную переменную в процедуре. Процедура реально работает не с параметром, а
со ссылкой — указателем на место хранения аргумента в памяти. И любые изменения
параметра Ch, произведенные в процедуре, в действительности относятся не к этому
параметру, а к тому аргументу, который передан при вызове процедуры. Таким
образом, ключевое слово var позволяет возвращать информацию из процедуры в
вызвавшую его внешнюю процедуру.
Если Вам что-то осталось непонятным, оставьте на потом.
Всё, что представлено в рассылке,
копировать запрещено! Сайт рассылки
http://mydelphi7.narod.ru тут
архив.