назад | содержание | вперед

Глава 5. Основные элементы программирования.

В этой главе рассмотрим основные средства Visual Basic, используемые при создании программ.

Переменные

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

Имена переменных

Для того чтобы сделать ваши переменные более наглядными и простыми для чтения, рекомендуется давать им имена, имеющие определенное смысловое значение. Существует несколько правил задания имен переменных;

Замечание

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

Например, допустимы следующие имена переменных:

CurrentNum, Total, Date_of_birth

Следующие имена недопустимы:

1Time, $Total, Date of birth

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

Типы данных

В Visual Basic вы можете применять следующие типы данных:

Для хранения чисел в Visual Basic используется пять разных типов данных. Для хранения целочисленных данных предназначены типы integer и Long. Первый из них служит для хранения целых чисел в диапазоне от —32768 до 32767 и занимает в оперативной памяти два байта. Для хранения больших целочисленных значений в диапазоне от —2 147483648 до 2 147483648 следует выбрать тип данных Long. В этом случае для хранения переменной выделяется 4 байта. Аналогично, для хранения десятичных чисел с плавающей точкой предназначены типы данных single и Double. Переменная с типом данных single занимает 4 байта и может принимать значения в диапазоне -3,4^38 ... -1,4^-45 для отрицательных чисел и 1,4^-45 ... 3,4^38 для положительных чисел. Если этого диапазона вам недостаточно, используйте десятичные числа с плавающей точкой двойной точности, определяя для них тип данных Double. В этом случае переменной выделяется 8 байтов, которых достаточно для хранения чисел в диапазоне -1,7^-308 ... -4,9^-324 для отрицательных чисел и 4,9^-324 ... l,7^+308 для положительных чисел. Для хранения чисел с фиксированной точкой служит тип currency. Переменная данного типа занимает в оперативной памяти 8 байт. Целая часть числа может содержать до 15 цифр, а дробная — до 4.

Используя переменные строкового типа, вы можете хранить строки как фиксированной (до 216 символов), так и переменной длины (до 231 символов). Для переменной, имеющей тип строки с фиксированной длиной, указывается максимальная длина строки. Если длина строки, присваиваемая этой переменной, меньше заданной длины строки, то оставшиеся свободные места заполняются пробелами. При присвоении переменной строки, количество символов которой превышает максимальное значение, все лишние символы отбрасываются. Количество символов, хранящихся в строке с переменной длиной, определяется длиной присваиваемых ей данных. При использовании ASCCII кодировки для каждого символа строки выделяется один байт, а при использовании кодировки Unicode — два байта. Кроме этого выделяется 10 байт для строки в целом.

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

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

Тип данных Date используется для хранения даты и времени. Переменная этого типа требует 8 байт в оперативной памяти.

Тип данных Variant является универсальным. Переменная этого типа может хранить любой из выше описанных типов данных. Все необходимые преобразования выполняются при присвоении переменной значения. Выделяемый переменной объем оперативной памяти зависит от типа присвоенного значения, но не может быть менее 16 байт.

Для хранения ссылок на объекты используется тип данных object. Каждая переменная данного типа требует 4 байта.

При разработке программ в среде Visual Basic в зависимости от типа данных переменных рекомендуется использовать префиксы, приведенные в табл. 5.1.

Таблица 5.1. Префиксы, используемые в наименованиях'переменных

Тип данных

Префикс

Пример

Boolean

bin

bInSuccess

Byte

byt

bytImage

Currency

cur

curPrice

Date

dtm

dtmFinish

Double

dbl

dblSum

Integer

int

intQuantity

Long

Ing

IngTotal

Single

sng

sngLength

String

str

strLastname

Variant

vnt

vntValue



Объявление переменной

В Visual Basic используется явное и неявное объявление переменной. Явное объявление осуществляется операторами Dim, private, Static, public, которые имеют следующий синтаксис:

Dim имяПеременной [As типДанных]

Private имяПеременной [As типДанных]

Static имяПеременной [As типДанных]

Public имяПеременной [As типДанных]

Операторы Dim, Private, static, public определяют область действия переменной. С помощью одного оператора вы можете объявлять несколько переменных, разделяя их запятыми. Примеры объявления переменных приведены ниже:

Private bInSuccess As Boolean

Dim strLastname As String, dblSum As Double

Большинство строк, с которыми приходится работать в Visual Basic, являются строками переменной длины, то есть они могут иметь длину до 2 Гбайт. Длина такой строки изменяется при присвоении ей нового значения. Но в Visual Basic существуют и строки с фиксированной длиной. Их длина остается неизменной независимо от присвоенного ей значения. Если такой переменной присваивается значение, меньшее объявленной для нее длины, то оставшаяся часть переменной заполняется пробелами. При присвоении значения, превышающего длину строки, она усекается до размера переменной.

Для объявления строки с фиксированной длиной используется следующий синтаксис:

Dim имяПеременной As String * длинаПеременной

Параметр длинаПеременной указывает максимальное количество символов, отводимое переменной. Символ звездочки (*) указывает на то, что переменная имеет фиксированную длину.

Предпочтительнее использовать явное объявление переменных, поэтому рекомендуется установить такой режим трансляции программы, при котором допускается только явное объявление переменных. Для этого необходимо в начало модуля вставить оператор option Explicit (Явное объявление). Для автоматического добавления во все модули данного оператора в окне программы Visual Basic выполните команду Options (Параметры) меню Tools (Сервис). Откроется диалоговое окно Options, на вкладке Editor (рис. 5.1) которого установите флажок Require Variable Declaration.

Рис. 5.1. Диалоговое окно Options

Если вы не разместили в модуле оператор Option Explicit, можете использовать неявное объявление переменной. В этом случае тип переменной определяется при первом операторе присвоения, и в этот же момент переменной будет выделена память. Если вы не используете специальные концевые символы, определяющие тип переменной, ей будет присвоен тип variant.

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

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

Присваивая имена переменным с учетом области ее действия, придерживайтесь следующего формата:

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

Префикс

Пример

Глобальная

g

gdtmFinish

Локальная внутри модуля

m

msngLength

Локальная внутри процедуры

нет префикса

strLastname


 

Для создания переменной, которую вы хотите определить в качестве глобальной, в раздел General Declarations главного модуля приложения поместите оператор public. Например:

Public gdtmFinish As Date

Для объявления переменной, локальной внутри модуля или формы, используйте оператор private или Dim в разделе General Declarations модуля или формы (рис. 5.2). В этом случае объявленная переменная будет доступна для всех входящих в форму или модуль процедур, но в то же время недоступной в процедурах других модулей и форм.

Рис. 5.2. Объявление переменных, локальных на уровне модуля

Переменные, локальные на уровне процедуры, создаются операторами Dim или static внутри процедуры. Например:

Sub CalcTotal

Dim bSuccess As Boolean

. . .

End Sub

Присвоение значения переменной

Прежде чем использовать переменную в программе, ей необходимо присвоить значение. Самый простой способ присвоения заключается в использовании оператора присвоения "=", который имеет следующий синтаксис:

переменная = выражение

Аргумент переменная задает имя переменной, которой будет присвоено значение выражения, стоящего справа от знака равенства. Например:

sngFirst = 10

strLastname = "Иванов"

Справа от знака равенства может стоять не только константа, но и более сложное выражение. Например:

sngResult = sngFirst + 255

strName = "Иванов" & ": " & strTeam

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

Переменную типа variant можно использовать для хранения всех типов данных и выполнять операции, не заботясь о типе данных, в них содержащихся. Необходимо только помнить о двух исключениях. Во-первых, выполнять арифметические операции или функции над переменной типа variant можно только в том случае, если она содержит числовое значение. Во-вторых, конкатенацию строк следует осуществлять с помощью оператора "&" вместо оператора "+".

Переменные типа variant могут содержать специальные значения Empty, Null или Error.

Значение Empty

До присвоения значения переменной типа variant ее значение отлично от О, пустой строки или значения Null и именуется Empty. Для определения значения Empty можно использовать функцию isEmpty:

If IsEmpty(x) Then x = 0

Замечание

Переменная типа variant имеет значение Empty только до первого присвоения ей какого-либо значения.

Значение Null

Переменная типа variant может иметь значение Null, используемое для указания пустых данных в приложениях, работающих с базами данных.

С помощью функции isNull можно проверить, имеет ли переменная типа variant значение Null:

If IsNull(x) Then

у = Null

Else

у = 0

End If

Для присвоения переменной типа variant значения Null можно использовать ключевое слово Null:

у = Null

Предупреждение

Присвоение значения Null переменной, не имеющей типа variant, приведет к ошибке.

При работе с переменной типа variant, имеющей значение Null, необходимо иметь в виду следующее:

Значение Error

Переменная типа variant может принимать значение Error при возникновении ошибки в процедуре. Однако в этом случае на уровне приложения ошибка не обрабатывается, что позволяет программисту в зависимости от ее значения предпринимать определенные действия.

Внутреннее представление значений

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

Константы

Константой называют элемент выражения, значение которого не изменяется в процессе выполнения программ. Приведем несколько примеров:

Встроенные константы Visual Basic

Visual Basic содержит огромное количество встроенных констант практически для всех возможных случаев: цвета, клавиши, сообщения и т. п. Встроенные константы имеют префикс vb. Для поиска констант определенной категории воспользуйтесь браузером объектов (рис. 5.3), который открывается при нажатии кнопки Object Browser на стандартной панели инструментов.

Рис. 5.3. Поиск встроенных констант с помощью браузера объектов

Объявление констант

Объявление констант во многом аналогично объявлению переменных. Константы можно объявлять на уровне модуля или процедуры. Область их действия при этом определяется теми же правилами, что и для переменных.

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

Const имяКонстанты [As типДанных] = выражение

Например,

Const strDBErrorMessage As String = "Ошибка доступа к базе данных"

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

[Public I Private] Const имяКонстанты [As типДанных] = выражение

В приведенном ниже примере константа strDBErrorMessage объявлена глобальной:

Public Const strDBErrorMessage As String = "Ошибка доступа к базе данных"

Массивы

Для хранения величин кроме простых переменных можно использовать массивы. Массив представляет собой набор переменных с одним именем и разными индексами. Каждая такая переменная называется элементом массива. Количество хранящихся в массиве элементов называется размером массива. Размер массива ограничен объемом оперативной памяти и типом данных элементов массива.

Все элементы массива имеют одинаковый тип. Однако если массив имеет тип variant, то отдельные элементы могут содержать данные разных типов. Например, одни элементы могут быть числами, другие — строками или объектами.

Индекс элемента указывается в круглых скобках после имени массива. Например, strNames(l), strNames(2), strNames(lO) ЯВЛЯЮТСЯ элементами массива с именем strNames. Вы можете использовать каждый из элементов массива точно так же, как и простую переменную.

Объявление массива

В Visual Basic существуют массивы фиксированного размера и динамические массивы. Массив фиксированного размера имеет неизменный размер, заданный при его объявлении. Динамические массивы могут изменять размер в процессе выполнения.

Объявление массива фиксированного размера

Объявление массива фиксированного размера зависит от области его видимости и осуществляется следующим образом:

При объявлении массива после его имени в круглых скобках указывается верхняя граница массива. По умолчанию нижней границей массива является 0. Например, в приведенном ниже коде, который вводится в секцию Declaration модуля, задается массив из 21 элемента. Индекс элементов массива изменяется от 0 до 20:

Dim intCountPar (20) As Integer

Для создания глобального массива такого же размера необходимо использовать следующий код:

Public intCountPar (20) As Integer Можно явно задать нижнюю границу массива, используя ключевое слово то:

Dim intCountPar (1 To 20) As Integer

В этом случае задается массив из 20 элементов. Индекс элементов массива изменяется от 1 до 20.

Visual Basic позволяет использовать многомерные массивы. Например, в следующем коде объявляется двумерный массив размерностью 21х21:

Dim intCountPar (20, 20) As Integer

При использовании многомерных массивов, как и в случае одномерных, можно явно задавать нижнюю границу:

Dim intCountPar (1 To 20, 1 То 20) As Integer Dim intCountPar (20, 1 То 20) As Integer

