к оглавлению VB   VBScript   VBA   VB7 (.NET)   к 4GL - визуальному программированию

Переменные Visual Basic

  1.  Типы переменных.
  2.  Подробнее о переменных.
  3.  Объявление переменных: оператор Dim для различных типов данных.
  4.  Необходимиость объявления переменных.
  5.  Изменение значений по умолчанию для типов.
  6.  Область видимости переменных.

В Visual Basic переменные хранят информацию (значения). При их использовании Visual Basic резервирует область в памяти компьютера для хранения данной информации. Имена переменных могут достигать 255 символов в длину, начинаются они с буквы, за которой могут следовать другие буквы, цифры или символы подчеркивания. Регистр символов и наименований переменной значения не имеет. Следующая таблица перечисляет некоторые возможные имена переменных и объясняет, подходят ли они по стандарту.
 
 
 
Base1_Ball Подходит
1Base_Ball Не подходит, так как начинается не с буквы.
Base.1 Не подходит, так как используется точка.
Base&1 Не подходит, так как используется амперсанд.
ThisIsLongButOK Не подходит, так как длина всего 15 символов.
 
      
 
    Все символы в имени переменной являются значимыми, но их регистр не имеет значения. BASE обозначает ту же переменную, что и base. С другой стороны, Base отличается от Base 1, и оба они - от Base_ I. Однако Visual Basic всегда изменяет первую букву переменной на заглавную при ее определении.
    Использование осмысленных имен помогает документировать текст программы и облегчает неизбежный процесс ее отладки. Выразительное имя переменной является прекрасным способом для объяснения смысла применения многих инструкций в коде программы.
    В качестве имен новых переменных нельзя использовать зарезервированные слова; например. Print не подходит для этого. Однако такие слова могут присутствовать как часть имени переменной, например, Printlt. Visual Basic будет выдавать сообщение об ошибке, если программист попытается использовать зарезервированное слово в качестве названия своей переменной, причем обычно сразу после нажатия клавиши ENTER.
    Одно из наиболее общих соглашений об именах переменных состоит в использовании заглавных букв в начале каждого из слов, составляющих данное имя (например, Printlt, а не Printit). Это соглашение носит название "имена переменных со смешанным регистром". Оно используется и в данной книге, поскольку большинство людей находят такие имена переменных более читабельными. Некоторые еще используют и символ подчеркивания (например, Print_It), но здесь данный стиль не используется, поскольку отнимает много места и иногда вызывает проблемы при отладке.
 

Типы переменных

    Visual Basic работает с 14 стандартными типами переменных. Кроме того, программист может определить собственный тип данных. В данном разделе описаны те из них, которые в основном применяются при работе с данными.

String
    Строковые переменные хранят символы. Один из способов обозначить данный тип переменной состоит в добавлении символа "$" к концу ее имени, например: AStringVariable$. Теоретически такая переменная может содержать до 2 миллиардов символов. В любом случае на конкретном компьютере это число будет гораздо меньше из-за ограниченных объемов оперативной памяти, ресурсов Windows или числа символов, используемых в форме.
    Одно из наиболее основных применений строковых переменных состоит в выборе информации из полей ввода. Например, если есть поле ввода с именем Textl, то тогда оператор ContentOfTextlS = Textl.Text присваивает строку из поля ввода переменной в левой части данного оператора.

Integer
    Целочисленные переменные могут хранить только относительно небольшие целые числа (в диапазоне от -32768 до +32767). Арифметические операции над такими числами выполняются очень быстро. Для обозначения такого типа используется символ "%":
AnIntegerVariable% = 3

Long Integer
    Данный тип впервые появился в языке QuickBASIC. В таких переменных хранятся целые значения от -2 147483648 до +2 147483647. Обозначается символом "&". Арифметические операции над такими числами выполняются тоже очень быстро, и при работе с процессором 386DX или 486DX существует лишь небольшая разница в скорости вычислений между Long Integer и Integer.

ALongIntegerVariableS = 123456789 Single Precision

    Идентификатором для данных чисел является символ "!". Данный тип переменной позволяет хранить дробные числа с точностью до семи цифр. Это означает, что если получается результат 12345678.97, то часть 8.97 не является точной. Результат может быть равен, к примеру, 12345670.01. Длина чисел может достигать 38 знаков. Вычисления с данными переменными тоже будут приблизительными. Более того, арифметические действия выполняются медленнее, чем с целочисленными переменными.

Double Precision
    Переменные такого типа позволяют хранить числа с точностью до 16 цифр и длиной до 300 символов. Идентификатором является "#". Вычисления с ними тоже являются приблизительными, а скорость их относительно небольшая. В основном переменные типа Double Precision используются для научных расчетов.

Currency
    Данный тип отсутствовал в версиях GW-BASIC и QuickBASIC. Он создан для того, чтобы избежать ошибок при преобразовании десятичных чисел в двоичную форму и наоборот. (Невозможно 1/10 представить как сумму 1/2,1/4, 1/8, 1/16 и т.п.) Данный тип может иметь до 4 цифр после запятой, и до 14 - перед ней. Внутри данного диапазона вычисления будут точными. Идентификатор представляет собой символ "@". Поскольку все арифметические операции, кроме сложения и вычитания, выполняются так же медленно, как и в случае переменных с двойной точностью, данный тип является предпочтительным для проведения финансовых расчетов. (Для тех, кто интересуется: данный тип использует целые числа из 19 разрядов, которые затем делятся на 10000. Это позволяет организовать 15 знаков до запятой и 4 после нее.)

Date
    Этот тип данных позволяет хранить значения времени и даты в промежутке от полуночи 1 января 100 года до полуночи 31 декабря 9999 года. Такие значения в тексте программ обозначаются символами "#", например:
Millenium = #January 1, 2000#
    Если вводится только значение даты, Visual Basic полагает, что время равняется 00:00.

Byte
    Байтовый тип является новым в Visual Basic 5 и предназначен для хранения целых чисел от 0 до 255. Его использование позволяет сильно экономить оперативную память и уменьшать размер массивов (см. главу 10) по сравнению с предыдущими версиями Visual Basic. Кроме того, он используется при работе с двоичными файлами.

Boolean
    Булев тип данных может хранить только два значения: True либо False. Его использование вместо целочисленных переменных является хорошим стилем программирования.

Variant
    Данный тип добавлен в Visual Basic 5 из версии 2.0. Переменная типа variant может содержать данные любого типа. Если Visual Basic не знает тип принимаемых данных, необходимо использовать variant.
Тип информации не имеет значения, поскольку variant может содержать любой тип данных (численный, дата/ время, строковый). Visual Basic автоматически производит необходимые преобразования данных, поэтому не стоит беспокоиться об этом. С другой стороны, можно использовать встроенные функции для проверки типа данных, хранящихся в переменной типа variant. Они позволяют легко проверить, правильно ли пользователь вводит информацию.
    Использование такого типа данных, как variant, замедляет работу программы, так как требуется время и ресурсы для операций преобразования типов. Кроме того, многие программисты понимают, что использование автоматических преобразований типов данных приводит к неаккуратному виду программ. Единственная причина в использовании variant состоит в возможных ошибках при преобразовании типов непосредственно программистом.
 

Подробнее о переменных

    В отличие от большинства версии BASIC, в одной программе Visual Basic нельзя использовать имена переменных, отличающиеся только типом (идентификатором), например, А% и А!. При попытке использовать двойное имя возникает ошибка "двойное определение" (duplicate difmition) при запуске программы.
При первом использовании переменной Visual Basic временно присваивает ей пустое значение и тип variant. Это значение исчезает в тот момент, когда переменной присваивают реальное. Каждый тип данных имеет свой образец "пустого" значения. Для строковых переменных это строка нулевой длины (" "). Для численных переменных это ноль. Полагаться можно только на значения по умолчанию, если они документированы (например, в комментариях). Иначе придется столкнуться с множеством трудно уловимых ошибок. Поэтому рекомендуется инициализировать значения переменных в первых строках процедур обработки событий.

