Пользовательские типы данных

Пользовательская функция

Рассмотрим пример создания и использования функции, которая выполняет очень простую задачу: возводит переданное ей число во вторую степень.

Функция, реализующая эту задачу, выглядит так:

Public Function Square(num_One As Double) As Double

Square = num_One ^ 2

End Function

Объявление функции очень похоже на объявление процедуры. Здесь мы используем модификатор доступности Public, дающий доступ к функции из всех модулей. Ключевое слово Function означает, что мы объявляем функцию. Следом за ним, в скобках, идет объявление параметров, которые мы можем передать функции. В нашем случае это - одна переменная num_One типа Double. После объявления имени и параметров функции следует объявление типа самой функции, или, точнее - типа возвращаемого функцией значения. В нашем случае с помощью конструкции As Double мы задали тип функции Double. При объявлении функции можно не указывать тип - тогда он автоматически будет установлен в Variant.

Последняя строка объявления функции - End Function, означает конец функции. Как и в случае с процедурой, внутри тела функции можно разместить операторы, необходимые для выполнения задачи. Однако, здесь есть одна очень важная особенность. После того, как найдено значение, которое функция должна возвратить, в тексте кода функции нужно присвоить это значение переменной, которая имеет то же имя, что и функция. В нашем случае, при имени функции Square это присвоение выглядит какSquare = num_One ^ 2.

Для испытания функции добавим в документ еще одну кнопку - cmd_UserCalc, подписанную как Функция с таким кодом:

Private Sub cmd_UserCalc_Click()

Dim num_Res As Double

Dim num_Input As Double

num_Input = CDbl(InputBox("Введите число"))

num_Res = Square(num_Input)

MsgBox (Str(num_Input) + " во 2-й степени = " + _

Str(num_Res))

End Sub

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

Иногда возникает необходимость в работе с данными, имеющими особенную структуру. Например, какой тип должна иметь переменная, которая может хранить код пользователя, его ФИО, возраст, адрес, телефон, дату рождения? Очевидно, что встроенными типами данных тут не обойтись. Можно, конечно, представить себе строковую переменную, которая содержит все эти данные, записанные подряд, но работать с такой переменной будет очень неудобно. В подобных случаях на помощь приходят пользовательские типы данных. Для определения нового типа данных используется конструкция Type - End Type.

Рассмотрим пример. Создадим документ Microsoft Word, добавим с помощью редактора Visual Basic новый модуль и разместим в нем такой код:

Type Worker ' начало объявления типа данных

Usercode As Integer

Name As String

Phone As String

BirthDate As Date

End Type

Public Sub WorkWithUser()

Dim wrk_NewUser As Worker

Dim wrk_TestUser As Worker

Dim str_UserName As String

wrk_NewUser.Usercode = 1

wrk_NewUser.Name = "Петров Петр Петрович"

wrk_NewUser.Phone = "8(928)8888888"

wrk_NewUser.BirthDate = #8/12/1980#

'Обмен данными между переменными

'пользовательского типа

'адекватен обычному обмену

wrk_TestUser = wrk_NewUser

'Присвоим строковой переменной

'значение одной из частей

'пользовательской переменной

str_UserName = wrk_TestUser.Name

MsgBox ("Имя пользователя: " + str_UserName)

End Sub

Новый тип данных должен быть объявлен вне процедуры - на уровне модуля. Мы специально привели здесь, вместе с текстом объявления типа, процедуру, в которой используется этот тип. Как видите, внутри объявления типа (между Type и End Type), находятся объявления переменных, а сразу после ключевого слова Type следует имя типа. Мы дали типу данных имя Worker, а это значит, что объявляя переменную в модуле, мы будем использовать это имя для указания ее типа данных. Имя нашего типа данных используется при объявлении переменной точно так же, как и имена встроенных типов - String, Byte и т.д. Мы объявили три переменные. wrk_NewUser типа Worker,wrk_TestUser того же типа и str_UserName - обычную строковую переменную.

После того, как переменная типа Worker объявлена, мы можем работать с ней. А именно, обращение к элементам переменной ведется через точку с использованием имен "внутренних" переменных типа. Сначала мы по очереди присваиваем каждой части переменной wrk_NewUser соответствующие значения. Далее мы присваиваем значение переменной wrk_NewUser переменной wrk_TestUser. Как видите, работа с пользовательскими переменными одинакового типа ни чем не отличается от работы с обычными переменными. Несмотря на сложную структуру переменной, обычный оператор присваивания отлично справляется с переносом значений из одной переменной в другую. Следующий этап нашей программы - извлечение значения одной из частей переменной типа Worker, а конкретно - имени пользователя, в строковую переменнуюstr_UserName. После этого мы выводим переменную str_UserName в окне сообщения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: