Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема6+Область определения переменных и время жи....doc
Скачиваний:
0
Добавлен:
27.04.2019
Размер:
556.03 Кб
Скачать

Переменные уровня процедуры

Переменная, объявленная в процедуре, распознается только внутри этой процедуры. В следующем примере переменная описывается внутри процедуры с типом Integer:

Dim iTest As Integer

Переменные уровня формы

Переменные, объявленные внутри раздела General Declarations формы, могут быть Private или Public.

Переменные Private доступны всем процедурам внутри формы, но невидимы для любой процедуры вне формы.

Переменные Public доступны всему приложению как свойство формы. При доступе к Public переменной уровня формы вне формы ее необходимо уточнить именем формы.

Например:

Public A As Integer ' Объявление в форме

form1 . A = 4 ' Использование вне формы

Переменные уровня стандартного модуля

Переменные, объявленные внутри раздела General Declarations модуля, могут быть Privat или Public. Переменные, объявленные на уровне модуля, доступны в течение всего времени выполнения приложения.

Переменные Private доступны только внутри модуля.

Переменные Public доступны в любом месте приложения.

К Public переменной уровня модуля можно обратиться, указав только имя переменной. Например: |

' Объявление переменной в модуле Public A As Integer

' Использование переменной вне модуля A = 5

' Одно и то же имя переменной используется в нескольких модулях Modulel.A = 5

Время существования переменных

Период существования переменной или время жизни (lifetime) означает, как долго переменная является доступной.

Период существования определяется переменной тем, где переменная объявлена (в процедуре или модуле) и как она объявлена (как Static или не Static).

Переменные уровня процедуры

Переменная уровня процедуры доступна, пока работает процедура. При повторном вызове процедуры переменная повторно инициализируется (создается заново).

Если требуется, чтобы переменная сохраняла свое значение и повторно не инициализировалась, ее следует объявлять как Static.

Переменные, объявленные как Static, все же доступны только данной процедуре; однако переменные сохраняют свои значения весь период выполнения приложения.

В следующем фрагменте переменная iRet сохраняет свое значение при каждом вызове процедуры Prod. Переменная iValue каждый раз восстанавливается в 0:

SUB Prod ()

Static iRet As Integer

Dim iValue As Integer

iRet = iRet +1

end Sub

Переменные уровня формы

Переменные, объявленные на уровне формы, поддерживаются до тех пор, пока объектная переменная формы не будет установлена в Nothing, то есть пока существует форма. Пока этого не произойдет, переменные уровня формы сохраняют свои значения даже при выгрузке формы ( метод Unload).

При установке переменной формы в Nothing переменные очищаются, и выполняется событие Terminate формы.

В следующем операторе объектная переменная формы Form2 устанавливается в Nothing:

Set Form2 = Nothing

Объявление всех локальных переменных как статических

Чтобы сделать все локальные переменные в процедуре статическими, следу­ет поставить перед заголовком процедуры (procedure heading) ключевое слово Static. Например:

Static Function RunningTotal(num)

Это приводит к тому, что все локальные переменные в процедуре становятся статическими, независимо от того, как они определены: в операторах Static, Dim или private или неявным образом.

Константы

Часто оказывается, что код содержит часто используемые постоянные значения, или программисту приходится работать с некоторым набором чисел, которые трудно запомнить.

В таких случаях можно улучшить читаемость кода, а также его поддержку, используя константы (constants) — выразительные имена, идентифицирующие некоторые неизменяемые числовые значения или строки текста.

Константы невозможно изменить или назначить им новые значения, как в случае с переменными. Различают две большие группы констант:

1. Внутренние (intrinsic) или системные (system-defined) константы, предос­тавляемые приложениями или элементами управления. Константы сис­темы Visual Basic перечислены в библиотеках объектов Visual Basic (VB) и Visual Basic for applications (VBA) в окне Object Browser (Просмотр объек­тов). Другие приложения, предоставляющие библиотеки объектов, на­пример, Microsoft Excel и Microsoft Project, также предоставляют список констант, которые можно использовать с их объектами, методами и свойствами. Константы также определены в объектной библиотеке для каждого элемента управления ActiveX.