Пример: обмен значениями
    Одной из распространенных задач является обмен значениями между двумя переменными. Удивительно, но разработчики Visual Basic убрали из языка оператор Swap, известный в QuickBASIC. Поэтому код придется писать самим. Предположим, что есть две переменные х и у, и попробуем поменять местами их значения:

х = у
у = х

    Такой вариант работать не будет, но важно разобраться из-за чего. Первый оператор присваивает переменной х значение переменной у, но тем самымуничтожает старое значение х.. В результате второй оператор присваивает переменной у ее же первоначальное значение. Решение состоит в использовании временной переменной:

temp = х   'Копирует старое значение х в temp
х = у         'Теперь х содержит старое значение у
у = temp   'Теперь у содержит оригинальное значение х
 

Объявление переменных: оператор Dim для различных типов данных

    Большинство людей предпочитают не пользоваться идентификаторами для обозначения типа переменной (тем более, что для таких типов, как дата/время, вообще не существует идентификаторов). Вместо этого они используют оператор Dim. Такая операция носит название объявления. Объявление типов переменных в процедурах обработки событий перед их использованием - и, естественно, с комментариями - является хорошим стилем в программировании. Это также помогает улучшить читабельность текстов программ.

Private Sub cmdCalculate Click
'Данная процедура вычисляет проценты по закладной
Dim Years As Integer
Dim Rate As Currency
Dim Amount As Currency
Dim I As Integer
Dim TextBox As String
Dim Interest As Currency End Sub

Объявления переменных можно комбинировать в одной строке, например:
Dim Year As Integer, Rate As Currency, Name As String


Предупреждение: Общей ошибкой является использование следующего выражения:

Dim X, Y, Z As Integer

в предположении, что все три переменные будут целого типа. Фактически в данном случае переменные Х и Y будут объявлены как variant, и только Z - как integer. Чтобы избежать этого, необходимо каждый раз использовать идентификатор типа.


    Если переменная объявлена при помощи оператора Dim, в случае использования переменной с тем же именем и другим идентификатором типа произойдет ошибка "двойное определение" при запуске программы. Например, если следующее выражение Dim Count As Integer объявляет переменную Count, то нельзя использовать переменные CountS, Count!, Count# и Count@. Можно использовать только имя Count%, но это всего лишь другая форма для имени переменной Count.
    И, наконец, чтобы присвоить переменной тип variant, используют оператор Dim без As:

Dim Foo     'объявляет Foo переменной типа variant

Можно написать и так:

Dim Foo As Variant     ' проще для прочтения


Примечание: Некоторые программисты используют соглашение о наименованиях, по которому перед именем переменной указывается префикс с ее типом строчными буквами, например, sngInterestRate или intCount.

Необходимость объявления переменных

    Одной из наиболее общих ошибок в программах является использование необъявленных переменных. Проблема состоит в том, что Visual Basic позволяет создавать переменные "на лету", как только они первый раз встречаются в программе. Если перепутать имя переменной. Visual Basic создаст новую с похожим именем и присвоит ей значение по умолчанию, что тут же приведет к ошибкам. Эту ошибку трудно обнаружить, поскольку имена переменных очень похожи.
    Простейший способ избежать подобных ошибок состоит в принудительном объявлении всех переменных. Тогда при ошибке в имени переменной будет выдано сообщение. Разработчики Visual Basic предусмотрели такую возможность работы, но по умолчанию она не используется.
    Оператор, необходимый для этого, называется Option Explicit. Это первый из операторов, не используемый в процедурах обработки событий. Хороший способ запомнить для себя его принцип работы состоит в использовании Option Explicit для изменения значений по умолчанию.


Примечание: Любая информация, которая должна быть доступна всем процедурам обработки событий, относящихся к форме, размещается в разделе (General) данной формы.

    Для того чтобы поместить Option Explicit в раздел (General), необходимо:
 


