![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Неявное описание переменных и тип VariantСодержание книги
Поиск на нашем сайте
В VBA есть одна интересная возможность, которой с удовольствием пользуются ленивые разработчики, но отвергают программисты, привыкшие работать организованно. Это неявное описание переменных. Вы, вероятно, обратили внимание, что все переменные, использованные в примерах программ, описаны в инструкциях Dim. В действительности, делать это не обязательно. Если VBA не находит описания переменной, он определяет ее самостоятельно. Рассмотрим следующий пример. Sub С_ОбъявлениемПеременной() Dim String1 As String String1 = "Привет!" MsgBox String1 End Sub Если Вы удалите из этой программы вторую строку, результат ее действия не изменится: Sub БезОбъявленияПеременной() String1 = "Привет!" MsgBox String1 End Sub Если инструкция Dim для переменной отсутствует, ей присваивается тип по умолчанию, в данном случае — Variant. Именно он использован в программе БезОбъявленияПеременной для переменной Stringl. Поскольку переменные этого типа могут содержать любые данные, никаких проблем при выполнении программы не возникает. В следующем примере тип Variant присвоен переменной Stringl явно. «Плюсы» и «минусы» типа Variant Когда значение присваивается переменной типа Variant, VBA определяет его тип и ответствующим образом изменяет переменную. Тип Variant по умолчанию присваивается всем переменным, которые не описаны инструкцией Dim. Если Вы хотите для неописанных переменных задать другой тип, используйте инструкцию DefType о которой мы расскажем немного позже. Применение типа данных по умолчанию для всех переменных, конечно, сокращает код. Некоторые разработчики весьма высоко оценили этот способ, позволяющий использовать новые переменные в любом месте программы, не заботясь об их описании. Тем не менее у неявного описания переменных есть три недостатка, о которых, вероятно, знают программисты, заботящиеся о структуре и организации приложений. Во-первых, на значения типа Variant расходуется больше памяти. Одна такая переменная занимает 16 байт (плюс по 1 байту на символ, если в ней содержится строка), а это почти в два раза больше, чем для других «объемных» типов — Currency, Date и Double. Коротким программам требуется, как правило, незначительный объем памяти, но в больших приложениях со множеством переменных Вы, безусловно, столкнетесь с проблемой производительности, а может быть и исчерпаете всю доступную память системы.
Второй недостаток также связан с производительностью. Когда переменной типа Variant присваивается значение, VBA перестраивает ее соответственно новому типу, на что уходит определенное время. Особенно существенны потери при этом в циклах, так как переменные перестраиваются по несколько раз. Третий недостаток — трудно отслеживать данные в переменных типа Variant. Вы никогда не сможете точно сказать, что хранится в такой переменной, поскольку в ней может быть все, что угодно. Это сильно затрудняет отладку программы и поиск ошибок в ней. Все упростится, если все Ваши переменные всегда содержат данные только определенного типа. Рассмотрим в качестве примера код для математических вычислений с переменной. Допустим, что при вызове подпрограммы в нее передается переменная Integer. В этом случае Вам не надо проверять, будет ли для расчетов действительно использовано численное значение. Если же Вы передаете в подпрограмму переменную Variant, Вам придется проверять это каждый раз. Не исключено, что по ошибке в подпрограмму будет передана дата, строка или даже ссылка на объект, выяснение займет еще некоторое время и приведет к дальнейшему снижению производительности. Однако все перечисленные недостатки не означают, что от типа Variant нужно полностью отказаться. Он очень полезен, когда Вы не знаете заранее тип значения, сохраняемого в переменной. Допустим, Ваше приложение выдает на экран приглашение на ввод целого числа. Но пользователь может ввести действительное число или даже строку — все имеют право на ошибку! Поэтому Ваша подпрограмма должна воспринимать данные любого типа. Поместите введенное значение в переменную Variant, а затем скопируйте в переменную нужного типа для дальнейшего использования.
|
|||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.183.239 (0.006 с.) |