Оператор Function (Visual Basic)
Объявляет имя, параметры и код, определяющий процедуру Function.
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Части
Термин |
Определение |
attributelist |
Необязательный. См. Список атрибутов. |
accessmodifier |
Необязательный. Может принимать следующие значения:
См. раздел Уровни доступа в Visual Basic. |
proceduremodifiers |
Необязательный. Может принимать следующие значения:
|
Shared |
Необязательный. См. раздел Shared. |
Shadows |
Необязательный. См. раздел Shadows. |
name |
Обязательный. Имя процедуры. См. раздел Имена объявленных типов (Visual Basic). |
typeparamlist |
Необязательный. Список параметров типов для универсальной процедуры. См. раздел Список типов. |
parameterlist |
Необязательный. Список имен локальных переменных, представляющих параметры этой процедуры. См. раздел Список параметров (Visual Basic). |
returntype |
Требуется, если для Option Strict установлено значение On. Тип данных возвращаемого этой процедурой значения. |
Implements |
Необязательный. Указывает, что эта процедура реализует одну или несколько Function процедур, каждая из которых определена в интерфейсе, реализованном классом или структурой, которая содержит эту процедуру. См. раздел Оператор Implements. |
implementslist |
Параметр обязателен, если указано ключевое слово Implements. Список реализуемых процедур Function. implementedprocedure [ , implementedprocedure ... ] Каждая процедура implementedprocedure имеет следующий синтаксис и составляющие: interface.definedname
КомпонентОписание
interface Обязательный.Имя интерфейса, реализуемого классом или структурой, где содержится данная процедура.
definedname Обязательный.Имя, под которым процедура определена в interface.
|
Handles |
Необязательный. Указывает, что эта процедура может обрабатывать одно или несколько конкретных событий. См. раздел Предложение Handles (Visual Basic). |
eventlist |
Параметр обязателен, если указано ключевое слово Handles. Список событий, которые обрабатывает данная процедура. eventspecifier [ , eventspecifier ... ] Каждый описатель события eventspecifier имеет следующий синтаксис и составляющие: eventvariable.event
КомпонентОписание
eventvariable Обязательный.Объектная переменная, объявленная с типом данных класса или структуры, где создается событие.
event Обязательный.Имя события, которое обрабатывает данная процедура.
|
statements |
Необязательный. Блок операторов, выполняемых внутри этой процедуры. |
End Function |
Завершает определение данной процедуры. |
Заметки
Весь исполняемый код должен быть внутри процедуры. Каждая процедура в свою очередь объявляется внутри класса, структуры или модуля, называемых содержащим классом, структурой или модулем.
При необходимости вернуть значение в вызывающий код следует использовать процедуру Function. Если такой необходимости нет, следует использовать процедуру Sub.
Процедуру Function можно определить только на уровне модуля. Это означает, что контекст объявления для функции должен быть классом, структурой, модулем или интерфейсом и не может быть исходным файлом, пространством, процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию (Visual Basic).
Для процедур Function по умолчанию установлен общий доступ. Уровни доступа можно настроить с помощью модификаторов доступа.
Для вызова значения, возвращаемого функцией, процедуру Function следует располагать в правой части выражений. Процедура Function применяется точно так же, как и любые библиотечные функции, такие как Sqrt, Cos, или ChrW.
Вызов процедуры Function осуществляется с помощью имени процедуры, за которым следует список аргументов, заключенный в круглые скобки. Скобки могут опускаться только в том случае, если процедура не имеет аргументов. Однако, код является более удобочитаемым, если всегда включать круглые скобки.
Функция также может быть вызвана при помощи оператора Call; в этом случае возвращаемое значение не обрабатывается.
Примечание
Для определения выражений функции в строке можно воспользоваться лямбда-выражениями.Дополнительные сведения см. в разделах Выражение Function (Visual Basic) и Лямбда-выражения (Visual Basic).
Правила
Возвращаемый тип. При помощи оператора Function можно объявлять тип данных возвращаемого значения. Можно указать любой тип данных или имя перечисления, структуры, класса или интерфейса.
Если returntype не указан, процедура возвратит Object.
Реализация. Если эта процедура использует ключевое слово Implements, то оператор Implements в содержащем классе или структуре также должен использоваться сразу после Class или Structure. Оператор Implements должен включать все интерфейсы, указанные в implementslist. Однако имя, которым интерфейс определяет Function (в definedname) не обязательно должно совпадать с именем данной процедуры (в name).
Поведение
Возвращение из процедуры. Когда процедура Function возвращает результат в вызывающий код, выполняется оператор, следующий за оператором, из которого была вызвана процедура.
Операторы Exit Function и Return вызывают немедленный выход из процедуры Function. Любое количество операторов Exit Function и Return может использоваться в любом месте процедуры, и их также можно использовать вместе с операторами Exit Function и Return.
Возвращаемое значение. Для возврата значения функции можно присвоить значение имени функции или включить его в оператор Return. В следующем примере возвращаемое значение присваивается имени функции myFunction и затем используется оператором Exit Function для возврата.
Function myFunction(ByVal j As Integer) As Double myFunction = 3.87 * j Exit Function End Function
Если используется Exit Function без присвоения значения для name, процедура возвращает значение по умолчанию для типа данных, указанного в returntype. Если returntype не указан, процедура возвращает Nothing, значение по умолчанию для Object.
Оператор Return одновременно назначает возвращаемое значение и выходит из функции. Это показано в следующем примере.
Function myFunction(ByVal j As Integer) As Double Return 3.87 * j End Function
Устранение неполадок
- Порядок выполнения. Visual Basic иногда меняет местами содержащиеся в коде арифметические выражения для повышения внутренней эффективности выполнения программы. По этой причине не следует использовать процедуру Function в арифметическом выражении, если эта процедура изменяет значения входящих в выражение переменных.
Пример
В следующем примере оператор Function используется для объявления имени, параметров и кода, который формирует тело процедуры Function. Модификатор ParamArray позволяет функции принять переменное число аргументов.
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
В следующем примере вызывается функция, объявленная в предыдущем примере.
Module Module1
Sub Main()
' In the following function call, calcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = calcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
End Module
См. также
Задачи
Практическое руководство. Использование универсального класса (Visual Basic)
Устранение неполадок в процедурах (Visual Basic)
Ссылки
Список параметров (Visual Basic)
Выражение Function (Visual Basic)