Урок из серии:»Программирование на Visual Basic.NET для школьников»
Существует несколько разновидностей процедур:
- Процедуры обработки событий, которые выполняются в том случае, если произошло какое-либо событие. При этом существенным является как имя элемента, так и вид события, который с ним произошел.
- Пользовательские процедуры, группы операторов, создаваемые разработчиками для выполнения определенных задач и не зависящие от текущего состояния приложения или произошедших в тот или иной момент событий.
Мы уже работали с процедурами-обработчиками событий. На этом уроке вы научитесь создавать пользовательские процедуры, вызывать их из основной программы.
Объявление процедуры
Если хотите использовать процедуру при решении задачи, то ее сначала нужно объявить (написать ее программный код), а затем вызвать ее в том месте программного кода, где это необходимо.
Пользовательские процедуры объявляются с помощью ключевого слова Sub:
private Sub <название_процедуры>([список формальных параметров])
<операторы_процедуры>
End Sub
Здесь <список формальных параметров> — входные и выходные параметры с указанием типа.
Процедуры могут не содержать параметров, в таком случае указывают пустые скобки.
Формальные параметры определяют место подстановки в процедуре фактических параметров.
Чтобы различать входные и выходные параметры, используются ключевые слова: для входных ByVal (по значению); для выходных — Byref (по ссылке). Изменение выходного параметра в процедуре отражается в основной программе, а входного нет. В Visual Basic.NET способом передачи аргументов по умолчанию является передача по значению (ByVal).
Для объявляемой процедуры, так же, как для переменной, может быть задана область её видимости при помощи служебных слов Private или Public.
Все процедуры должны быть объявлены до того, как они будут использоваться. Чтобы область видимости распространялась на всю форму, процедуры объявляются в верхней части программного кода сразу же после кода, автоматически созданного конструктором форм Windows.
Вызов процедуры
Чтобы использовать процедуру Sub, необходимо вызвать её в программном коде. Для вызова используют имя процедуры, в круглых скобках указывается список фактических параметров:
<имя процедуры> (<фактические параметры>)
При вызове процедур вместо формальных параметров подставляются фактические значения. Они должны совпадать с формальными параметрами по типу, по количеству и по последовательности расположения.
При вызове процедуры Sub количество и типы аргументов, передаваемых в процедуру, должны совпадать с количеством и типом аргументов, указанных при объявлении процедуры.
А теперь мы напишем процедуру (сначала без параметров) и посмотрим, как вызвать её из кода.
Проект «Подпрограмма-процедура»
Технология выполнения
- Создайте новое приложение Windows и назовите его «Подпрограммы-процедуры».
- Создайте пользовательский интерфейс по образцу:
- Откройте окно редактора кода. Найдите строку: «Код, автоматически созданный конструктором форм Windows».
В следующую за ней строку добавьте исходный текст процедуры:Private Sub MyMessage() MessageBox.Show("Сообщение выведено подпрограммой MyMessage.") End Sub
- Как видите, при выполнении кода в подпрограмме MyMessage будет выведено окно сообщения с текстом «Это сообщение выведено подпрограммой Sub MyMessage.» Но как сделать, чтобы этот код выполнился?
Чтобы выполнить код внутри процедуры, нужно эту процедуру вызвать. - А теперь давайте вызовем подпрограмму, которую вы только что написали. Выполните двойной щелчок на кнопке Сообщение, чтобы отредактировать обработчик ее нажатия. Добавьте в обработчик Button1_Click следующую строку кода:
MyMessage()
- Постройте и запустите проект. Нажмите кнопку с надписью Сообщение. Появиться окно сообщения с текстом «Это сообщение выведено подпрограммой Sum MyMessage.» Как оно появилось? Его отобразила строка кода из процедуры MyMessage. Когда эта процедура была вызвана из обработчика нажатия кнопки, был выполнен код в процедуре.
Процедура с параметрами
Одна из ценных возможностей Visual Basic.NET и большинства остальных современных языков программирования — возможность передавать подпрограммам нужную информацию. Это очень удобно, потому что можно создавать подпрограммы, которые выдают разные результаты и выполняют разные действия в зависимости от того, какую информацию им передают.
- Откройте окно редактора кода для проекта «Подпрограмма-процедура». После оператора End Sub процедуры MyMessage добавьте новую процедуру:
Private Sub GeneralMessage(ByVal InMessage As String) MessageBox.Show(InMessage) End Sub
Этой подпрограмме нужно передать аргумент типа String. Когда вызывается эта подпрограмма, она отображает окно сообщения с текстом, переданным ей в аргументе подпрограммы.
- Давайте вызовем подпрограмму GeneralMessage и передадим ей аргумент типа String. Выполните двойной щелчок по кнопке Любое сообщение, чтобы отредактировать обработчик ее нажатия. Добавьте в обработчик Button2_Click такой код:
GeneralMessage("Первое сообщение.") GeneralMessage("Второе сообщение.") GeneralMessage("Третье сообщение.")
- Запустите проект. Нажмите на кнопку с надписью Любое сообщение. Будут выведены три окна сообщений с разными текстами. Как это получилось? Код в обработчике нажатия кнопки вызывает процедуру события GeneralMessage три раза. При каждом вызове он передает в качестве фактического параметра новую строку. Когда выполняется код процедуры, фактический параметр подставляется вместо формального и используется в операторе MessageBox.Show.
Давайте разберем еще один пример. Ниже приведена процедуры для вычисления значения факториала для заданного числа. В два параметра: заданное число — входной параметр, вычисленное значение факториала — выходной параметр.
Процедура нахождения факториала
- Добавьте новую процедуру Fact в проект «Подпрограмма-процедура». Эта процедура будет выглядеть так:
Private Sub fact(ByVal a As Byte, ByRef p As Integer) Dim i As Byte p = 1 For i = 1 To a p = p * i Next End Sub
- Обратите внимание на то, что при вызове этой подпрограммы нужно передать ей два параметра: один по значению (входной параметр), другой по ссылке(выходной параметр).
- Выполните двойной щелчок на кнопке Вычислить факториал, чтобы отредактировать обработчик ее нажатия. Добавьте в обработчик Button3_Click программный код:
Dim n As Byte Dim f As Integer n = Val(InputBox("Введите заданное число:", "Ввод")) Fact(5, f) MsgBox(Str(n) & "!= " & Str(f), , "Вывод")
- Запустите приложение. Нажмите на кнопку с надписью Вычислить факториал. Обработчик нажатия кнопки выведет на экран окно сообщения с просьбой ввести заданное число. Затем вызывает процедуру Fact и передает ей два параметра: введенное число и ссылку на переменную, где будет находится результат. В процедуре факториал вычисляется и становится доступным через переменную f в вызывающей программе. И,. Значение переменной f выводится в окне сообщений.
Теперь вы можете писать собственные подпрограммы, вызывать их и передавать им информацию. Дальше вы узнаете, как писать функции. Функциям можно передать информацию точно так же, как и процедурам, — с помощью аргументов. Однако в отличие от процедур, функции могут возвращать какую-то информацию программе.