Ключевое слово Static

Помимо переменных уровня процедуры (Dim) существует еще один способ объявления переменных — с ключевым словом Static:

 

Static X As Integer

 

Это означает, что переменная будет сохранять последнее присвоенное ей значение даже после завершения процедуры. Статические переменные удобны для хранения текущего значения накапливаемой суммы. Если пропустить ключевое слово Static (и воспользоваться вместо него Dim), то при каждом запуске процедуры переменная будет обнуляться вместе с другими числовыми переменными. Рассмотрим следующий пример, в котором показана статическая переменная в действии. Посетите кафетерий Sybex и закажите в нем все, что вам угодно. Кофе подается бесплатно, но предупреждаю — туалета здесь нет! Если вы испытываете жажду или нуждаетесь в хорошей дозе кофейного допинга, поступите так:

1. Создайте новый проект типа Standard EXE.

2. Задайте свойству Caption формы Form1 значение Кафетерий Sybex.

3. Создайте надпись в середине верхней части формы. В окне свойств задайте ее свойству Name значение lblQuantity, а свойству Caption — значение Заказано кофе;0.

4. Создайте кнопку под надписью lblQuantity. Задайте ее свойству Name значение cmdAdd, а свойству Caption — значение &Принесите еще!.

5. Дважды щелкните на кнопке cmdAdd в конструкторе форм, чтобы открыть окно программы.

6. Вставьте следующий код в процедуру события Click кнопки cmdAdd:

 

Private Sub cmdAdd_Click()

Static count As Integer

count = count + 1

lblQuantity = "Заказан кофе:" & Str$(count)

End Sub

 

7. Запустите программу и нажмите кнопку, чтобы заказать любое количество чашек кофе.

Переменная count в процедуре события Click объявлена статической (Static), благодаря чему ее значение сохраняется между событиями. В результате переменная помнит, сколько чашек кофе вы успели заказать.

 

ПОДСКАЗКА Чтобы все переменные процедуры превратились в статические, можно оставить для них ключевое слово Dim и задать ключевое слово Static перед именем процедуры, например Private Static Sub cmdAdd_Click().

 

Массивы

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

 

Static X(2) As Integer

X(0) = 7

X(1) = 99

X(2) = 123

 

Для обработки массивов часто применяется цикл For...Next, в котором в качестве

счетчика используется целочисленная переменная (рис. 7.8):

 

Dim Y As Integer

For Y = 0 To 2

Print X(Y)

Next Y

 

Рис. 7.8. Использование цикла For...Next

 

Данный фрагмент выводит на текущей форме значение каждого элемента целого массива X (числа 0,1 и 2 используются в качестве ссылок на элементы). Чтобы созданный массив был доступен на уровне модуля, объявите его с ключевым словом Dim в секции (General)(Declarations) модуля. Если же массив должен быть доступен на уровне приложения, объявите его с ключевым словом Public. Следующий пример показывает, как работать с массивами:

1. Создайте проект типа Standard EXE.

2. Удалите из нового проекта форму Form1. Для этого следует щелкнуть на строке Forml правой кнопкой мыши в окне проекта и выбрать команду Remove Forml из контекстного меню.

3. Добавьте в проект новый модуль — щелкните правой кнопкой мыши в окне проекта и выберите команду Add > Module из контекстного меню.

4. В диалоговом окне Add Module выберите значок ModuLe.

5. В окне программы модуля Module1 добавьте следующую процедуру:

 

Sub Main()

Dim x(7) As Integer

Dim i As Integer

Dim txt As String

 

' Заполнить массив битовыми значениями

For i = 0 To 7

x(i) = 2 ^ i

Next

 

' Вывести массив

For i = 0 To 7

txt = "Элемент массива " & Str$(i) & " = "

txt = txt & x(i)

Next

 

End Sub

 

6. Запустите программу и проследите за окном отладки.

В первой части фрагмента объявляются переменные, необходимые для работы программы. Массив x должен содержать 8 элементов (с индексами от 0 до 7). Переменная i используется в циклах For...Next, а в строке txt выполняется форматирование результата.

Первый цикл For...Next заполняет массив. В соответствии с формулой

 

x(i) = 2 ^ i

 

каждому элементу присваивается значение очередной степени двойки. Не беспокойтесь о математической стороне происходящего — здесь вычисления использованы лишь для примера.

Последний цикл For...Next форматирует переменную txt, а команда Debug. Print выводит ее в окне отладки.

Динамические массивы

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

 

Dim Y() As Integer

 

Было бы расточительно создавать массив заведомо большего размера, чем вам требуется. Чтобы выйти из положения, следует создать динамический массив, не содержащий ни одного элемента (см. выше), и затем добавлять в него элементы по мере надобности. Эта методика особенно полезна при работе с большим количеством элементов.

Затем в массив необходимо добавить элементы, в которых будут храниться значения. Для этого используется оператор ReDim, который может встречаться только в процедурах:

 

ReDim Y(5)

 

Созданным элементам следует присвоить значения. Позднее количество элементов массива снова можно изменить:

 

ReDim Y(7)

 

После выполнения этого оператора все значения, хранящиеся в массиве, теряются. Чтобы сохранить их, пользуйтесь ключевым словом Preserve:

 

ReDim Preserve Y(7)

 

ВНИМАНИЕ При работе с массивами надо представлять себе, что именно вы делаете. При небрежном обращении массивы поглощают довольно большой объем памяти, так что тщательно планируйте свои действия.

 

Константы

Константы обладают некоторым сходством с переменными — они тоже объявляются и им присваиваются значения. Тем не менее в отличии от переменных, значения констант остаются неизменными на протяжении всего жизненного цикла приложения. Использование констант обычно упрощает программирование — намного проще понять и отладить программу с переменной vbModal, чем следить за судьбой какой-нибудь безымянной переменной со значением 1. Одновременно с объявлением константы ей присваивается значение. Для этого используется ключевое слово Const:

 

Const conPi = 3.142

 

Приведенный ниже фрагмент демонстрирует возможности практического применения констант:

 

Const conPi = 3.142

Dim Radius As Integer

Dim Area As Double

 

Option Explicit

 

Private Sub cmdPrintArea_Click()

Radius = 3

Area.= conPi * (Radius ^ 2)

Print Area

End Sub

 

Данный фрагмент вычисляет площадь круга, используя константу с именем conPi (префикс con необязателен, хотя и желателен). Вычисленная площадь круга выводится на текущей форме (рис. 7.10).

 

Рис. 7.10. Результат вычисления площади круга

 

Константы можно объявлять как в процедурах, так и в секциях объявлений модулей. Чтобы создать константу, доступную на уровне приложения, укажите при ее объявлении ключевое слово Global, — например Global Const Pi = 3.142.

Правильный выбор переменных для поставленной задачи является вопросом первостепенной важности. Он не только экономит время при отладке, но и помогает написать более компактную программу и приучает к дисциплине программирования. Нельзя построить дом, пользуясь одной отверткой, — существует великое множество инструментов, и каждый из них решает свою задачу. To же самое относится и к переменным. Старайтесь правильно подбирать средства для решения конкретной задачи.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: