Процедуры Function
Обновлен: Ноябрь 2007
Процедура Function — это последовательность операторов Visual Basic, заключенных между операторами Function и End Function. Процедура Function выполняет задачу и возвращает управление вызвавшему ее коду. Вместе с управлением вызвавшему коду возвращается значение.
При каждом вызове процедуры ее инструкции выполняются, начиная с первого исполняемого оператора после оператора Function и заканчивая первым из операторов End Function, Exit Function или Return.
Можно определить процедуру Function в модуле, классе или структуре. По умолчанию эта процедура является глобальной (Public), что позволяет вызывать ее из любого места в приложении, из которого доступны модуль, класс или структура, в которых она определена.
Процедура Function может принимать аргументы, например константы, переменные или выражения, которые передаются ей вызывающим кодом.
Синтаксис объявления
Для объявления процедуры Function используется следующий синтаксис:
[модификаторы] Function имя_функции[(список_параметров)] As тип_возвращаемого_значения
' Statements of the Function procedure.
End Function
В разделе модификаторы можно указать уровень доступа и сведения о перегрузке, переопределении, общем доступе и переобъявлении. Дополнительные сведения см. в разделе Оператор Function (Visual Basic).
Параметры объявляются так же, как для Процедуры Sub.
Тип данных
Каждой процедуре Function, как и любой переменной, назначается тип данных. Этот тип данных указывается предложением As оператора Function и определяет тип значения, которое функция будет возвращать вызывающему коду. Например:
Function yesterday() As Date
End Function
Function findSqrt(ByVal radicand As Single) As Single
End Function
Дополнительные сведения об ограничениях содержатся в подразделе "Компоненты" раздела Оператор Function (Visual Basic).
Возвращаемые значения
Значение, которое процедура Function отправляет вызывающему коду, называется возвращаемым значением. Процедура возвращает значение одним из двух способов:
Значение присваивается собственному имени функции в одном или нескольких операторах процедуры. Управление не возвращается вызывающей программе до тех пор, пока не будет выполнен оператор Exit Function или End Function. Это показано в приведенном ниже примере.
Function имя_функции[(список_параметров)] As тип_возвращаемого_значения
' The following statement does not transfer control back to the calling code.
имя_функции = выражение
' When control returns to the calling code, выражение is the return value.
End Function
Для определения возвращаемого значения используется оператор Return, после которого управление немедленно возвращается вызывающей программе. Это показано в приведенном ниже примере.
Function имя_функции[(список_параметров)] As тип_возвращаемого_значения
' The following statement immediately transfers control back to the calling code and returns the value of выражение.
Returnвыражение
End Function
Преимущество первого способа (с присвоением имени функции возвращаемого значения) заключается в том, что управление возвращается в вызывающую программу только после того, как будет выполнен оператор Exit Function или End Function. Это позволяет разработчику определить предварительное значение и изменять его впоследствии при необходимости.
Дополнительные сведения см. в разделе "Возвращаемое значение" Оператор Function (Visual Basic).
Возврат массивов
Если процедура Function возвращает массив, отдельные элементы массива внутри функции будут недоступны. Попытку выполнить такой доступ компилятор интерпретирует как рекурсивный вызов функции. Это показано в приведенном ниже примере.
Function allOnes(ByVal n As Integer) As Integer()
For i As Integer = 1 To n - 1
' The following statement generates a COMPILER ERROR.
allOnes(i) = 1
Next i
' The following statement generates a COMPILER ERROR.
Return allOnes()
End Function
В предыдущем примере компилятор интерпретирует попытку присвоения allOnes(i) = 1 как вызов функции allOnes, стоящей слева от оператора присваивания. Он интерпретирует Return allOnes() как вызов без аргументов. Оба оператора порождают ошибку компилятора.
Синтаксис вызова
Для вызова процедуры Function следует указать ее имя и аргументы справа от оператора присваивания или в составе выражения. Необходимо задать значения всех аргументов, которые являются обязательными, причем список аргументов должен быть заключен в скобки. Если не указано никаких аргументов, скобки можно опустить.
Для вызова процедуры Function используется следующий синтаксис:
значение_слева = имя_функции[(список_аргументов)]
If ((имя_функции[(список_аргументов)] / 3) <= выражение) Then
При вызове процедуры Function не обязательно использовать возвращаемое ею значение. Если значение не используется, выполняются все действия функции, но возвращаемое значение игнорируется. Часто таким образом вызывается функция MsgBox.
Пример объявления и вызова
Приведенная ниже процедура Function вычисляет длину самой длинной стороны прямоугольного треугольника (гипотенузы) по значениям двух других сторон.
Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function
В следующем примере показан типичный вызов hypotenuse.
Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)
Функции среды выполнения Visual Basic
В среде выполнения Visual Basic представлено множество функций, расположенных в пространстве имен Microsoft.VisualBasic. В него входят такие наиболее используемые функции, как Функция Beep, Функция MsgBox (Visual Basic) и Функция StrComp (Visual Basic). Эти функции можно вызывать точно так же, как и свои собственные процедуры Function.
См. также
Задачи
Практическое руководство. Создание процедуры, возвращающей значение
Практическое руководство. Возврат значения из процедуры
Практическое руководство. Вызов процедуры, возвращающей значение
Основные понятия
Параметры и аргументы процедуры