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

Обновлен: Ноябрь 2007

Объявляет имя, параметры и код, определяющий процедуру Function.

sect4ck6.alert_note(ru-ru,VS.90).gifПримечание.

Visual Basic 2008 представляет лямбда-выражения, позволяющие определять выражения функций в строке. Дополнительные сведения см. в разделах Выражение функции и Лямбда-выражения.

[ <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
    Обязательный компонент. Имя процедуры. См. раздел Имена объявленных элементов.

  • typeparamlist
    Необязательный компонент. Список параметров типов для универсальной процедуры. См. раздел Список типов.

  • parameterlist
    Необязательный компонент. Список имен локальных переменных, представляющих параметры этой процедуры. См. раздел Список параметров.

  • returntype
    Требуется, если для Option Strict установлено значение On. Тип данных возвращаемого этой процедурой значения.

  • Implements
    Дополнительный. Указывает, что эта процедура реализует одну или несколько Function процедур, каждая из которых определена в интерфейсе, реализованном классом или структурой, которая содержит эту процедуру. См. раздел Оператор Implements.

  • implementslist
    Параметр обязателен, если указано ключевое слово Implements. Список реализуемых процедур Function.

    implementedprocedure [ , implementedprocedure ... ]

    Каждая реализуемая процедура implementedprocedure имеет следующий синтаксис и компоненты:

    interface.definedname

    Компонент

    Описание

    interface

    Обязательный параметр. Имя интерфейса, реализуемого классом или структурой, где содержится данная процедура.

    definedname

    Обязательный параметр. Имя, под которым процедура определена в interface.

  • Handles
    Необязательный параметр. Указывает, что эта процедура может обрабатывать одно или несколько конкретных событий. См. раздел Handles.

  • eventlist
    Параметр обязателен, если указано ключевое слово Handles. Список событий, которые обрабатывает данная процедура.

    eventspecifier [ , eventspecifier ... ]

    Каждый описатель события eventspecifier имеет следующий синтаксис и компоненты:

    eventvariable.event

    Компонент

    Описание

    eventvariable

    Обязательный параметр. Объектная переменная, объявленная с типом данных класса или структуры, где создается событие.

    event

    Обязательный параметр. Имя события, которое обрабатывает данная процедура.

  • statements
    Дополнительный. Блок операторов, выполняемых внутри этой процедуры.

  • EndFunction
    Завершает определение данной процедуры.

Заметки

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

При необходимости вернуть значение в вызывающий код следует использовать процедуру Function. Если такой необходимости нет, следует использовать процедуру Sub.

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

Для процедур Function по умолчанию установлен общий доступ. Уровни доступа можно настроить с помощью модификаторов доступа.

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

Вызов процедуры Function осуществляется с помощью имени процедуры, за которым следует список аргументов, заключенный в круглые скобки. Скобки могут опускаться только в том случае, если процедура не имеет аргументов. Однако, код является более удобочитаемым, если всегда включать круглые скобки.

Функция также может быть вызвана при помощи оператора Call; в этом случае возвращаемое значение не обрабатывается.

Правила

  • Возвращаемый тип. При помощи оператора 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

В следующем примере вызывается функция, объявленная в предыдущем примере.

Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.

См. также

Задачи

Практическое руководство. Использование универсального класса

Устранение неполадок в процедурах

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

Массивы параметров

Лямбда-выражения

Ссылки

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

Список параметров

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

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

Of

Выражение функции