КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример 41
Определение способа передачи аргумента
Побочные результаты, вызванные изменением функцией значений в аргументах, передаваемых по ссылке, являются необязательными и в большинстве случаев – нежелательными. Они могут привести к серьезным проблемам в программах. Для предотвращения этих последствий необходимо, чтобы функция работа с копией значения аргумента, а не с исходными данными. Можно было бы объявить локальную переменную в функции-процедуре и копировать аргумент в эту локальную переменную. Копирование значении аргумента в локальные переменные функции обычно нежелательно. Дополнительные переменные увеличивают объем памяти, необходимой для функции, и количество выполняемой программистом работы. Дополнительные переменные могут также привести в беспорядок программный код, усложняя его до ошибочного. Более легкий и предпочтительный способ обеспечить работу функции только с копиями значения аргумента, а не с исходным значением – это указать VBA, что аргумент должен передаваться по значению, а не по ссылке. (Помните, передача по значению дает функции копию значения аргумента; передача по ссылке открывает функции доступ к исходным данным в аргументе.) Чтобы явно указать, передает VBA аргумент по значению или по ссылке, надо использовать ключевое слово ByVal или ByRef перед аргументом, для которого необходимо задать метод передачи. Как можно понять по именам ключевых слов, при использовании ByVal VBA передает аргумент по значению, а при ByRef – по ссылке.
Function Sconcat2(ByVal argl As String, ByVal arg2 As String) As String argl = Trim(argl) arg2 = Trim(arg2) Sconcat2 = argl & arg2 End Function Sub Test_Sconcat2() Dim a1 As String Dim a2 As String a1 = " Значение a1:" a2 = " Значение a2:" MsgBox a1 & a2,, "До вызова Sconcat2" MsgBox Sconcat2(a1, a2),, "При вызове Sconcat2" MsgBox a1 & a2,, "После вызова Sconcat2" End Sub
Значения переменных а1 и а2 не изменились после вызова функции Sconcat2. Не следует объявлять аргументы по значению (ByVal), если функция-процедура не изменяет этот аргумент, так как передача аргументов по значению может использовать больше памяти и времени для выполнения, чем передаче аргументов по ссылке – передача аргументов по значению приводит к тому, что VBA делает копию данных для аргумента. Следует объявлять аргумент с ключевым словом ByVal для передачи его по значению, если у имеются сомнения, следует ли передавать этот конкретно аргумент по ссылке или по значению: потери в объеме памяти и скорости при передаче по значению не слишком велики. Кроме того, передача аргумента по значению эффективнее и делает код более понятным, чем создание собственной копии значения аргумента в локальной переменной.
Дата добавления: 2014-01-04; Просмотров: 272; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |