定义一个函数(返回值的过程)
语法
参数
identifier :函数的名称
external_identifier :外部可见(链接器)名称用引号括起来
parameter_list :
parameter [, parameter [, ...]]
parameter :
[ByRef|ByVal] identifier [As type ] [= default_value ]identifier :函数中引用的变量的名称。如果参数是数组,那么标识符后面必须有一个空括号。
type :变量的类型
default_value :参数的值,如果在调用中没有指定
return_type :该函数返回的变量类型
statements :构成函数体的一个或多个语句
return_value :从函数返回的值
说明
一个函数定义一个可以用单个语句(函数调用)执行的代码块,并在完成时返回一个值(返回值)。使用功能有几个原因:
- 减少程序冗余
- 允许在许多程序中重用代码
- 提高程序的可读性
- 提高程序的可维护性
- 使您的程序扩展变得容易
Access Rights :
Public和
Private关键字分别指定公共或私人内部模块级访问权限。如果没有给定,则该函数默认为公共访问(
Public)。
Calling Convention :使用
cdecl,
pascal和
stdcall关键字指定调用约定或在函数调用期间从堆栈中推出和弹出参数的顺序。如果没有给定,则该函数默认使用标准约定(
stdcall)。
Passing Arguments :函数调用时可能会收到一个或多个变量或参数。这些参数在
parameter_list 中列为
parameters .
ByRef和
ByVal关键字分别指定参数是通过引用还是按值传递。参数的类型由
parameter 之后的“
As type ”给出。如果声明中的参数为默认值,则该参数是可选的。数组参数通过使用带有空括号的标识符来指定。请注意,数组参数始终为
ByRef,并且
ByRef关键字既不是数组参数也不允许。当调用具有数组参数的函数时,必须在这里提供括号;看例子。
Overloaded Functions :重载的函数可能与另一个具有不同签名的名称(
identifier )共享。
Overload关键字指定一个函数可能被重载。必须使用
Overload关键字定义或声明函数,然后才能使任何超载的函数。
Returning values :
return_type 指定退出时函数返回的
data type.如果没有指定数据类型,则该函数将返回默认数据类型,除非使用
DefSng,
DefDbl,
DefStr等设置为其他数据类型,否则将为整数。函数可以使用三种方法返回值:
Return关键字后跟一个值将立即退出函数,并将该值返回给调用者。函数也可以通过将Function关键字或函数的
identifier 赋值到所需的返回值来返回值。后两种方法不会导致功能退出。当使用构造函数返回对象时,与同一函数中的Function = keyword或function的
identifier =或
Exit Function关键字混合使用的
Return关键字不受支持。由于函数返回值,函数调用计算为表达式。因此,在
赋值或
If语句中,可以在预期的任何地方进行函数调用。在表达式中的函数调用中需要围绕参数列表的括号,如果没有参数,甚至强烈建议使用括号。函数也可以通过指定
Byref As return_type 返回引用。
Local Variable Preservation :
Static关键字指定函数的本地声明的变量在函数调用之间保留。在输入使用
Static定义的函数时,局部变量的值与上次调用函数的值相同。
例子
''该程序演示了一个函数的声明
''并使用Return命令返回一个值
Declare Function ReturnTen () As Integer
Print ReturnTen () ''ReturnTen默认返回一个整数。
Function ReturnTen() As Integer
Return 10
End Function
''该程序演示了一个函数的声明
''并使用赋值给函数名返回一个值
Declare Function ReturnTen () As Integer
Print ReturnTen () ''ReturnTen默认返回一个整数。
Function ReturnTen() As Integer
ReturnTen = 10
End Function
''此程序演示功能重载。
''重载功能必须为FIRST。
Declare Function ReturnTen Overload (a As Single) As Integer
Declare Function ReturnTen Overload (a As String) As Integer
Declare Function ReturnTen (a As Integer) As Integer
Print ReturnTen (10.000!) ''ReturnTen将单个并返回一个整数
Print ReturnTen (10) ''ReturnTen将取整数并返回一个整数
Print ReturnTen ("10") ''ReturnTen将使用一个字符串并返回一个整数
Function ReturnTen Overload (a As Single) As Integer
Return Int(a)
End Function
Function ReturnTen Overload (a As String) As Integer
Return Val(a)
End Function
Function ReturnTen (a As Integer) As Integer
Return a
End Function
''以下示例演示可选参数。
Function TestFunc(P As String = "默认") As String
Return P
End Function
Print TestFunc("测试:")
Print TestFunc
''此示例显示如何声明和调用
''函数采用数组参数。
Function x(b() As Double) As Integer
x = UBound(b)-LBound(b)+1
End Function
Dim a(1 To 10) As Double
Print x(a())
Dim c(10 To 20) As Double
Print x(c())
方言差异
与QB差别
- FreeBASIC中的参数可以是可选的。
- 在QBASIC中,返回类型只能用后缀指定,而不是AS TYPE ,并且只允许函数返回内置类型。
- 返回值现在可以由返回语句指定。
- FreeBASIC支持功能超载.
- 函数的返回值可以在调用代码中忽略。
参考