分类
Function过程是包含在Function和End Function语句之间的一组VBScript语句。
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
可以在模块、类或结构中定义Function过程。默认情况下此过程为Public,这意味着您可以从能够访问定义了此过程的模块、类或结构的应用程序中的任何地方调用此过程。
Function过程能够带参数,如由调用代码传递给它的常数、变量或表达式。
声明语法
声明Function过程的语法如下所示:
[ modifiers ] Function functionname [( parameterlist )] As returntype
' Statements of the Function procedure.
End Function
modifier可以指定与重载、重写、共享和隐藏相关的访问级别和信息。有关更多信息,请参见Function语句(Visual Basic)。
声明每个参数的方法与声明Sub过程的方法相同。
数据类型
每个Function过程都具有数据类型,就和每个变量都具有数据类型一样。此数据类型由Function语句中的As子句指定,它确定函数返回给调用代码的值的数据类型。下面的示例声明演示了这一点。
复制代码
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 functionname [( parameterlist )] As returntype
' The following statement does not transfer control back to the calling code.
functionname = expression
' When control returns to the calling code, expression is the return value.
End Function
它使用Return语句指定返回值,并直接将控制返回调用程序。下面的示例演示这一点。
Function functionname [( parameterlist )] As returntype
' The following statement immediately transfers control back to the calling code and returns the value of expression .
Return expression
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过程的语法如下所示:
lvalue = functionname [( argumentlist )]
If (( functionname [( argumentlist )] / 3) <= expression ) Then
当调用Function过程时,不必使用它的返回值。如果不使用它的返回值,将执行函数的所有操作,而忽略返回值。通常使用此方式调用MsgBox。
声明与调用阐释
下面的Function过程通过给定的直角三角形的两条直角边计算该三角形的最长边(即斜边)。
Visual Basic复制代码Function hypotenuse(ByVal side1 As Single, ByVal side2 As Single) As Single
Return Math.Sqrt((side1 ^ 2) + (side2 ^ 2))
End Function
下面的示例演示对hypotenuse的典型调用。
Visual Basic复制代码Dim testLength, testHypotenuse As Single
testHypotenuse = hypotenuse(testLength, 10.7)