Главная страница

Введение 8 Этапы создания Windowsприложения 8


Скачать 6.98 Mb.
НазваниеВведение 8 Этапы создания Windowsприложения 8
АнкорVisual Basic 2005 (word97).doc
Дата22.12.2017
Размер6.98 Mb.
Формат файлаdoc
Имя файлаVisual Basic 2005 (word97).doc
ТипРеферат
#12532
страница50 из 63
1   ...   46   47   48   49   50   51   52   53   ...   63

11.4. Локальные и глобальные переменные


Переменная, описанная в теле подпрограммы, называется локальной. Ее значение доступно только в той подпрограмме, в которой описана данная переменная. После завершения подпрограммы значение локальной переменной теряется, если эта переменная не была объявлена с помощью оператора Static (см. раздел 11.5).

Глобальная переменная описывается вне всех подпрограмм, в том числе и вне главной (вызывающей) программы. Как правило, глобальные переменные описываются в самом начале модуля, сразу после заголовка модуля или класса. Для описания глобальных переменных используются операторы Private и Public (см. раздел 4.3). В отличие от локальной переменной значение глобальной переменной доступно во всех подпрограммах модуля и всегда сохраняется между вызовами подпрограмм. Но широкое использование глобальных переменных в сложных программах не рекомендуется, так как большое количество глобальных переменных существенно усложняет процесс отладки программы.

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

Рассмотрим пример программы, использующей глобальную переменную. Текст этой программы начинается с объявления глобальной целочисленной переменной n.

Private n As Integer

Затем описываются все необходимые подпрограммы.

Процедура print предназначена для вывода значения целочисленной переменной в окно списка. У нее два входных параметра: stroka – это поясняющий текст, который будет выводиться перед значением переменной, znach – значение, которое надо вывести. Это значение может быть только целым числом. Так как обе переменных в процессе вывода не меняют своих значений, то они передаются по значению. Перед их именами ставим ключевое слово ByVal. Обратите внимание, что по правилам языка Visual Basic 2005 режим передачи указывается отдельно для каждого параметра.

Private Sub print(ByVal stroka As String, _

ByVal znach As Integer)

В окно списка lstA выводим поясняющий текст и значение, которое предварительно преобразуем с помощью функции Str.

lstA.Items.Add(stroka + Str(znach))

End Sub
Следующая процедура изменяет значение глобальной переменной n. Она на единицу увеличивает значение параметра b, переданного по ссылке, и на единицу уменьшает значение глобальной переменной n.

Private Sub Test3(ByRef b As Integer)

b += 1

n -= 1

End Sub
Теперь проанализируем главную (вызывающую) программу. В ней мы опишем локальную целочисленную переменную b.

Dim b As Integer

Определим начальное значение для этой переменной.

b = 6

Теперь зададим значение глобальной переменной n.

n = 8

Очищаем окно списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Выводим поясняющий текст.

lstA.Items.Add("Global")

Используя процедуру print, печатаем начальные значения локальной и глобальной переменных.

print("local b=", b)

print("global n=", n)

Выводим горизонтальную черту, чтобы зрительно отделить исходные данные от полученных результатов.

lstA.Items.Add("----------------------------------")

Вызываем процедуру Test3, чтобы изменить значение локальной переменной b.

Test3(b)

Полученный результат выводим в окно списка с помощью процедуры print. Для контроля правильности работы программы распечатаем значение глобальной переменной n.

print("local b=", b)

print("global n=", n)

Еще раз выведем горизонтальную черту, чтобы зрительно отделить первый блок результатов от второго.

lstA.Items.Add("----------------------------------")

Повторно вызовем процедуру Test3, чтобы с ее помощью изменить значение глобальной переменной n.

Test3(n)

Для контроля правильности работы программы выведем значение локальной переменной b и измененное значение глобальной переменной n.

print("local b=", b)

print("global n=", n)

Пример работы программы приведен на рис. 72. Проанализируем полученные результаты.


Рис. 72. Глобальные и локальные переменные
В первом блоке выведены начальные значения переменных b и n.

Второй блок выводится после первого вызова процедуры Test3, которая должна на единицу увеличить значение переменной b. Действительно, значение переменной b изменилось на единицу и стало равным 7, но при этом изменилось и значение глобальной переменной n. Оно уменьшилось на единицу и тоже стало равно 7.

Третий блок результатов выводится после второго вызова процедуры Test3. В этом случае мы хотим с помощью процедуры изменить значение глобальной переменной n, уменьшив его на единицу. Очевидно, что значение локальной переменной b при этом не должно изменить. Рассмотрим полученные результаты. Действительно, значение переменной b осталось прежним. Но и значение глобальной переменной n не изменилось, хотя мы его передавали в подпрограмму Test3 по ссылке и, следовательно, должны были получить результат.

Так проявляется один из побочных эффектов использования глобальных переменных. Что же происходит на самом деле? При переходе в процедуру Test3 глобальная переменная n подставляется на место формального параметра b. Так как этот параметр передается по ссылке, то все его изменения будут сохранены в памяти компьютера. Таким образом, оператор b += 1 изменяет значение глобальной переменной n, которая, являясь фактической переменной при вызове подпрограммы, подставляется вместо формального параметра b. После этого оператора значение переменной n становится равным 8. Но следующая строка процедуры Test3 изменяет значение глобальной переменной n, уменьшая его на единицу: n -= 1. В результате значение переменной n снова становится равным 7. Очевидно, что с точки зрения главной (вызывающей) программы никакого изменения глобальной переменной n в процедуре Test3 не происходит.
1   ...   46   47   48   49   50   51   52   53   ...   63


написать администратору сайта