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. |
В целом смысл применения процедур и функции в программном коде приложения имеет два основных преимущества:
· Вызов одной и той же подпрограммы удовлетворяет множество запросов из разных частей программы.
· Чтобы каким-то образом усовершенствовать вычисления, не придется просматривать весь программный код. Достаточно лишь изменить его фрагмент внутри блока данной подпрограммы.
· Внутренние структуры подпрограммы можно сделать полностью локальными, не влияющими на остальную часть программного кода (инкапсуляция).
Контрольные
вопросы для
самопроверки