2. Символические (symbolic) или определяемые пользователем (user-defined) константы, объявляемые оператором const. Определяемые пользователем константы описаны ниже в разделе данной главы "Создание собственных констант".

В Visual Basic имена констант задаются с использованием строчных и про­писных букв, с префиксом, указывающим на библиотеку объектов, в кото­рой определена константа. Константы из библиотек объектов Visual Basic и Visual Basic for applications имеют префикс vb, например, vbTitleHorizontal.

Префиксы предназначены для предупреждения случайных коллизий в слу­чаях совпадения имен констант, имеющих разные значения. Тем не менее, может оказаться, что две библиотеки объектов имеют одноименные кон­станты, представляющие разные значения. В этих случаях определяющим является приоритет объектной библиотеки.

Чтобы быть абсолютно уверенным, что подобные коллизии не произойдут, следует ссылаться на константы, используя следующий синтаксис:

[libname.][modulename.]constname

Здесь libname обычно имя класса элемента управления или библиотеки, modulename — имя модуля, в котором определена константа, a constnanie — имя константы. Каждый из перечисленных элементов определен в библио­теке объектов, и его можно посмотреть в Object Browser.

Создание собственных констант

Синтаксис оператора объявления констант таков:

[Public I Private] Const constantnames [ as type] = expression

Параметр constant name любое правильное символическое имя (правила именования констант такие же, как для переменных), expression — выра­жение, составленное из числовых и текстовых констант и операторов, одна­ко нельзя использовать в нем вызовы функций.

Оператор Const может представлять математические величины или значение дата/время:

Const conPi = 3.14159265358979

Public Const conMaxPlanets As Integer = 9

Const conReleaseDate = #1/1/95#

Оператор Const можно также использовать для определения строковых кон­стант:

Public Const conversion = "07.10.А" Const conCodeName = "Enigma"

В одной строке оператора можно поместить несколько объявлений кон­стант. Тогда они разделяются запятой:

Public Const conPi = 3.14, conMaxPlanets = 9, _ conWorldPop = 6E+09

Выражение справа от знака равенства (=) — чаще всего число или строка символов, но оно может быть и выражением, результатом которого должно быть число или строка символов (хотя это выражение и не должно содер­жать вызовы функций). Можно даже определять новые константы с помо­щью ранее определенных:

Const conPi2 = conPi * 2

Определив константы, их можно использовать в программном коде для улучшения его читаемости. Например:

Static SolarSystem(l To conMaxPlanets) If numPeople > conWorldPop Then Exit Sub

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

Область видимости констант, объявляемых оператором Const, определяется так же, как для переменных:

  • Для создания константы, которая существует только внутри процедуры, следует объявлять ее в процедуре

  • Для создания константы, доступной всем процедурам в модуле, но не доступной вне модуля, следует объявлять ее в секции Declarations модуля

  • Для создания константы, доступной всему приложению, следует объяв­лять ее в секции Declarations стандартного модуля и помещать ключевое слово public перед оператором Const. Открытые константы нельзя объяв­лять в модуле формы или класса

Циклические ссылки

Константы можно определять с помощью других констант, поэтому необхо­димо быть внимательным, чтобы не получить циклическую ссылку двух или более констант. Циклическая ссылка образуется, если каждая из двух или более открытых констант определена через другие. Например:

' В модуле 1:

Publiс Const conA = сопВ * 2 ' Доступна через приложение. ' В модуле 2:

Public Const conB = conA / 2 ' Доступна через приложение.

Встретив циклическую ссылку во время выполнения, Visual Basic генерирует ошибку. Такой код нельзя выполнить, пока не будут ликвидированы цикли­ческие ссылки. Во избежание циклических ссылок следует задавать открытые константы в одном модуле или, по крайней мере, в их небольшом числе.