Урок из серии «Программирование на Visual Basic.NET для школьников»
В предыдущем уроке рассказывалось о работе с текстовыми файлами.
В этом уроке поговорим о подпрограммах. При разработке сложного алгоритма целесообразно выделить в нем последовательности действий, которые многократно повторяются, оформить как вспомогательные алгоритмы и, по мере необходимости, вызывать их из основного алгоритма.
Программы, реализующие вспомогательный алгоритм, называются подпрограммами. Подпрограмму можно оформить как процедуру или как функцию.
В этом уроке вы узнаете: какие преимущества дает использование подпрограмм, чем отличаются процедуры и функции, как они описываются и как вызываются.
Процедуры и функции предоставляют следующие преимущества:
- Устраняют повторяющиеся строки. Вы можете один раз определить процедуру или функцию и вызывать ее там, где это необходимо.
- Делают программы более читаемыми. Программу, разбитую на несколько частей, воспринимать легче, чем программу, сделанную в виде одного большого фрагмента.
- Упрощают разработку программы. Программы, разделенные на логические единицы, легче разрабатывать, писать и отлаживать.
- Могут повторно использоваться в других проектах и решениях.
- Расширяют возможности языка программирования. Если для решения ваших задач в языке программирования нет готовых, встроенных в язык программирования процедур и функций, можно написать свои процедуры и функции.
Основные отличия функции от процедуры:
1. Функция имеет тип (аналогично переменной) и может возвращать значение через имя функции. Ее можно использовать качестве операнда в выражениях. Процедура возвращает результаты через параметры, ее нельзя использовать в выражениях.
2. Вызов функции осуществляется посредством указания ее имени в каком либо операторе языка программирования. Процедура вызывается с помощью отдельного оператора.
Прежде чем использовать процедуру или функцию в программе, ее нужно объявить (описать).
Подпрограмма типа Sub
При описании процедуры, как и при описании функции, ей дается уникальное название – имя процедуры и устанавливается список параметров. Параметры разделяются между собой запятой и содержат описание типов.
Общий вид описания процедуры:
Sub название_процедуры ([параметры]) операторы_процедуры End Sub
Здесь:
- название_процедуры — имя создаваемой вами процедуры Sub;
- параметры — необязательный список формальных параметров, используемых в процедуре Sub;
- операторы_процедуры — блок операторов, который выполняет работу процедуры.
Вызов процедуры типа Sub
Чтобы вызвать в программе процедуру, нужно указать имя этой процедуры, а затем список фактических параметров, требуемых для этой процедуры.
Общий вид вызова процедуры:
Имя_переменной = название_функции(фактические параметры)
Если в процедуру не передается ни одного аргумента, то требуется наличие пустых круглых скобок.
Передача параметров
При описании процедуры после имени в круглых скобках указывается список параметров с указанием их типов. Эти параметры называются формальными. Они определяют место подстановки фактических параметров.
При вызове процедуры или функции в списке указываются фактические параметры, значения которых должны быть заранее определены.
Параметры можно передавать по значению и по ссылке.
В чем различие?
Каждая переменная имеет значение и уникальный адрес, соответствующий положению переменной в оперативной памяти компьютера.
Языки программирования позволяют передавать в процедуру как значение переменной (передача по значению), так и ее адрес в оперативной памяти (передача по ссылке).
При передаче по значению в процедуру передается только копия переменной, т.е. процедура не получает доступ к переменной в памяти и не может изменить ее значение. Для передачи параметров по значению в описании процедуры перед параметром в списке параметров указывают ключевое слово ByVal (от англ. by value – по значению).
При передаче переменной по ссылке процедуре передается ссылка на ее адрес в оперативной памяти, таким образом, процедура получает доступ к переменной в памяти и может ее изменить. Чтобы передавать переменную по ссылке, необходимо в описании процедуры перед соответствующим параметром в списке добавить ключевое слово ByRef (от англ. by reference – по ссылке).
При вызове процедур ключевые слова, определяющие способ передачи параметров и тип параметров, не указываются.
Проект «Передача по ссылке и по значению»
Задание.Создать проект, в котором описывается процедура, один параметр которой передается по ссылке, а другой – по значению. Значения параметров внутри процедуры изменяются. В вызывающей процедуре переменным присваиваются начальные значения, производится вызов процедуры с указанием переменных в качестве фактических параметров. После выполнения процедуры значения переменных выводятся на надписи.
- Разместить на форме:
- текстовые поля TextBox1 и TextBox2 для вывода начальных значений переменных;
- надписи Label1 и Label2 для вывода конечного значения переменных;
- кнопку button1 для создания процедуры-обработчика события;
- четыре надписи для вывода поясняющих текстов.
В программном коде процедуры первый параметр X передается по ссылке, а второй параметр Y передается по значению.
Создадим программный код проекта, в котором:
- объявим переменные;
- создадим процедуру, умножающую значение переменных, передаваемых по ссылке и по значению, на коэффициент 5;
- создадим обработчик, реализующих присваивание переменным начальных значений, вызов первой процедуры и осуществляющий вывод ключевых значений переменных на надписи.
- Объявить переменные и создать код вызываемой процедуры:
Dim RefA, ValB As Byte Sub refVal(ByRef RefA, ByVal ValB) RefA = RefA * 5 ValB = ValB * 5 End Sub
- Создать код вызывающей процедуры-обработчика события:
Private Sub Button1_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button1.Click RefA = Val(TextBox1.Text) ValB = Val(TextBox2.Text) refVal(RefA, ValB) Label1.Text = Str(RefA) Label2.Text = Str(ValB) End Sub
- Запустить проект на выполнение и вывести в текстовые поля начальные значения переменных (например, 3). На надписи будут выведены конечные значения переменной, передаваемое по ссылке (в данном случае, 15), и переменной, передаваемой по значению (в данном случае 3).Значение переменной, передаваемое по значению, не изменилось.Что и требовалось доказать!
Подпрограмма типа Function
Функции являются подпрограммами, которые возвращают значения и поэтому могут использоваться в выражениях.
Наиболее широко используются встроенные функции: математические, преобразования типов данных, обработки строк, даты и времени и др.
Программист может создавать свои функции.
При описании функции ей дается уникальное название – имя функции и устанавливается список параметров, определяется тип возвращаемого значения. Параметры разделяются между собой запятой и содержат описание типов.
Общий вид описания функции:
Function название_функции ([параметры]) As тип операторы_функции [Return значение] End Function
Здесь:
- название_функции — имя создаваемой вами функции.
- As тип — пара ключевых слов, которые определяют тип возвращаемого функцией значения.
- параметры — необязательный список параметров, используемых в данной функции.
- операторы_функции — это блок операторов, который выполняет работу функции.
- Return — новый оператор Visual Basic .NET. Он позволяет указать, когда нужно выйти из функции, чтобы возвратить значение в вызывающую программу, и каково это возвращаемое значение.В качестве альтернативы можно использовать синтаксис Visual Basic 6 и возвращать значение в вызывающий код, присвоив значение имени функции.
Вызов подпрограммы типа Function
Для вызова функцию в программе, необходимо поместить в оператор программы имя этой функции и все требуемые для нее аргументы (фактические параметры).
Пример вызова функции в операторе присваивания:
Имя_переменной = название_функции(фактические параметры)
Проект «Функция»
Задание. Создать проект, в котором определяется функция (например, умножения двух чисел F = x*y), выводится на надпись значение функции.
- Разместить на форме:
- для вывода значений аргументов два текстовых поля TextBox1 и TextBox20;
- для вывода значений функции надпись label1;
- для создания обработчика события кнопку Button1.
- Создать код вызываемой функции:
Function F(ByVal x, ByVal y) As Integer F = x * y End Function
- Объявить переменные и создать код вызывающей процедуры-обработчика:
Private Sub Button1_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button1.Click Dim x, y As Integer x = Val(TextBox1.Text) y = Val(TextBox2.Text) Label1.Text = Str(F(x, y)) End Sub
- Запустить проект на выполнение и ввести в текстовые поля значения переменных (например, 2 и 3). На надписи будет выведено вычисленное значение функции.
В этом уроке было показано применение процедур и функций для реализации вспомогательных алгоритмов. В следующем уроке поговорим о массивах
Следующий урок: Массивы. Заполнение массивов.