2. Переменные и процедуры, их области видимости.
2.1. Явное и неявное объявление переменных.
Явное объявление переменных означает, что в программе для указания типа переменных будет использоваться конструкция As <тип>.
Пример:
Dim first As Integer
Public second As String
Неявное объявление - определение типа переменной по ее имени (точнее, по суффиксу имени) без использования ключевого слова As. Суффикс состоит из одного символа, соответствие между суффиксами и типами представлено в следующей таблице:
Тип переменной | Суффикс |
Integer | % |
Long | & |
Single | ! |
Double | # |
Currency | @ |
String | $ |
Variant | Без суффикса |
Если в модуле в разделе глобальных объявлений нет предписания Option Explicit, то переменные можно не объявлять. Они будут создаваться при первом использовании с помощью неявного объявления. !!!!!!!!!!! (Option Explicit и объявлять - обязательно)
Пример использования неявного объявления:
Inta% = 6 `создает переменную типа Integer и присваивает ей значение 6
Str1$ = "string1" `создает переменную типа String и присваивает ей значение
Pi# = 3.1415926 `создает переменную типа Double и присваивает ей значение
Varvar = 5 `создает переменную типа Variant и присваивает ей значение 5
Если же в модуле существует предписание Option Explicit, то переменную перед использованием необходимо объявить. Однако и здесь можно прибегнуть к неявному описанию.
Пример:
Dim Inta%
Dim Str1$
Dim Pi#
Dim Varvar
2.2. Строки переменной и фиксированной длины.
Большинство строк, с которыми приходится иметь дело в программах, являются т.н. строками переменной длины. Строковая переменная данного типа может иметь длину до 2 Гбайт (2 млрд. символов). Причем VB сам заботится об резервировании и изменении памяти, отводимой под такую переменную.
Однако в VB предусмотрен и другой строковой тип данных - строки фиксированной длины. Длина такой переменной всегда постоянно, вне зависимости от значения. Если длина строки, хранящейся в строковой переменной фиксированной длины меньше, чем размер строковой переменной, то оставшееся места заполняется пробелами. Если же длина хранимой строки больше, то «лишняя» часть отсекается по длине переменной!
Строковая переменная фиксированной длины объявляется следующим образом:
<квалификатор видимости> <имя переменной> As String * <длина>
Пример:
Dim Strstr1 As String * 25
Public Strstr2 As String * 255
Очевидно, что у использования переменных постоянной длины есть только одно преимущество - присвоение такой переменной значений происходит несколько быстрее.
2.3. Квалификаторы видимости и области видимости переменных.
Помимо имени переменной и ее типа в операторе объявления переменной указывается т.н. область видимости переменной, т.е. область ее действия.
Существуют три зоны видимости переменных:
- Видимость в процедуре
- Видимость в форме (модуле)
- Видимость в проекте
И четыре ключевых слова, использующихся для задания области видимости (квалификаторы видимости):
- Dim
- Private
- Public
- Static
В зависимости от нахождения оператора объявления переменной (в процедуре или модуле) она имеет следующие зоны видимости:
Квалификатор видимости | Определена в процедуре или функции | Определена в модуле (в глобальном разделе описания) | |
Dim | Видимость только в процедуре | Видимость в модуле и всех функциях и процедурах модуля | |
Private | Не используется | Видимость в модуле и всех функциях и процедурах модуля | |
Public | Не используется | Видимость во всем проекте | |
Static | Видимость только в процедуре, переменная становится статической | Не используется | |
Статическая переменная в отличие от динамической (динамическими являются все переменные по умолчанию) не пересоздается при каждом вызове функции или процедуры. Она сохраняет свое значение на протяжении выполнения программы (или существовании экземпляра формы или класса, если переменная определена в методе или обработчике событий формы или методе класса).
2.4. Квалификаторы видимости и области видимости процедур и функций.
Для функции и процедур тоже существуют свои области видимости.
Существуют три зоны видимости процедур и функций:
- Видимость в форме (модуле)
- Видимость в проекте
И три ключевых слова, использующихся для задания области видимости (квалификаторы видимости):
- Private
- Public
В зависимости от нахождения оператора объявления функции или процедуры (в форме или модуле) она имеет следующие зоны видимости:
Квалификатор видимости | Определена в форме | Определена в модуле |
Private | Видимость только в форме | Видимость только в модуле |
Public | Видимость во всем проекте | Видимость во всем проекте |
Если указано ключевое слово Static, то все переменные, объявленные в этой процедуре или функции становится статическими.
Доступ к переменным и функциям/процедурам, определенным в форме и видимым во всем проекте осуществляется через имя формы, точку и имя переменной или процедуры/функции. Для переменных, определенных в модуле, имя модуля указывать не надо, если нет одинаковых Public переменных в разных модулях.