ЯЗЫК ПРОГРАММИРОВАНИЯ VISUAL BASIC. ПОНЯТИЕ ПРОЦЕДУРЫ. ПОДПРОГРАММЫ И ФУНКЦИИ. МОДУЛЬНЫЙ ПРИНЦИП ПОСТРОЕНИЯ ПРОГРАММНОГО КОДА

В Visual Basic весь программный код находится внутри процедур (подпрограмм). Общая структура описания подпрограммы Visual Basic:

Sub <имя_подпрограммы> [(<параметры>)]
<операторы>
End Sub

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

  • Call <имя_подпрограммы> [(<параметры>)];
  • <имя_подпрограммы> [<параметры>]. Функция построена точно так же, как и процедура, однако результатом работы функции является возвращаемое значение (только одно).
Общая структура описания функции следующая:

Function <имя_функции> [(<аргументы>)] [As <Тип>] <операторы>
<имя_функции> = <выражение> End Function

Вызов функции выполняется с помощью оператора; присваивания:

<переменная> = <имя_функции> {(<аргументы>)].

Использование принципов модульного программирования Windows-приложения в среде проектирования VB выражено в двух аспектах.

1. Разбиение программного кода на отдельные компактные модули.

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

2. Разбиение программного кода уже внутри модуля на отдельные части — процедуры.

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

Общая процедура может входить в состав модуля экранной формы (в файл frm) или в состав стандартного модуля (в файл bas).

В Visual Basic есть три вида областей определения, характеризующих доступность переменной:

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

Переменные контейнера определяются в секции (General) (Declarations) с помощью оператора Dim и доступны только внутри соответствующего контейнера, т, е. формы, модуля или класса.

Глобальные переменные определяются в секции (General) (Declarations) модуля. При этом вместо оператора Dim используется Public. Глобальные переменные доступны во всех модулях и процедурах проекта.

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

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

Объявление переменной как статической производится оператором:

Static <Имя_переменной> [As <Тип_переменной>]

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

Полное описание общей процедуры выглядит следующим образом:

<ОбластьВидимости>] [Static] Sub <имяПроцедуры>
(<Списокпараметров>)
<Операторы>
End Sub

Область видимости — это одно из двух ключевых слов Public или Private. Они устанавливают, к какому классу принадлежит процедура: к классу локальных или классу глобальных процедур. Процедура локальная (Private), если она доступна (видна) только внутри данного модуля и не может быть вызвана из других модулей. Процедура глобальная (Public), если она доступна (видна) из других модулей.

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

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

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

В Visual Basic параметры могут передаваться двумя способами:

  • как ссылки (ByRef);
  • как значение (ByVal).

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

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

Sub pr1(ByRef n As String)

При передаче параметра по значению Visual Basic передает копию содержимого переменной вместо ее адреса в памяти, и функция или процедура не сможет напрямую модифицировать исходное значение. Ключевое слово ByVal перед параметром должно указываться обязательно. Например, Function fkl (ByVal k As String) As Boolean.