В верхней строке кода явно заданы верхняя и нижняя граница обеих размерностей. В нижней строке задана верхняя и нижняя граница только для второй размерности.

Объявление динамического массива

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

Создание динамического массива осуществляется следующим образом:

1. Объявляется массив с помощью ключевых слов, используемых при создании массива фиксированного размера. Список размерностей массива остается пустым. При объявлении глобального массива необходимо выбрать ключевое слово Public, при объявлении массива на уровне модуля — Dim, при объявлении массива в процедуре — Dim или static. Например,

Dim intCountPar О As Integer

2. С помощью выполняемого оператора ReDim указывается размерность массива в виде числа или выражения. Синтаксис оператора ReDim аналогичен синтаксису оператора объявления массива фиксированного размера. Например, размерность массива может быть задана любым из следующих способов:

ReDim intCountPar (х)

ReDim intCountPar (20)

ReDim intCountPar (1 То 20)

При выполнении оператора ReDim данные, размещенные в массиве ранее, теряются. Это удобно в том случае, если данные вам больше не нужны и вы хотите переопределить размерность массива и подготовить его для размещения новых данных. Если вы хотите изменить размер массива, не потеряв при этом данных, то необходимо воспользоваться оператором ReDim с ключевым словом Preserve. Например, приведенный ниже программный код увеличивает размер массива на единицу без потери хранящихся в массиве данных:

ReDim Preserve intCountPar (X + 1)

Замечание

Использование оператора ReDim с ключевым словом Presterve позволяет изменять только верхнюю границу последней размерности многомерных размеров.

Математические операторы

Математические операторы позволяют выполнять в программе действия над числами. В табл. 5.2 приведены арифметические операторы и выполняемые ими функции.

Таблица 5.2. Математические операторы

Оператор

Выполняемая операция

+

Сложение

-

Вычитание

*

Умножение

/

Деление

\

Целочисленное деление

mod

Остаток от деления нацело

/\

Возведение в степень


 

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

1. Возведение в степень.

2. Умножение и деление.

3. Деление нацело.

4. Взятие остатка от деления.

5. Сложение и вычитание.

Вы можете изменить порядок вычисления в выражении, используя круглые скобки. Например, в формуле (8-3*(4-2))/(3+2) вначале выполняется операция 4—2, затем умножение, затем вычитание из 8 предыдущего результата, сложение 3+2 и, наконец, деление.

Замечание

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

Первые три математических оператора, приведенных в табл. 5.2, не требуют пояснений. Рассмотрим примеры использования операторов деления. Их в таблице три. Первый из них выполняет деление с плавающей точкой. Его оператор записывается в виде косой черты (/). Введите в окне Immediate Visual Basic следующее выражение:

Print 10/3

В результате в окно Immediate будет выведено число 3,33333333333333.

Далее в табл. 5.2 следует оператор целочисленного деления. Он записывается в виде обратной косой черты (\). Введите в окне Immediate

Print 10\3

В результате будет получено число 3.

Третий оператор деления — оператор mod. Он выдает остаток, получающийся в результате деления. Введите в окне Immediate Visual Basic следующее выражение:

Print 10 mod 3

В результате в окно Immediate будет выведено число 1. На рис. 5.4 показано окно Immediate с результатами проведенных вычислений.

Последним в табл. 5.2 приведен оператор возведения в степень. Он имеет следующий синтаксис:

результат = число ^ показательСтепени

Если параметр показательСтепени больше 1, это означает, что число возводится в степень. Если он меньше 1, но больше 0, то из числа извлекается корень. При значении параметра меньше 0 вычисляется обратное значение дроби. Например:

2 ^ 3 = 8 16 ^ 0.5 = 4 2 ^ -3 = 0,125

На рис. 5.5 показано окно Immediate с результатами возведения в степень.

Рис. 5.4. Окно Immediate с результатами вычислений

Рис. 5.5. Окно Immediate с результатами возведения в степень

Работа со строками

Для работы в Visual Basic со строками используется оператор объединения, называемый также оператором конкатенации, и встроенные функции. Список наиболее часто используемых функции для работы со строками приведен в табл. 5.3.

Таблица 5.3. Функции, предназначенные для работы со строками

Функция

Назначение

As С

Возвращает ASCII-код символа

Chr

Преобразовывает ASCII-код в символ

InStr, InStrRev

Осуществляют поиск одной строки в другой

LCase

Изменяет регистр букв исходной строки на нижний

Left

Возвращает указанное количество символов с начала строки

Len

Возвращает количество символов в строке

LTrim, RTrim, Trim

Удаляют пробелы, расположенные соответственно в начале, в конце и с обеих сторон символьной строки

Mid

Возвращает заданное количество символов из произвольного места строки

Right

Возвращает указанное количество символов с конца строки

Str, CStr

Преобразовывают числовое выражение в строку

StrReverse

Изменяет порядок следования символов в строке на обратный

StrConv

Изменяет регистр букв символьной строки

Val

Преобразовывают строку в числовое выражение

UCase

Изменяет регистр букв исходной строки на верхний


 

Рассмотрим более подробно некоторые из функций.

Функции Str и Val

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

Str (число)

Функция Val () преобразовывает символьную строку в численное значение.

Синтаксис функции:

Val (символьноеВыражение)

При преобразовании строки символов в число учитываются все цифровые символы, расположенные в строке слева направо. Пробелы, находящиеся в начале и конце символьной строки, игнорируются. Пробелы внутри строки недопустимы. Если первый символ выражения не является цифрой, функция Val возвратит значение ноль.

Рассмотрим следующий пример. Зададим в окне Immediate две символьные строки а и b следующего вида:

а="10"

b="12"

При сложении этих двух строк получается символьная строка

"1012"

Если сложить две символьные строки, предварительно преобразовав их в числа, и распечатать с помощью команды,

Print Val (а) + Val (b)

то получится число 22 (рис. 5.6).

Рис. 5.6. Результат применения функции Val

Функции, удаляющие пробелы в символьной строке

Функции LTrim, Rtrim и Trim используются для удаления пробелов в символьной строке.

Функция

Назначение

LTrim

Удаляет пробелы, расположенные в начале символьной строки

RTrim

Удаляет пробелы, расположенные в конце символьной строки

Trim

Удаляет пробелы, расположенные в начале и в конце символьной строки


 

Пример использования этих функции приведен ниже:

cCoinment= " Удаление пробелов "

Print LTrim(cComment) ' Возвращает "Удаление пробелов "

Print RTrim(cCornment) ' Возвращает " Удаление пробелов"

Print Trim(cComrnent) ' Возвращает "Удаление пробелов"

Выделение подстроки

Вы можете выделить подстроку заданной символьной строки, используя функции Left, Right и Mid. Функции Left и Right выделяют строку начиная с крайнего левого или крайнего правого символа, а функция Mid позволяет выбрать любую подстроку.

Синтаксис функций:

Left(выражение, числоСимволов)

Right(выражение, числоСимволов)

Mid(выражение, номерПозиции [, числоСимволов ])

Ниже приведены примеры использования этих функций и возвращаемые ими значения:

cConmtent= "Выделение подстроки"

Print Left(cConroent,3) ' Возвращает "Выд"

Print Right (cCornment, 6) ' Возвращает "строки"

Print Mid (cCornment, 11,3) ' Возвращает "под"

Преобразование строки

Функции UCase о и Lease о используются в Visual Basic для преобразования строчных символов в заглавные и заглавных в строчные. Помимо этого, в Visual Basic имеется функция StrConv, которая преобразовывает выражение к имени собственному, начинающемуся с заглавной буквы.

Замечание

Функции UCase () и LCase () возвращают значения, имеющие тип Variant. Для того чтобы возвращаемое значение имело тип string, необходимо использовать функции UCase$ () и Lcase$ ().

Функция UCase

Функция ucase преобразует все строчные буквы в символьной строке в заглавные. Синтаксис функции:

UCase (символьнаяСтрока)

Например:

cComment = "вывод"

Print UCase(cComment) ' Возвращает "ВЫВОД"

Print UCase$(cComment) ' Возвращает "ВЫВОД"

Функция LCase

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

Синтаксис функции:

LCase(символьнаяСтрока)

Например:

