Foxbase中自定义函数的意义和函数的妙用

Author: 杨永斌 Date: 1996-04-26

        一、自定义函数:
        用户自定义函数(UDF)实质上是一段简单的FOXBASE+程序,其中包括一组有效的FOXBASE+语句。因此,自定义函数可以构成一个独立的命令文件,或作为一个过程包括在过程文件中。自定函数的定义方法:自定义函数由三部分组成。第一部分是PARAMETER语句定义函数的形式参数,若无参数,此语句也可缺省;第二部分是函数体,其中完成各种运算;第三部分是由RETURN语句返回函数值。自定函数定义结束后,也象标准函数一样调用。
        例如:自定义一个求长方形面积的函数:
        ***AREA.PRG***
        PARAMETER L,W
        A=L*W
        RETURN A
        调用时:.STURE AREA(5,2) TO Y
        .?Y
        10
        二、函数的妙用:
        在此仅以IIF()函数为例,说明在程序中灵活使用函数的作用:
        IIF()函数的语法形式为:IIF(<逻辑表达式>,<表达式1>,<表达式2>),其功用是:当<逻辑表达式>为真时返回<表达式1>的值,否则,返回<表达式2>的值。
        例如函数:IIF(A>B,A,B)的作用是求A、B的最大值,此函数与程序段:
        IF A>B
        M=A
        ELSE
        M=B
        ENDIF等价。
        显然IIF()函数可以简化程序代码,但由于IIF()函数的介入,给表达式的求值赋予了新意,它使得一个表达式的求值可以有选择地从某一子表达式求值。而表达式可以出现在许多命令、函数中,则IIF()函数给这些命令函数增添了新的条件选择功能。例如对一个工资库作工资调整,其中对初级职称以下者工资普调10元,初级职称调20元,中级调30元,高级调40元,则可用以下四条语句完成:
        REPLACE ALL 工资 WITH 工资+10
        REPLACE ALL 工资 WITH 工资+10 FOR 职称="助工"
        REPLACE ALL 工资 WITH 工资+20 FOR 职称="工程师"
        REPLACE ALL 工资 WITH 工资+30 FOR 职称="高工"
        若引入IIF()函数,可用以下一条语句完成:
        REPLACE ALL 工资 WITH IIF(职称="高工",工资+40,IIF(职称="工程师",工资+30,IIF(职称="助工",工资+20,工资+10)))
        显然程序代码被简化,同时执行时间也将缩短,因为前者需扫描库文件四次,后者仅扫描一次,若库文件较大,时间比也就较明显。