首页 百科知识 过程与函数

过程与函数

时间:2022-06-19 百科知识 版权反馈
【摘要】:六、MapBasic过程与函数1.MapBasic过程将程序分割成较小的逻辑部件可以简化程序设计的任务、结构化应用程序、增强程序的可读性,这些部件称为过程。在默认情况下,MapBasic过程参数是以形式参数的方式传递的。过程调用时,result代替形参cubed,将值2传递给值参original参与立方运算,将计算结果送给变量result。Declare Function CubeRootAs FloatDeclare Sub MainSub MainDim f_result As Floatf_result=CubeRoot Note Str$End SubFunction CubeRootAs FloatCubeRoot=x^0.33333333333 End Function应用程序中可以定义与标准MapBasic函数同名的用户函数。

六、MapBasic过程与函数

1.MapBasic过程

将程序分割成较小的逻辑部件可以简化程序设计的任务、结构化应用程序、增强程序的可读性,这些部件称为过程。MapBasic过程包含主过程和子过程,是MapBasic程序结构中的一个不可缺少的部分。一个典型的MapBasic程序由许多过程组成,每个过程都包含一组完成某一特定任务的语句。

(1)主过程与子过程。每一个MapBasic程序至少有一个过程,这个过程叫做主过程(Main),其余的过程称为子过程。子过程都必须由主过程或别的子过程来调用。当运行一个MapBasic应用程序时,MapBasic自动调用该应用程序的主过程。程序中的每一个过程在定义前都必须先声明,声明MapBasic过程可以用Declare Sub语句,Declare Sub语句告诉MapBasic下面将定义一个主过程或子过程,并且Declare Sub语句必须出现在过程实际定义之前。典型的Declare语句出现在程序的开始处。一个过程可用Sub…End Sub进行定义,其语法形式如下:

Sub proc_name[([ByVal]parameter As var_type[,…])]

  statement_list

End Sub

其中:proc_name为过程名,parameter为过程参数,statement_list为过程体。

下面的程序示意如何显式声明一个主过程。在这个例子中主过程只简单地包含一个Note语句。

Declare Sub Main

Sub Main

  Note"Hello from MapBasic!"

End Sub

在MapBasic中,可以不明确地定义主过程,而在程序的开始部分输入几句简单的语句,这些语句在任何过程之外,则MapBasic将这些语句看成一个主过程,这被称为一个隐含的主过程。

(2)过程的调用。当运行一个已编译好的应用程序时,MapInfo会自动调用主过程。在主过程中又可以通过Call语句调用其他子过程。下面的程序包括两个过程:一个主过程Main和一个子过程announce_data。

Declare Sub Main

Declare Sub announce_dat

Sub Main

  Call announce_data

End Sub

Sub announce_data

  Note"Today’s date is"+Str$(CurDate()) 'Str$(CurDate())是将当前日期转换为字符串

End Sub

(3)过程的参数传递。MapBasic可以创建一个带参数的子过程。如果一个子过程带有参数,那么它们要在Declare Sub语句和Sub…End Sub语句中先进行声明。参数传递分为形式参数传递和值参数传递两种。

①形式参数传递是过程用变量的内存地址去访问实际变量的内容,又可称为按地址传递参数。在默认情况下,MapBasic过程参数是以形式参数的方式传递的。

②值参数传递是子过程调用时用实际的参数值而不是变量代替形参参与子过程处理的一种参数传递方式。为了说明参数是值参,必须在Declare语句和Sub…End Sub语句中使用关键词Byval指明。

下面的例子调用了一个含有值参和形参的子过程Cube。

Declare Sub Main

Declare Sub Cube(ByVal original As Float,cubed As Float)

Sub Main

Dim result As Float

Call Cube(2,result)

End Sub

Sub Cube(ByVal original As Float,cubed As Float)

cubed=original^3

End Sub

在上例Cube子过程的声明与定义中,通过关键词ByVal指明original为值参数,同时还包含一个形式参数cubed。过程调用时,result代替形参cubed,将值2传递给值参original参与立方运算,将计算结果送给变量result。

2.MapBasic函数

MapBasic提供了多种不同的函数,有标准BASIC函数,如Asc()、Format$()、Val()等以及MapBasic特有的函数,如Distance()、ObjectGeography()等。除此以外,MapBasic允许用户在应用程序中自定义函数,一旦建立了一个用户函数,就可以像MapBasic标准函数一样调用它。

自定义函数用Function…End Function结构来定义,其语法形式如下:

Function name([[ByVal]parameter As datatype]

       [,[ByVal]parameter As datatype…])As return_type

statement_list

End Function

其中:name为函数名,parameter为参数名称,datatype为参数类型,return_type为函数返回值数据类型,statement_list为语句体。

函数本身有一个数据类型,在Function…End Function结构体中,函数名相当于一个形式参数,在函数体中可以给函数名赋值,也就是MapBasic返回给函数调用者的值。

下面的例子定义了一个用户函数CubeRoot,返回一个数的立方根。

Declare Function CubeRoot(ByVal x As Float)As Float

Declare Sub Main

Sub Main

Dim f_result As Float

f_result=CubeRoot(23) Note Str$(f_result)

End Sub

Function CubeRoot(ByVal x As Float)As Float

CubeRoot=x^0.33333333333 End Function

应用程序中可以定义与标准MapBasic函数同名的用户函数。当程序调用这个同名的函数时,真正被调用的是用户函数而不是标准函数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