cComment= "ВЫВОД"

Print LCase(cComment) ' Возвращает "вывод"

Print LCase$(cComment) ' Возвращает "вывод"

Функция StrConv

Функция StrConv преобразовывает выражение, написанное строчными или заглавными буквами, в имя собственное.

Например:

cComment = "Иванов иван Иванович"

Print StrConv(cComment,vbProperCase) ' Возвращает "Иванов Иван Иванович"

Аналогичный результат будет получен и в следующем случае:

cComment = "ИВАНОВ ИВАН ИВАНОВИЧ"

Print StrConv(cComment, vbProperCase) ' Возвращает "Иванов Иван Иванович"

Определение положения строки в другой строке

Visual Basic содержит две функции, позволяющие осуществлять поиск символьной строки в другой: inStr о и inStrRev о. Эти функции отличаются тем, что inStr о осуществляет поиск с начала строки и до ее конца, а InStrRev о проводит поиск в обратном направлении, то есть от конца строки к началу.

Функция inStr () имеет следующий упрощенный синтаксис:

InStr (исходнаяСтрока, строкаПоиска)

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

Рассмотрим такой пример. Введите в окне Immediate следующую команду:

Print InStr ("Сегодня прекрасная погода", "погода")

В результате будет возвращено число 20.

Объединение строк

В Visual Basic для работы со строками можно использовать только один оператор — оператор объединения. С помощью данного оператора можно объединять несколько строк в одну. Этот оператор обозначается символом амперсанда (&).

Замечание

В предыдущих версиях Visual Basic для объединения строк использовался символ "плюс" (+). В Visual Basic 6 этот оператор также поддерживается.

Например, объединение строк удобно использовать при формировании полного адреса, если известен индекс, город и улица. В следующем примере и на рис. 5.7 показан результат объединения фамилии, имени и отчества в окне Immediate:

sLastName = "Иванов "

sFirstName = "Иван "

sSecondName = "Иванович"

sName = sLastName & sFirstName & sSecondName

Print sName ' Возвращает "Иванов Иван Иванович"

Рис. 5.7. Объединение строк

Оформление программных кодов

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

Комментарии

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