Примечание: Часто использовать объявления на уровне формы в разделе (General) понадобится, когда читатель будет экспериментировать с примерами программ из справочной системы.

    (Для копирования примера программы из справочной системы можно использовать кнопку Copy в окне Code для примера. Затем можно использовать пункт Paste из меню Edit для вставки примера в окно Code.). После того как Visual Basic встречает команду Option Explicit, он более не позволяет использовать необъявленные переменные. Если попробовать все же применить такую переменную, будет выдано сообщение об ошибке, как показано ниже.
 


Совет: Чтобы использовать обязательное объявление типа переменной, можно воспользоваться страницей Editor диалоговой панели Tools|0ptions. Автор (и, по его сведениям, все серьезные программисты) всегда устанавливает данный флажок. После этого оператор Option Explicit автоматически вставляется в те места кода, где это необходимо.

Изменение значений по умолчанию для типов

    Следующее выражение автоматически присваивает переменным I, J и К тип variant:

Dim I, J, К

    Предположим, в новой программе почти все переменные должны быть целочисленными. В таком случае удобно организовать их объявление так, чтобы переменная, для которой не указан тип, больше не объявлялась как variant. Для этого используется оператор DefType. В следующей таблице приведено несколько примеров его использования:
 
 
 
 
Оператор  DefType
Описание
DefInt A-Z
Все переменные получают тип integer.
 DefInt I-J
Все переменные, начинающиеся с букв I и J, получают тип integer.
DefStr S-Z
Все переменные, начинающиеся с букв от S до Z, получают тип String
       
 
    В частности, можно установить соглашение, что все переменные, начинающиеся с I, будут целочисленными, с помощью Deflnt I. После этого оператор Dim I... будет объявлять переменные типа integer. Основные формы различных операторов DefType, необходимых в данной главе:

Deflnt         диапазон букв    (для integer)
DefLng       диапазон букв    (для long integer)
DefSng       диапазон букв    (для single precision)
DefDbl       диапазон букв    (для double precision)
DefCur       диапазон букв    (для currency)
DefStr        диапазон букв    (для string)
DefVar       диапазон букв    (для variant)
DefBooi      диапазон букв    (для boolean)
DefByte      диапазон букв    (для byte)
DefDate     диапазон букв     (для date)

    Буквы не обязательно должны быть заглавными: DefStr s-Z и DefStr S-Z работают одинаково. Соглашения о типах можно всегда изменить, используя идентификатор или оператор Dim для конкретной переменной. Оператор DefType размещают в том же разделе (General), что и Option Explicit.

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

    Программисты применяют термин область видимости, когда хотят сказать о возможности использования переменной из одной части программы в другой ее части. В старых языках программирования все переменные были доступны во всех частях программы, поэтому сохранение целостности наименований представляло большую проблему. Например, если в приложении использовались две переменные Total, то их значения уничтожали друг друга.
    Решение данной проблемы в современных языках высокого уровня, таких как Visual Basic, состоит в изолировании переменных внутри процедур. До тех пор пока это не задано специальным образом, значение переменной Total в одной процедуре никак не влияет на значение переменной с таким же именем в другой процедуре. В терминах программирования данный подход означает, что данные переменные являются локальными по отношению к процедурам,  если не указано иначе. В частности, процедура обработки события обычно не имеет никакой связи с другой процедурой того же типа. Обычно не принято работать с переменными по умолчанию. Если необходимо быть уверенным, что данная переменная является локальной, нужно объявить ее внутри процедуры события при помощи оператора Dim.

к оглавлению VB   VBScript   VBA   VB7 (.NET)   к 4GL - визуальному программированию

Знаете ли Вы, что в 1965 году два американца Пензиас (эмигрант из Германии) и Вильсон заявили, что они открыли излучение космоса. Через несколько лет им дали Нобелевскую премию, как-будто никто не знал работ Э. Регенера, измерившего температуру космического пространства с помощью запуска болометра в стратосферу в 1933 г.? Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution