русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Передача параметров


Дата добавления: 2015-08-31; просмотров: 661; Нарушение авторских прав


Параметры — это значения, которые передаются от одной процедуры к другой. В принципе, можно обойтись и без параметров, воспользовавшись только переменными уровня модуля, но при использовании параметров читаемость программы улучшается. Чтобы процедура имела возможность принимать параметры, ее вначале нужно объявить с параметрами. Далее приведен пример простой функции, которая складывает два числа и возвращает результат:

Function fSum (nlteml As Integer, nltem2 As Integer)

fSum = nlteml + nltem2

End Function

Ее вызов может выглядеть так:

MsgBox fSum(3, 2)

В данном случае мы объявили оба параметра как обязательные, и поэтому попытка вызвать функцию без передачи ей какого-либо параметра (например, fsum(3)) приведет к ошибке "Argument not optional" — "Параметр не является необязательным". Чтобы можно было пропускать какие-то параметры, их нужно сделать необязательными. Для этой цели используется ключевое слово

Optional:

Function fSum(nlteml As Integer, Optional nltem2 As Integer)

В справке по встроенным функциям VBA необязательные параметры заклю­чаются в квадратные скобки.

Для проверки того, был ли передан необязательный параметр, используется либо функция isMissing (если для этого параметра был использован тип Variant), либо его значение сравнивается со значениями переменных по умолчанию (ноль для числовых данных, пустая строка для строковых и т. п.).

Вызов функции с передачей параметров может выглядеть так:

nResult = fSum(3, 2)

Однако здесь есть несколько моментов, которые необходимо рассмотреть.

В нашем примере мы передаем параметры по позиции, т. е. значение 3 присваивается первому параметру (nlteml), а значение 2 — второму (nitem2). Однако параметры можно передавать и по имени:

nResult = fSum(nlteml := 3, nltem2 := 2)

Обратите внимание, что, несмотря на то, что здесь выполняется вполне привычная операция — присвоение значений, оператор присваивания используется не совсем обычный— двоеточие со знаком равенства (:=), как в C++. При использовании знака равенства возникнет ошибка.



Конечно, вместо явной передачи значений (fsump(3, 2)) можно использовать переменные. Однако что произойдет с переменными после того, как они "побывают" в функции, если функция изменяет их значения? Останутся ли эти значения за пределами функции прежними или изменятся?

Все зависит от того, как именно передаются параметры: по ссылке (по умолчанию, можно также использовать ключевое слово byRef) или по значению (ключевое слово byVal).

Если параметры передаются по ссылке, то фактически в вызываемую процедуру передается ссылка на эту переменную в оперативной памяти. Если эту переменную в вызываемой процедуре изменить, то значение изменится и в вызывающей функции. Это принятое в VBA поведение по умолчанию.

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

Продемонстрировать разницу можно на простом примере:

Private Sub TestProc()

'Объявляем переменную nParl и присваиваем ей значение

Dim nParl As Integer

nParl = 5

'Передаем ее как параметр nlteml функции fSum

MsgBox fSum(nlteml:=nParl, nltem2:=2)

'А теперь проверяем, что стало в нашей переменной nParl

'после того, как она побывала в функции fSum

MsgBox nParl

End Sub

Function fSum(nIteml As Integer, nltem2 As Integer)

'Используем значение переменной

fSum = nlteml + nltem2

'А затем ее меняем!

nlteml = 10 End Function

Проверьте, что будет, если поменять строку объявления функции:

Function fSum(nIteml As Integer, nltem2 As Integer)

на другую:

Function fSum(byVal nlteml As Integer, nltem2 As Integer)

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

fSum 3, 2

Такой код будет работать совершенно нормально. Однако если нам потребуется все-таки узнать, что возвращает функция, то придется передаваемые ей параметры заключать в круглые скобки:

nResult - fSum(3, 2)

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



<== предыдущая лекция | следующая лекция ==>
Виды процедур | Вызов и завершение работы процедур


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.914 сек.