Поделиться через


Оператор 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)

Ссылки

Оператор Sub (Visual Basic)

Список параметров (Visual Basic)

Оператор Dim (Visual Basic)

Оператор Call (Visual Basic)

Предложение Of (Visual Basic)

Выражение Function (Visual Basic)

Основные понятия

Массивы параметров (Visual Basic)

Лямбда-выражения (Visual Basic)