在wml script中,函数是一种可以完成某种功能的代码块,并可以在脚本中被事件处理或被其他语句调使用,也可以被wml程序所处理和调使用。一般地,当我们编写wml script脚本时,如果脚本中的代码长度还是很长,则一般还可以根据功能将函数再进行划分,分成为几个功能更加单一的函数。虽然说这样对长代码的处理方法并不是编写脚本程序的强制性要求,但通过函数的划分和运使用,我们可以使得wml script脚本具有更好的可读性,也便于我们对脚本程序的编写与调试。并且,如果在某些脚本中有多处完全相同的代码块,那么我们也可以将这些代码快些为一个函数,然后在脚本中调使用这个函数,从而提高代码的重要性,简化代码的编写工作。
wml script的函数共使用和jave语言、c/c 语言的函数有所不同。我们知道,jave语言、c/c 语言中有函数和过程之分,函数可以完成一定的功能并有返回值,而过程进可完成一定的功能但没有返回值。可是,wml script中并不区分函数和过程,因为它只有函数,没有过程。wml script的函数完成一定功能后始终有返回值,不过返回值分两种情况,即非空的返回值和空字符串("")形式的返回值。前者是真正的返回值,后者其实相称于没有返回值。也就是说,wml script中的函数同时具有其他语言中的函数和过程的功能。
5.2.1 函数的声明
使用函数时,要根据函数的调使用使用,而调使用函数前必须声明函数,也就是需要先定义函数。wml script中定义函数的一般方式如下:
function函数名(参数列表)
{
代码块
};
另外,wml script规定使用extern关键字来声明一个外部函数:
extern function函数名(参数列表)
{
代码块
};
从中可以看出,函数的定义有以下3部分组成:
(1)函数名。即函数的名称,其命名规则应遵守wml script的标识规则。调使用函数时都是通过函数名进行调使用的,所以函数必须要有函数名。
函数命名时,一般要使用可以描述函数功能的但此来作为函数名,也可以使用多个单词组合进行命名,这样做的好处是可以提高wml script脚本的可读性。
函数名在同一个wml script脚本文件里必须是唯一的。如若不然,则会导致函数定义混乱。
(2)参数列表。即调使用函数时需要的参数。参数列表通常是可选的,有的函数需要,有的函数可能不需要。参数列表的作使用是向函数传递几种参数,使得函数可以直接使用这些参数的值。
调使用函数的时候,参数个数和类型必须和函数定义示所声明的参数个数即类型保持一致。并且函数的参数就犹如似函数体内的局部变量,它们在函数调使用的时候被初始化。
(3)代码块。它是函数的主体部分。代码块中的代码包含在以对花括号({ })中,代码块可以执行并完成函数的功能。编写代码块是应当遵循wml script的编程规则。
有时,函数需要返回一个值给调使用函数的语句,则应该在代码块的后面一行使用return语句,返回所需的数值。
与c/c 等语言类似,wml script的函数是可以嵌套的,以就是说,在一个函数中还可以调使用其他函数。但是,函数声明是无法嵌套,这是wml script的强制性规定。
下面几行语句就是定义函数的简单例子:
function currencyconverter(currency,exchangerate)
{
return currency*exchangerate;
};
其中,该函数的名称为currencyconverter,参数有currency和exchangerate两个,函数代码块包含一条语句,使用于返回currency和exchangerate的乘积。
下面是一个使用extern定义外部函数的例子。其中函数名为textit,它没有参数,函数体中定义了两个赋值变量,一个赋整数,一个赋函数值:
extern function testit(){
var usd=10;
var fim =currencyconverter(usd,5.3)
};
5.2.2 函数的调使用
编写好的函数必须经过合法的调使用,才可以发挥它应使用的作使用。函数调使用将返回一个值,比如一个计算结果。wml script中的函数主要可以分为内部函数、外部函数和库函数,下面我们就介绍这3类函数的调使用方法。
内部函数
所谓内部函数是指函数的定义与其调使用函数在同一个脚本文件内的函数,对内部函数的调使用称为内部调使用。内部函数的调使用非常简单,只需提供函数名和所需参数值即可,参数值必须和函数定义时指定的参数个数即类型一致。并且函数调使用需要使用操作符来接收或处理被调使用的返回值。
内部函数可以在其定义之前调使用,也可以在其定义之后调使用。比如,下面就是一个在函数定义之后调使用的例子。
function test1(val){
return val*val;
};
function test2(param){
return test1(param 1);
};
这个例子中定义了两个函数test1和test2。test1函数使用于计算给定参数值的平方并将结果返回;test2函数将给定的参数值加1,然后这个和为参数值,来调使用test1函数,得到结果后在将给结果返回到调使用test2函数的语句。
注意,本例中test2函数调使用了test1函数,这种在函数中调使用其他函数的方法称为函数调使用嵌套。wml script的内部函数、外部函数和库函数都支持嵌套调使用,后面我们专门介绍这方面的内容。
外部函数
外部函数使一个在wml scrupt外部文件中定义的函数。调使用外部函数的方法与调使用内部函数的方法基本类似,不同之处在于调使用处外部函数时一是要指定外部文件的地址即名称,二是要在调使用的外部函数名的前面加上外部文件的名称。
wml script规则使用use url来指定外部文件,语法格式为:
use url还有外部函数的外部文件名外部文件所在的url;
这样,wml script的预编译头就可以将外部文件映射为一个可以在内部使用的标识。然后,使用这个标识并加上井号键(#)和标准的函数调使用即可实现外部函数调使用,语法格式为:
外部文件名#外部函数(参数列表);
比如,http://www.host.com/script下有我们需要的外部文件,名为otherscript,所以我们可使用use url来指定该文件:
use url otherscript"http://www.host.com/script"
这一外部文件中含有我们需要调使用的外部函数testme,则可采取“外部文件名#外部函数(参数列表)”的形式来调使用它:
otherscript#testme(param 1);
这个例子完整的写出来,就是下
[1] [2] [3] [4] 下一页
use url otherscript"http://www.host.com/script"
function test(param){
return otherscript#testme(param 1);
};
库函数
特殊指定,wml script的库函数一律是指它的标准库函数。因为与标准库函数对应,wml script还有几种非标准的库函数。我们这里先介绍标准库函数,非标准库函数后面再介绍。
所有库函数都有所数的库,函数的库中通常含有一类函数。因此,调使用某个库函数时,一要指定它的库名,二要指定它的函数名。wml script规定,调使用标准库函数时可以通过在函数库的名字后面加上句点号(.)和库函数的标准调使用来实现,语法格式为:
函数库名.函数名(参数列表);
比如,wml script的浮点库即float库中有一个开根方的函数sqrt,该函数只有一个参数,那么调使用squrt库函数的方法为:
float.sqrt(number);//这里要求number大于或等于0
下面给出了调使用库函数的简单例子。首先一param参数值调使用lang.abs()函数,返回结果加1后再作为参数调使用float.sqrt()函数,它的返回结果作为内部函数test的返回值:
function test(param){
return float.sqrt(lang.abs(param) 1);
};
2.3 函数的嵌套调使用
wml script的函数定义都是互相平行、独立的,定义函数的时候我们无法在一个函数内定义另外一个函数,也就是说,函数定义是无法嵌套的。但是,函数调使用确是可以嵌套的,也就是说,我们可以在调使用一个函数的过程中调使用另外一个函数。
它的执行过程是:
(1)执行a函数开头部分;
(2)遇到调使用b函数的操作语句,流程则专区执行b函数;
(3)执行b函数开头部分;
(4)遇到调使用c函数的操作语句,流程则专区执行c函数;
(5)执行b函数,如果没有其他嵌套的函数,则完成c函数的完整操作;
(6)返回调使用c函数的语句,即返回到b函数;
(7)继承执行b函数中尚未执行的操作,直到b函数结束;
(8)返回a函数中调使用b函数的语句;
(9)继承执行a函数的剩余操作,直到函数结束。
function myfunc(param1){
return param1*param1=float.squt(lang.abs(param) 1);
};
function myfunb(param0){
return myfunc(param0 1)*|param0 12;
};
function myfuna(param){
return myfunb(param*param 1);
};
5.3 预编译
wml script的预编译主要使用于在编译阶段控制编译器的行为。与编译头一般在文件开头和函数声明之前指定,wml script规定所有的预编译头都是一关键词use加上指定的预编译属性进行指定。
在大多数的编程中,我们比较长使用的预编译行为主要涉及外部文件声明、访问权和meta信息设置。
5.3.1 外部文件
我们知道,使用url地址可以定位一个wml script文件。利使用该url地址;在wml script编程中我们可以通过预编译来调使用wml script的外部文件,外部文件预编译头的声明方法是use url,其语法格式如下:
use url外部文件名"url"地址
这样,我们在当前文件的编程中就可以使用该预编译头声明的外部文件,从而可以调使用该外部文件的函数。其语法格式为:
外部文件名#函数名(参数列表);
比如,我们希望在当前的wml script程序中调使用otherscript外部文件中的check()函数,并且我们知道otherscript文件的url地址为http://www.host.com/app/script。因此,我们可以使用use url来声明这一外部文件:
use url otherscript"http://www.host.com/script"
随后,我们就可以在程序中调使用otherscript中的check()函数了:
function test(par1,par2)
{
return otherscript#check(par1,parr2);
};
其中调使用执行的过程如下:
(1)找到wml script外部文件的url地址;
(2)当前函数从指定的url地址值装载外部文件;
(3)检测外部文件的内容,并执行其中的check()函数。
ure url 预编译头指定的外部文件名在当前程序中必须唯一,使用户无法指定不同url地址的同名外部文件,否则在调使用外部文件时就会发生混乱。
另外,use url预编译头中的url地址也可以是相对url地址。相对url的起始位置是当前程序文件所在的位置,并在此基础上根据url进行定位。
如果url地址中的字符包含有转义字符,则wml script将根据转义要求进行转义。不过,程序在编译的时候编译器并不会对他们进行转义,而是在程序执行时完成,检查url格式和url地址的有效性。
5.3.2 访问权限
我们可以使用访问权限预编译设保护文件的内容,实现访问控制。wml script编程中,必须在调使用外部函数之前使用访问权限预编译头声明外部文件的访问权限。不过,wml script访问权限检查的缺省值是不进行检查,即disabled.但访问权限一经声明,以后当调使用外部函数的时候,编译器就会检查外部文件的访问权限,以决定调使用这是否有权使用该文件及其内含函数。
访问权限预编译头的声明方法是use access,其语法格式如下:
use access domain操作域名path操作路径:
访问权限预编译头通过指定domain和path属性来决定编译器将要进行什么样的检查工作。如果文件有domain或者path属性,那么文件所在的url就必须和属性中的值一致。比较时,域和路径都依据url大写规则进行比较。详细的比较预则如下:
(1)操作域与url中的域后缀相匹配。与后缀匹配是值所有的子域从后向前都必须一致。比如:www.wapforum.org和wapforum.org相匹配,而与forum.org并不匹配。
上一篇: 第六章 WML Script标准函数库(上) 下一篇: 第五章 WMLScript脚本程序设计(上)
评论总数:
条[ 查看全部 ] 网友评论
推荐文章
论坛推荐帖子

RSS订阅