《VFP0406变量作用域、自定义函数汇总(定稿).docx》由会员分享,可在线阅读,更多相关《VFP0406变量作用域、自定义函数汇总(定稿).docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VFP0406变量作用域、自定义函数汇总(定稿) VFP-04-06变量作用域、自定义函数.doc 8-1 变量作用域、自定义函数 4.5.3 内存变量的作用域 变量的作用域:变量的作范围。程序由模块(主、子程序)组成,模块中有内存变量,内存变量有作用范围。变量的作用域,从定义变量处起先,始终向下。 1定义全局内存变量 全局变量既可以是单个变量,也可以是数组。分别以下列格式定义。 格式1:Public 格式2:Public (上界1,上界2, .), 功能:定义全局变量。 中既可含一般变量,也可含数组。 全局变量不会自动释放。只能用release吩咐显式释放,或退出VFP。 VFP吩咐窗口中定
2、义的变量,默认为全局变量。 全局数组的每个元素都是全局的。 第116页,例 4.35 主程序中运用子程序中定义的全局变量。 *文件名Main.prg set talk off clear clear memory &清除全部内存变量 I=2 &默认是私有的 Do ABC ?主程序中的输出结果: ?I=+str(I,2)+ J=+str(J,2) set talk on return *- Procedure ABC public J J=I*8 J=J+5 ?过程中的输出结果: ?I=+str(I,2)+ J=+str(J,2) return 小提示:要检测全局变量,请先clear memor
3、y以解除干扰。 2定义局部内存变量 (1)什么叫局部? 更小的范围就是局部。对于一个模块,更后的部分是局部。对于主程序,子程序是局部。 (2)Private定义局部变量 VFP-04-06变量作用域、自定义函数.doc 8-2 格式1:Private 格式2:Private (上界1,上界2, .), 功能:定义局部变量。 未经定义的变量,默认是局部(Private)的。 无论全局还是局部变量,无初值的,一律自动赋初值.F.。 局部变量作用域的子模块扩展规则 Private变量的作用域,通过调用子模块而扩展到子模块中。 图4-20 Private变量作用域子模块扩展规则 第117页,例 4.3
4、6 子程序中的局部变量,在主程序中找不到。 R=100 &默认为Private变量 Do Sub1 &调用子程序 ?P &主程序中找不到这个变量 Return *- procedure Sub1 P=2*3.14*R &主程序中的Private变量,子程序中可用 return 3Private隐藏内存变量的功能 (1)同名变量就近运用规则(原理) 程序中,对于同名的变量,默认运用最近的。因此, 字段变量(因为在当前工作区内)优先于(即隐藏)同名内存变量; 注:什么叫隐藏?就是被遮住,看不见,用不上。 图4-22 字段变量隐藏同名内存变量 例如 use student.dbf use stude
5、nt.dbf VFP-04-06变量作用域、自定义函数.doc 8-3 ?学号 &结果是字段变量“学号”值,如“960106” 学号=abcd &“=”号赋值,只给内存变量赋值 ?学号 &结果还是优先运用字段变量 ?m.学号 &特殊用“m.”指明内存变量,结果才是“abcd” 同一模块内,小局部存变量优先于(即隐藏)大局部同名内存变量; 图4-23 Private变量隐藏同模块同名变量 不同模块中,子模块局部内存变量优先于(即隐藏)主模块同名内存变量。 图4-26 用Private隐隐藏变量 小提示:主程序中的private变量,子程序同样可以用private屏蔽。 (3)为什么大范围定义的局
6、部变量,小范围中再定义为全局变量会出错? 因为那样,与Private的隐藏功能相冲突。 第118页,例 4.37 子程序中的同名局部变量隐藏主程序中同名变量。 R=100 &默认为Private变量 P=10 &默认为Private变量 Do Sub2 &调用子程序 ?P &仍是主程序中的值 Return *- procedure Sub2 Private P &局部变量,主程序中的同名变量被屏蔽 P=2*3.14*R &主程序中的Private变量,子程序中可用 Return *(5)有没有不通过子程序扩展作用域的变量? VFP-04-06变量作用域、自定义函数.doc 8-4 有,Loca
7、l变量,即本地变量。如:Local x,y,z。 小提示:采纳Local变量,是向C语言靠拢。 4调用过程时的数据传递 教学提示:VFP的参数传递,过程中默认传址,函数中默认传值。 向过程传递数据,有两种方法。 (1)利用Private变量的作用域扩展规则,不传而传 过程中,可以干脆运用主程序中的Private变量,不必传。 第118页,例 4.38 计算矩形面积。 G=8 &长 K=6 &宽 mj=0 &面积 do sub3 ?Mj return *- procedure sub3 mj=G*K return (2)在过程第一句用Parameters接收参数 主程序中传出参数格式:Do Wi
8、th 子程序中接收参数格式: Parameters 说明: 子程序中,Parameters必需是第一句。Parameters变量是Private变量。 传值:Parameters后的变量与主程序中对应的实际参数无关。 传引用:Parameters后的变量与主程序中对应的实际参数是同一个变量,名称可能不同而已,同时改变。 引用隐藏实参规则 子模块中,引用参数隐藏实际参数,是因为引用参数与实际参数是同一个变量,只是在子模块中另取了一个名字(别名)而已。因此,原来的实际参数被隐藏,才不会混乱,包括实际参数是Public变量的状况。 如何确定传值、传地址?由实际参数确定。过程的实际参数默认引用。要传值
9、须实际参数加“()”,或者写成表达式。 VFP-04-06变量作用域、自定义函数.doc 8-5 图4-27 传值与传引用 第119页,例 4.39 写程序运行结果。 set talk off x=1 y=3 do sub4 with x,(y),5 ?x,y return *- Procedure sub4 parameters a,b,c a=a+b+c b=a+b-c return &答: 9, 3 第120页,例 4.40 利用一个过程计算矩形面积,要求在主程序输出该面积值。 set talk off clear input 矩形长: to L input 矩形宽: to W S=0
10、do Area with L,W,S ?矩形面积:,S return *- Procedure Area Parameters C,K,M M=C*K return 4.5.4 自定义函数 VFP-04-06变量作用域、自定义函数.doc 8-6 1自定义函数的结构 自定义函数事实上是一个过程,只不过其Return语句后带有表达式,能向主函数返回值。 格式: Function Parameters Return 说明: 缺省返回.T.。 与过程一样,自定义函数,可以单独以同名程序文件存储,也可以存入过程文件中。 2自定义函数的调用 小提示:过程中叫实际参数的,函数中叫自变量。 格式:因变量=
11、(自变量表) 说明: 函数查找规则 调用函数时,先在内部函数中找;找不到再到打开的过程文件中找;再找不到,在当前文件夹中找;再找不到,出错。 若自定义函数与内部函数同名,将不被找到,用不到。 参数表要与自变量表相对应,包括类型和个数。 自变量表中,可以是变量,也可以是表达式。自变量默认传值。要传引用,须在自变量前面加“”,或SET UDFPARMS TO REFERENCE设置默认为传引用。 函数可以当过程用,调用格式为“do with 自变量表”。但要留意,当过程用时,默认传引用,因为过程默认传引用;且放弃返回值。 小提示:自变量默认传值,是向C语言靠拢。 小提示:过程默认传引用,函数默认传
12、值。 第122页,例 4.41 定义一个函数,将day()日期转成“公元 年 月 日”格式。 Y=DA() ?Y return *- Function DA D=公元+LTRIM(STR(YEAR(DATE()+年 D=D+LTRIM(STR(MONTH(DATE()+月 D=D+LTRIM(STR(DAY(DATE()+日 Return D 第122页,例 4.42 用自定义函数计算组合数。 VFP-04-06变量作用域、自定义函数.doc 8-7 m! n!(m-n)!y=c(5,3) ?y return *- Function FAC &阶乘factor parameters x f=1
13、 for k=1 to x f=f*k endfor return f *- Function C &组合数conbination parameters m,n y=int(FAC(m)/(FAC(n)*FAC(m-n) return y C(m,n)=*附加 4.5.5 自定义函数的括号参数格式 “()”在VFP中是间接引用符,有传值之意。 1自函数的“()式”结构 格式: Function () Return 说明:这是自定义函数的另一种格式。它只是将Function行和Parameter行合并成一行,其它并无差别;其调用方式也没有区分。 小提示:表单自定义函数不能用括号参数格式,故一般不
14、学、不用。 例 自定义函数fun1(x,y,z),分别将其当过程和“()式”函数调用。 A=123 B=234 C=abc clear do fun1 with A, (B),C &当过程用,默认传引用,但B传值 ?A=,A,B=,B,C=,C D=fun1(A,B,C) &当函数用,默认传值,但B和C传引用 ?D=,D Return *- VFP-04-06变量作用域、自定义函数.doc 8-8 Function fun1(X,Y,Z) x=x+10000 y=y+10000 z=z+12345 return X+Y VFP0406变量作用域、自定义函数汇总(定稿) vba自定义函数小结 SQL Sever 教案第13章 存储过程及自定义函数 第5章 视图、存储过程和用户自定义函数复习题 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第10页 共10页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页第 10 页 共 10 页