Для включения в текст программы комментария необходимо ввести символ ('), который может быть первым символом в строке или находиться в любом ее месте. Этот символ означает начало комментария. Любой текст, расположенный в строке следом за этим символом, будет восприниматься как комментарий, то есть Visual Basic не будет транслировать этот текст. Например:

' Комментарий, начинающийся с начала строки

Print strName ' Комментарий, следующий за оператором

Совет

Сопровождая программы комментариями, вы сэкономите время и усилия при отладке и модификации программ.

Размещение оператора на нескольких строках

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

Например, поместим на двух строках оператор, объединяющий фамилию, имя и отчество:

strName = strLastname & strFirstname & strSecondname

Получим следующее:

strName = strLastname _

& strFirstname & strSecondname

Размещение нескольких операторов на одной строке

Как правило, при написании программ операторы размещают на отдельной строке. Если операторы имеют небольшую длину, Visual Basic позволяет их поместить на одной строке, разделив двоеточием. Например:

strLastname = "Иванов ": strFirstname = "Иван "

Программные модули

Программы Visual Basic хранятся в программных модулях, которые бывают трех видов: модуль формы, стандартный модуль и модуль класса.

Простое приложение, состоящее из одной формы, содержит, как правило, только модуль формы. По мере усложнения приложения повторяющиеся функции, выполняемые с нескольких модулей формы, можно выделить в отдельный программный код, который будет являться общим для всех. Такой программный код называется стандартным модулем. При использовании в Visual Basic объектно-ориентированного программирования создаются модули классов.

Модули формы могут содержать объявления переменных, констант, типов данных, внешних процедур, используемых на уровне модуля, процедур обработки событий. Они хранятся в файлах, имеющих расширение frm. В модуле можно также ссылаться на другие формы и объекты данного приложения.

Стандартные модули могут содержать объявления глобальных и локальных переменных, констант, типов, внешних процедур и процедур общего характера, доступных для других модулей данного приложения. Они хранятся в файлах с расширением bas.

Используя объектно-ориентированное программирование, в Visual Basic можно создавать новые объекты с разработанными для них свойствами и методами, помещая их в модули классов, хранящихся в файлах с расширением els.

Редактирование исходных кодов

Для создания программных кодов в Visual Basic используется редактор кода. Чтобы его запустить, необходимо в окне Project Explorer установить курсор на форму или на модуль, для которого создается код, и выполнить одно из следующих действий:

При выполнении любого из этих действий открывается окно редактирования (рис. 5.8), в которое можно вводить текст программы. Для каждого модуля в Visual Basic создается отдельное окно кода, разделенное внутри на секции. Выбор секции в окне кода осуществляется с помощью списка Object, расположенного слева в верхней части окна.

В верхней части окна Project расположены два раскрывающихся списка: Object (Объект) и Procedure (Процедура). Левый список Object позволяет осуществлять переход между секциями. Для стандартного модуля список Object содержит общую секцию (General). В модуле класса этот список содержит общую секцию и секцию класса. В форме список Object содержит общую секцию, секцию для формы (Form), а также секции для всех размещенных в форме объектов.

Рис. 5.8. Окно редактирования исходного кода

Для каждой секции, выбранной из списка Object, можно создать процедуру, доступ к которым осуществляется с помощью списка Procedure окна редактора кода, содержащего события. При выборе из списка Object общей секции модуля (General) список Procedure содержит только одно значение Declarations (Объявления), позволяющее объявить локальные переменные, константы и библиотеки DLL.

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

Редактор Visual Basic также предоставляет пользователю подсказки с синтаксисом при написании операторов и функций (рис. 5.10). Они появляются на экране под курсором при вводе наименования оператора или функции.

Рис. 5.9. Использование списка свойств объекта для написания кода

Рис. 5.10. Использование подсказок синтаксиса операторов и функций

Замечание

Если при написании кода не появляется список со свойствами объектов и подсказки с синтаксисом операторов и функций, то в меню Tools (Сервис) выберите команду Options (Параметры) и на вкладке Editor (Редактор) диалогового окна Options установите флажки Auto List Members (Члены автоматического списка) и Auto Quick Info (Быстрая автоматическая информация). Для подключения этих возможностей редактора можно также использовать комбинации клавиш <Ctrl>+<J> и <Ctrl>+<|>, соответственно.

Процедуры

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

Процедуры Sub

Процедура sub не возвращает значения и наиболее часто используется для обработки связанного с ней события. Ее можно помещать в стандартные модули, модули классов и форм. Она имеет следующий синтаксис:

[Private] [Public] [Static} Sub имяПроцедуры (аргументы)

операторы

End Sub

Между ключевыми словами Sub и End Sub в процедуре располагаются выполняемые при ее вызове операторы программного кода. Параметр аргументы можно применять для объявления передаваемых в процедуру переменных.

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

Процедуры обработки событий связаны с объектами, размещенными в формах Visual Basic, или с самой формой и выполняются при наступлении события, с которым они связаны. Для события, связанного с формой, процедура sub имеет следующий синтаксис:

Private Sub Form имяСобытия (аргументы)

операторы

End Sub

Как видно из синтаксиса, наименование процедуры обработки события для формы содержит слово Form, затем размещается символ подчеркивания (_) и имя события. Например, имя процедуры, выполняемой при загрузке формы, будет Form_Load, а процедуры, выполняемой при щелчке мыши на форме — Form_click. При формировании процедуры для формы MDI ее имя будет содержать перед словом Form приставку MDI, то есть записываться MDiForm.

Для события, связанного с элементом управления формы, процедура обработки событий sub имеет следующий синтаксис:

Private Sub имяЭлементаУправления имяСобытия (аргументы)

операторы

End Sub

Наименование процедуры обработки события для элемента управления формы содержит имя элемента управления, заданное в свойстве Name, затем следует символ подчеркивания (_) и имя события. Например, имя процедуры, выполняемой при щелчке мыши на кнопке управления, имеющей наименование cmdPrint будет Form_Click.

Visual Basic облегчает формирование имен создаваемых процедур. Разработчику необходимо выполнить для этого следующие действия:

1. В окне Properties с помощью свойства Name (Имя) задать имя объекта, для которого создается процедура. Если имя не будет задано, то при создании процедуры Visual Basic использует имя, присваиваемое объекту по умолчанию при его размещении в форме. При последующем изменении наименования объекта необходимо будет изменить и имя процедуры.

2. В окне редактора кода из списка Object (Объект) выбрать объект, для которого создается процедура.

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

После выполнения указанных действий в области размещения процедур редактора кода будут размещены операторы sub и End sub с указанием наименования процедуры (рис. 5.11). Вам необходимо разместить между этими операторами выполняемый при наступлении этого события программный код.

Рис. 5.11. Visual Basic формирует наименование процедуры

Предупреждение

В случае, если после создания процедуры имя элемента управления будет изменено, а имя связанной с ним процедуры останется прежним, процедура станет общей.

Процедуры Function

Процедуры Function в отличие от процедур sub могут возвращать значение в вызывающую процедуру. Синтаксис процедуры Function выглядит следующим образом:

[Private] [Public] [Static} Function имяПроцедуры (аргументы) [As type]

операторы

End Function

Процедуры Function, как и переменные, имеют тип, задаваемый с помощью ключевого слова As. Если тип процедуры не задан, по умолчанию ей присваивается тип Variant. Тип процедуры определяет в свою очередь тип возвращаемого ею значения. Возвращаемое процедурой значение присваивается имени процедуры имяПроцедуры и может быть использовано в выражениях программного кода аналогично стандартным функциям Visual Basic.

Рассмотрим процедуру, вычисляющую площадь квадрата:

Function Square (intA As Integer) As Integer

Square = intA ^ 2

End Function

Для вызова этой процедуры в форме можно использовать, например, следующий код:

TxtSquare.Text = Square(TxtSide.Text)

Вызов процедур

Процедура sub не возвращает значения, однако она может изменять значения переменных, заданных для нее в качестве параметров. Вызов процедуры Sub можно осуществлять двумя способами. Первый способ предполагает использование ключевого слова Call. Например, процедуру с именем Nameproc можно вызвать оператором

Call NameProc (аргумент1, аргумент2, ...аргументы)

Второй способ позволяет вызвать процедуру sub по ее имени. Например,

NameProc аргумент1, аргумент2, ...аргументы

При вызове процедуры модуля формы из другого модуля необходимо указывать ссылку на имя модуля формы, содержащего процедуру. Например, для вызова процедуры с именем Nameproc, находящейся в модуле формы Form1, оператор должен выглядеть так:

Call Form1.NameProc (аргумент1, аргумент2, ...аргументМ)

Вызов процедуры Function аналогичен вызову встроенных функций Visual Basic. Кроме этого, процедуру Function можно вызывать так же, как процедуру Sub:

Call Square(Side)

Square Side

В этом случае Visual Basic игнорирует возвращаемое функцией значение.

Передача параметров

Переменные, передаваемые процедуре, называют параметрами процедуры. По умолчанию они имеют тип variant. Visual Basic позволяет задавать тип параметров с помощью ключевого слова As:

Function Square (intA As Integer) As Integer

Передача параметров в процедуру может осуществляться двумя способами:

по значению (by value) и по ссылке (by reference). В первом случае в процедуру в качестве переменной передается не сама переменная, а ее копия. Поэтому изменение параметра в процедуре затрагивает не переменную, а ее копию. Для передачи в процедуру параметров по ссылке используется ключевое слово ByVal, например:

Sub NameProc (ByVal strArg As String)

тело процедуры

End Sub

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

Замечание

По умолчанию в Visual Basic передача параметров в процедуру осуществляется по ссылке.

Используя ключевое слово optional, можно задавать необязательные параметры процедуры. При этом необходимо иметь в виду, что если какой-либо из параметров задан как необязательный, то и расположенные после него параметры также должны быть объявлены необязательными:

Sub NameProc (Optional strArg1 As String, Optional strArg2 As String)

тело процедуры

End Sub

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

Sub NameProc (strArg1 As String, Optional strArg2 As String)

тело процедуры

End Sub

назад | содержание | вперед

Hosting uCoz