6. СОЗДАНИЕ ПОВТОРНО ИСПОЛЬЗУЕМОГО КОДА

 

6.1. Процедуры и функции

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

Разработки собственных процедур и функций – первый шаг к разработке инкапсулированного и повторно используемого кода. Под инкапсуляцией понимают сокрытие реализации свойств и методов объекта за его внешним интерфейсом.

 

Примечание

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

 

Синтаксис объявления простой процедуры следующий:

[Private|Public] Sub SubName()

   ... (строки кода)

End Sub

·        [Private|Public] – необязательные ключевые слова Visual Basic, определяющие область видимости процедуры.

·        Sub – ключевое слово Visual Basic, определяющее процедуру.

·        SubName() – имя, присваиваемое процедуре.

·        ... (строки кода) – программный код процедуры.

·        End Sub – ключевые слова Visual Basic, указывающие на окончание блока кода процедуры.

 

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

Call SubName   или

SubName

 

Существует два способа добавить процедуру в программный код проекта:

·        Написание кода в разделе General формы или модуля.

·        Использование диалогового окна «Add Procedure»:

1)      из меню «Tool» выберете пункт «Add Procedure», для открытия соответствующего диалогового окна;

 

 

Рис. 3. Диалоговое окно «Add Procedure»

 

2)      введите имя процедуры в поле Name и щелкните по кнопке «Ok», чтобы добавить ее заготовку в форму или модуль;

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

 

Примечание

Нельзя вводить код после ключевых слов «End Sub», поскольку это приведет к ошибке при компиляции программы.

 

Отличие процедуры от функции состоит лишь в том, что она всегда возвращает некоторое значение. Синтаксис функции указан ниже:

[Private|Public] Function FunctionName() As DataType

   ... (строки кода)

   FunctionName = ReturnValue

End Function

·        [Private|Public] – необязательные ключевые слова Visual Basic, определяющие область видимости функции.

·        Function – ключевое слово Visual Basic, определяющее функцию.

·        FunctionName() – имя, присваиваемое функции.

·        As – ключевое слово Visual Basic, предваряющее назначение типа данных.

·        DataType – тип данных возвращаемого значения.

·        ReturnValue – собственно возвращаемое значение, присваиваемое имени функции (только один раз!).

·        ... (строки кода) – программный код функции.

·        End Function – ключевые слова Visual Basic, указывающие на окончание блока кода функции.

 

Добавить в проект функцию можно теми же способами, которыми пользуются для процедуры. При использовании диалога «Add Procedure» переключатель «Type» устанавливают в положение «Function» (см. рис. 3).

 

6.2. Передача аргументов в процедурах и функциях

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

Public Sub SubName(NumOne As DataType, NumTwo As DataType)

 

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

При использовании процедур и функций очень важно, чтобы передаваемые значения соответствовали типам данных аргументов и их порядку. Тем не менее, аргумент можно сделать необязательным, если поместить ключевое слово «Optional» перед его описанием в операторе объявления. Все аргументы, описанные после этого ключевого слова, также будут необязательными и все они должны иметь тип «Variant»:

Public Sub SubName(NumOne As DataType, Optional NumTwo)

 

Для облегчения передачи в подпрограмму аргументов их можно именовать. Именованный аргумент – это буквальное имя аргумента в подпрограмме. Чтобы передать в нее значения, нужно использовать имена аргументов и присвоить им значения с помощью символов «:=». Для процедуры:

Public Sub SubName(NumOne As Integer, NumTwo As String)

 

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

SubName(NumTwo:=3, NumOne:=4)

 

Примечание

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

 

При работе с аргументами можно использовать два необязательных ключевых слова: «ByVal» и «ByRef», записываемых для каждого параметра.

Ключевое слово «ByVal» предусматривает, что в аргумент может быть передано только одно конкретное значение (число, строка, но не массив!), при этом соответствие типов не является жестким и находится в рамках автоматического их преобразования.

Ключевое слово «ByRef» означает, что в аргумент может быть передан любой объект Visual Basic (числа, строки, массивы, классы и др.). Соответствие типа в этом случае является обязательным. Другой его особенностью является то, что возможна обратная связь при вызове подпрограммы: при изменении значения аргументов происходит соответствующее изменение переменных указанных в ее вызове.

 

Примечание

При отсутствии ключевых слов «ByVal» и «ByRef» в описании аргументов подпрограммы всегда будет подразумеваться слово «ByRef».

 

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

·        Exit Sub

·        Exit Function

 

Примечание

При работе с процедурами и функциями важно помнить об областях видимости переменных. Они полностью подчиняются выше приведенным характеристикам из п. 2.1.

 

В целом смысл применения процедур и функции в программном коде приложения имеет два основных преимущества:

·        Вызов одной и той же подпрограммы удовлетворяет множество запросов из разных частей программы.

·        Чтобы каким-то образом усовершенствовать вычисления, не придется просматривать весь программный код. Достаточно лишь изменить его фрагмент внутри блока данной подпрограммы.

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

 

 

Контрольные вопросы для самопроверки

  1. Что такое «подпрограмма» и для чего она используется?
  2. Чего позволяет добиться использование подпрограмм?
  3. Какие виды подпрограмм вы знаете? В чем их различие?
  4. Приведите синтаксис процедуры и поясните назначение ее составных частей.
  5. Приведите синтаксис функции и поясните назначение ее составных частей.
  6. Какую роль в подпрограммах играют их аргументы?
  7. Что такое «именованный аргумент»?
  8. Что такое «необязательный аргумент»?
  9. Поясните назначение ключевых слов «ByVal» и «ByRef» при объявлении подпрограммы.