Шаг 12 - Инструкции DefТип

Используются на уровне модуля для задания типа данных, используемого по умолчанию для переменных, аргументов, передаваемых в процедуры, и значений, возвращаемых процедурами Function и Property Get, имена которых начинаются с соответствующих символов.

DefBool диапазонБукв[, диапазонБукв] . . .
DefByte диапазонБукв[, диапазонБукв] . . .
DefInt диапазонБукв[, диапазонБукв] . . .
DefLng диапазонБукв[, диапазонБукв] . . .
DefCur диапазонБукв[, диапазонБукв] . . .
DefSng диапазонБукв[, диапазонБукв] . . .
DefDbl диапазонБукв[, диапазонБукв] . . .
DefDec диапазонБукв[, диапазонБукв] . . .
DefDate диапазонБукв[, диапазонБукв] . . .
DefStr диапазонБукв[, диапазонБукв] . . .
DefObj диапазонБукв[, диапазонБукв] . . .
DefVar диапазонБукв[, диапазонБукв] . . .

Параметры
диапазонБукв
Обязательный аргумент диапазонБукв имеет следующий синтаксис:

буква_1[-буква_2]

Аргументы буква_1 и буква_2 указывают диапазон имен, для которых задается тип данных по умолчанию. Каждый аргумент представляет первую букву имени переменной, аргумента, процедуры Function или Property Get и может быть любой буквой алфавита. Регистр символов в аргументе диапазонБукв не существенен.

Замечания
Имя инструкции определяет тип данных:

DefBool	Boolean
DefByte	Byte
DefInt	Integer
DefLng	Long
DefCur	Currency
DefSng	Single
DefDbl	Double
DefDec	Decimal (в настоящее время не поддерживается)
DefDate	Date
DefStr	String
DefObj	Object
DefVar	Variant

Например, в следующем фрагменте программы ,b>Message представляет собой строковую переменную:

DefStr A-Q
. . .
Message = "Переполнение стека."

Инструкция DefТип действует только на модуль, в котором она используется. Например, инструкция DefInt в одном модуле действует только на типы данных по умолчанию для переменных, передаваемых в процедуры аргументов, и возвращаемых типов процедур Function и Property Get, описанных в данном модуле. Типы данных по умолчанию для переменных, передаваемых в процедуры аргументов, и возвращаемых типов данных в других модулях остаются без изменений. Если тип данных не описан явно с помощью инструкции DefТип, то для всех переменных, аргументов, процедур Function и Property Get по умолчанию используется тип данных Variant.
При указании диапазона букв обычно определяется тип данных по умолчанию для переменных, которые начинаются с первых 128 символов набора. Однако при указании диапазона A – Z задается тип данных по умолчанию для всех переменных, включая те, что начинаются с международных символов из расширенной части набора (128 – 255).
После указания диапазона A – Z имеется возможность переопределять с помощью инструкций DefТип подчиненные диапазоны переменных. Если после задания диапазона включить ранее определенную букву в другую инструкцию DefТип, возникает ошибка. Однако возможно явное указание типа данных любой определенной или не определенной ранее переменной с помощью инструкции Dim с предложением As тип. Например, имеется возможность использовать следующую программу на уровне модуля для определения переменной с типом Double, хотя был задан тип данных по умолчанию Integer:

DefInt A-Z
Dim TaxRate As Double

Инструкции DefТип не действуют на элементы определяемых пользователем типов, поскольку эти элементы должны быть описаны явно.

Пример
В данном примере инструкции Defтип используются для задания по умолчанию типов данных для переменных и процедур Function, имена которых начинаются с указанных символов. Используемый по умолчанию тип данных может быть изменен только явным присвоением с использованием инструкции Dim. Инструкции Defтип можно использовать только на уровне модуля (т.е. нельзя использовать внутри процедур.

' Переменные, имена которых начинаются с букв "A" - "K",
' будут по умолчанию Integer.
DefInt A-K
' Переменные, имена которых начинаются с букв "L" - "Z",
' будут по умолчанию String.
DefStr L-Z
CalcVar = 4			' Инициализирует переменную типа Integer.
StringVar = "Всем привет"	' Инициализирует переменную типа String.
AnyVar = "Привет" 		' Будет обнаружено несовпадение типов.
Dim Calc As Double		' Явно объявлена переменная типа  Double.
Calc = 2.3455			' Присваивает значение переменной типа Double.

' Инструкции Defтип также применимы к функциям.
CalcNum = ATestFunction(4)	' Вызывает процедуру Function, определенную пользователем.
' Описание процедуры Function ATestFunction.
Function ATestFunction(INumber)
	ATestFunction = INumber * 2	' Возвращает значение типа Integer.
End Function

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.