Еще раз повторяю вопрос - отправил договор и сканы документов по почте - в начале августа, до 5 го, внес предоплату - летом действовала скидка - чтобы пройти курс в августе, но я уезжал в Москву. По возвращению - и в течение месяца - никакого ответа, никаких зачислений, ничего. Как проверить, пришли ли мои документы в Интуит, предоплата, почему нет зачисления. |
Переменные и типы данных
Область видимости переменных
Все переменные обладают областью определения (областью видимости) и временем жизни. Область видимости переменной - это те процедуры, в которых переменная может быть использована, т.е. в которых доступно значение переменной.
Переменную можно объявить на уровне процедуры или на уровне модуля. Переменные, объявленные на уровне процедуры, доступны только внутри этой процедуры. Это локальные переменные ( Local ) и область их видимости - конкретная процедура. Вне этой процедуры значение переменной непредсказуемо и использование переменной приводит к ошибке выполнения программы.
Переменные, объявленные явно в области описаний ( Declaratives ) при помощи оператора Private или Dim, являются модульными и известны во всех процедурах того модуля или процедурного листа, в котором они объявлены. На модульном уровне не имеет значения, какой использован оператор, но предпочтительнее использовать Private, чтобы отличить объявление модульных переменных от объявления локальных переменных.
Переменные, объявленные явно в области описаний стандартного модуля при помощи оператора Public, являются глобальными. Их значения известны во всех процедурах проекта. Такие переменные называют открытыми или общими переменными.
- Модульные и глобальные переменные должны быть описаны явно.
- Локальные переменные с одинаковыми идентификаторами, определенные в разных процедурах, являются разными переменными и использование подобной переменной в разных процедурах в предположении, что это одна и та же переменная, приводит к ошибке выполнения программы.
- Можно использовать одинаковые идентификаторы для объявления локальных, модульных и глобальных переменных. Если имена переменных конфликтуют, иными словами в процедуре определена локальная переменная, идентификатор которой совпадает с идентификатором модульной или глобальной переменной, то внутри процедуры используется локальная переменная.
Например, если определена переменная Temp на уровне процедуры и на модульном уровне, то внутри процедуры будет использоваться локальная переменная, а значение модульной переменной Temp не будет принято во внимание.
Пример
Процедура использует переменные, объявленные на разных уровнях, и демонстрирует изменение значений этих переменных.
В окне Watches представлены значения переменных PR_A, PR_B и PU_C, которые они имеют до оператора процедуры, на котором остановилось выполнение процедуры (оператор выделен желтым цветом).
увеличить изображение
Рис. 4.4. Использование переменных, объявленных на разных уровнях, и демонстрация изменения значений этих переменных
Время жизни переменных
Время жизни - это тот период, в течение которого значение переменной сохраняется. Обычные локальные переменные инициализируются при входе в процедуру или при первом присвоении, если переменная не объявлена. При выходе из процедуры память, отведенная локальной переменной, освобождается, и переменная теряет свое значение - Visual Basic "забывает" значения локальных переменных. При следующем обращении к процедуре локальная переменная снова инициализируется.
Объявление Static позволяет сохранить значение локальной переменной при выходе из процедуры, т.е. продлить время ее жизни. При первом входе в процедуру статическая переменная инициализируется и получает некоторое значение. При выходе из процедуры память, отведенная такой переменной, сохраняется, но становится временно недоступной. При повторном входе в процедуру статическая переменная имеет то же значение, которое было у нее перед выходом из процедуры.
- Объявление Static может быть указано только для локальных переменных.
- Если ключевое слово Static использовано при объявлении процедуры, то все локальные переменные процедуры статические. Это можно сделать при вставке новой процедуры(команда Insert-Procedure ), пометив опцию All Local variables as Static в диалоговом окне Add Procedure.
- Модульные переменные сохраняют значения в течение времени выполнения программы, записанной в том стандартном модуле или на том процедурном листе, на котором они объявлены.
- Глобальные переменные сохраняют свои значения в течение всего времени выполнения программы проекта.
- Время жизни локальной переменной - процедура, в которой она объявлена.
- Время жизни статической переменной - модуль, в котором определена процедура, объявившая эту переменную.
Инициализация переменных
При входе в процедуру локальные переменные (за исключением переменных объявленных как Static ) автоматически получают начальные значения. Начальные значения устанавливаются в соответствии с типом переменной. Переменные, объявленные на уровне модуля, инициализируются при первом входе в модуль, статические переменные - при первом входе в процедуру.
Тип | Начальное значение |
---|---|
Integer, Long, Single, Double | 0 |
String (переменная длина) | Пустая строка (кол-во символов 0) |
String (фиксированная длина) | Заполняется символами, имеющими ASCII -код 0, иными словами Chr(0) |
Variant | Empty |
Object | Nothing |
На практике для того, чтобы избежать неясностей,
- явным образом инициализировать переменную, прежде чем использовать ее в выражении или в правой части оператора присваивания.