Спонсор: Microsoft
Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3925 / 218 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 11:

Использование модулей и процедур

Открытые переменные и переменные форм

В предыдущем упражнении вы использовали открытую переменную для хранения количества выигрышей в программе игрового автомата. В качестве альтернативы можно объявить переменную Wins в форме в верхней части кода программы формы. Обе методики приведут к одному и тому же результату, так как и открытая переменная, и переменная, объявленная в области общих объявлений формы, имеют область видимости, распространяющуюся на всю форму. Однако открытые переменные отличаются тем, что они сохраняют свои значения во всех формах и стандартных модулях проекта - другими словами, во всех компонентах, которые принадлежат к одному пространству имен. Ключевое слово пространства имен проекта устанавливается автоматически, когда вы в первый раз сохраняете проект. Текст пространства имен можно увидеть или изменить, выбрав проект в Solution Explorer (Обозревателе решений) и щелкнув на команде Properties (Свойства) из меню Project (Проект), а затем проверить или изменить текст в текстовом поле Root Namespace (Корневое пространство имен).

Открытая переменная Wins была полезна в предыдущей процедуре потому, что она сохраняла свое значение на протяжении всех 10 вызовов процедуры события Button1_Click. Если объявить Wins локально в процедуре события Button1_Click, то эта переменная каждый раз сбрасывалась бы, как это счетчик километража в автомобиле. Использование в стандартном модуле открытой переменной позволяет избежать ненужных сбросов. Открытые переменные аналогичны счетчику пройденного пути в автомобиле.

Создание процедур

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

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

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

Например, представьте программу, которая содержит три механизма печати растровых изображений: команду меню с именем Print, кнопку Печать на панели инструментов и значок принтера с поддержкой drag-and-drop. В каждую из этих трех процедур событий можно поместить одни и те же операторы печати, а можно обрабатывать запросы на печать из всех трех источников с помощью одной процедуры в стандартном модуле. Процедуры общего назначения экономят время написания программы, снижают вероятность ошибок, уменьшают размер программы, упрощают сопровождение и повышают читаемость процедур событий.

Преимущества процедур общего назначения

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

  • позволяют связать часто используемую группу операторов программы со знакомым именем;
  • устраняют повторяющиеся строки. Вы можете один раз определить процедуру и заставить вашу программу выполнять ее любое количество раз;
  • делают программы более читаемыми. Программу, разбитую на набор частей, воспринимать легче, чем программу, сделанную в виде одного большого фрагмента;
  • упрощают разработку программы. Программы, разделенные на логические единицы, легче разрабатывать, писать и отлаживать. Если вы пишете программу в группе разработчиков, то вы можете обмениваться процедурами и модулями, а не целыми программами;
  • могут повторно использоваться в других проектах и решениях. Можно легко встроить процедуры из стандартного модуля в другие программные проекты;
  • расширяют язык Visual Basic. Зачастую процедуры могут выполнять задачи, которые не могут быть выполнены отдельными ключевыми словами Visual Basic.

Подпрограмма типа Function

Подпрограмма типа Function - это группа операторов, расположенных между оператором Function и оператором End Function. Операторы в функции выполняют осмысленную работу - обычно обрабатывают текст, введенные пользователем данные или вычисляют числовое значение. Вы вызываете функцию в программе, поместив в оператор программы имя этой функции и все требуемые для нее аргументы. Аргументы - это данные, используемые для работы функции, и они должны быть заключены в круглые скобки и разделены запятыми. В целом использование подпрограммы типа Function в точности совпадает с использованием встроенных функций или методов, таких, как Int, Rnd или FromFile.

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

Синтаксис функций

Базовый синтаксис функции имеет следующий вид:

Function название_функции ([аргументы]) As тип
	операторы_функции
	[Return значение]
End Function

Важными являются следующие синтаксические элементы.

  • название_функции - это имя создаваемой вами функции.
  • As тип - это пара ключевых слов, которые определяют возвращаемый тип функции. (В Visual Basic 6 указание конкретного типа было необязательно, но в Visual Basic .NET оно крайне рекомендуется.)
  • аргументы - это необязательный список аргументов (разделенных запятыми), используемых в данной функции. Каждый аргумент должен быть объявлен с указанием конкретного типа данных. (По умолчанию Visual Basic добавляет к каждому аргументу ключевое слово ByVal, которое указывает на то, что в функцию через данный аргумент передается копия значения, и все изменения значения этого аргумента не будут возвращены в вызывающий код.)
  • операторы_функции - это блок операторов, который выполняет работу функции. Первые операторы в этой функции обычно объявляют локальные переменные, которые будут использоваться только внутри этой функции, а остальные операторы выполняют работу функции.
  • Return - это новый оператор Visual Basic .NET. Он позволяет указать, когда нужно выйти из блока кода функции, чтобы возвратить значение в вызывающую программу, и каково это возвращаемое значение. Когда выполняется оператор Return, происходит выход из функции, так что если после оператора Return стоят другие операторы, они не будут выполнены. (В качестве альтернативы можно использовать синтаксис Visual Basic 6 и возвращать значение в вызывающий код, присвоив значение имени функции FunctionName.)

Квадратные скобки ([]) указывают на необязательные элементы синтаксиса. Visual Basic требует, чтобы эти элементы не были заключены в квадратные скобки.

Функции всегда возвращают значение в вызывающий код через свое имя функции. По этой причине последний оператор функции часто является выражением присвоения, которое помещает окончательный результат вычислений функции в имя функции. Например, процедура Function с именем TotalTax вычисляет государственные и городские налоги для указанной суммы, а затем присваивает результат имени TotalTax, как показано ниже:

Function TotalTax(ByVal Cost as Single) As Single
	Dim StateTax, CityTax As Single
	StateTax = Cost * 0.05 'Государственный налог 5%
	CityTax = Cost * 0.015 'Городской налог 1.5%
	TotalTax = StateTax + CityTax
End Function

В качестве альтернативы можно использовать новый синтаксис Visual Basic .NET и возвращать значение в вызывающую процедуру с помощью оператора Return, как показано в следующем объявлении функции:

Function TotalTax(ByVal Cost as Single) As Single
	Dim StateTax, CityTax As Single
	StateTax = Cost * 0.05 'Государственный налог 5%
	CityTax = Cost * 0.015 'Городской налог 1.5%
	Return StateTax + CityTax
End Function

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

Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Светлана Ведяева
Светлана Ведяева
Россия, Саратов