新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论WAP/WML, XMPP, Mobile Web Service, Windows Mobile, Symbian, PalmOS, Android, 嵌入式数据库, 无线搜索等移动嵌入式软硬件开发技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML 与 移动嵌入式开发 』 → [推荐] WAP开发入门与提高 [连载] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 102728 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: [推荐] WAP开发入门与提高 [连载] 举报  打印  推荐  IE收藏夹 
       本主题类别: 基于XML的移动通信协议    
     enyaxp 帅哥哟,离线,有人找我吗?巨蟹座1984-7-4
      
      
      威望:2
      等级:计算机学士学位(版主)
      文章:350
      积分:2433
      门派:XML.ORG.CN
      注册:2007/12/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给enyaxp发送一个短消息 把enyaxp加入好友 查看enyaxp的个人资料 搜索enyaxp在『 XML 与 移动嵌入式开发 』 的所有贴子 点击这里发送电邮给enyaxp  引用回复这个贴子 回复这个贴子 查看enyaxp的博客楼主
    发贴心情 

    第五部分:WML Script脚本程序设计

    作为一种编辑语言,WMLScript提供了强大的函数、语句和库功能,以及外部编辑、访问控制等支持,同时对程序运行中可能产生的错误给出了检测手段和具体的解决办法。这些内容属于WMLScript的脚本程序设计知识和进一步的编程规定,我们本章就对此进行详细介绍。

    5.1 语句

    前面我们学习了变量、操作符和表达式,但仅由这些内容并不能完成某个完整的功能,因为他们不能形成完整的操作或处理程序。变量就如同与严重的单词,表达式如语言中的词组,他们都不能表达一个完整的意思;只有语句,是语言中完整的句子,能够表达完整的意思并实现某个完整的功能。WML Script提供了丰富的语句功能,使用这些语句我们可以在WML的卡片中建立交互功能和其他需要的复杂功能。

    在WML Script中,每条语句的后面都需要以一个分号(;)结尾。为了养成严谨的编程风格,建议大家编写脚本时,语句后一定要加上分号(;),这也有助于我们形成一种良好的编程习惯。

    WML Script语句的书写和排列格式比较自由。我们可以在同一程序行中连续写上多个语句,也可以把同一语句分成多行排列。WML Script将根据分号(;)来确定语句的具体内容。

    WML Script的语句主要包括两类。第一类是基本语句,如空语句、表达式语句、块语句、变量语句和return语句等;第二类是条件语句,如if语句;第三类是循环语句,如while语句、for语句、break语句和continue语句等。下面我们分别讲解这些语句的语法、功能和使用方法。

    5.1.1 基本语句

    WML Script基本语句主要用于程序格式控制和变量声明,其中有些语句我们已经不太陌生了。

    空语句

    空语句用于定义一个空的程序行,它没有任何标识符和操作符,也不执行任何操作。它只是以分号(;)结束。其语法格式为:

    显然,空语句是一种十分特殊的语句。由是我们为了让程序具有更好的可读性,通常在程序中的适当地方加上几个空语句,以起到分隔或突出的作用。例如,下面的几行程序中就含有一个空语句:

    str="Hello";

    val=25;

    ;

    MyVal=val*val+5;

    alert("Hi,Hi!!!");

    再如,while语句用于判断一个条件并在条件满足的时候执行相应的任务,但如果希望条件满足的时候什么也不作,那么就可以给它配上一个空语句,使之条件满足的执行空操作:

    while(!poll(device));

    这实际上是while语句和空语句组成的两条语句。其中的分号(;)在这里就代表了空语句。这两条语句的作用是在poll()函数为真()之前一直等待。

    表达式语句

    表达式语句用于向变量赋值,或进行数学计算,或进行函数调用。表达式语句也是我们最常用的一种语句,语法格式为:

    表达式;

    下面几行程序都是合法的表达式语句:

    str="Hey"+yourName;
    val3=prevVal+4
    counter++;
    myValue1=counter,myValue2=val3
    alert("Watch out!");
    retVal=16*Lang.max(val3,counter);

    块语句

    块语句使用两个花括号({ })包含一个语句集,形成一个语句体。WML Script的许多语句都需要使用块语句来实现语句体,快语句的语法格式为:

    {

    语句列表;

    }
    下面的简单程序就是使用块语句的例子:


    }
    vari=0;
    var x=Lang.abs(b);
    popUp("Remember!");

    }

    变量语句

    变量语句用于生命变量并可进行变量的初始化赋值。如果用户不赋值,那么WML Script会自动将变量语句生命的变量赋予一个空字符串("")。基本的语法格式为:

    var 变量名;

    如果像一次生命多个变量,则相邻变量名之间使用逗号(,)间隔,其语法格式为:

    VAR 变量名1,变量名2......,变量名n;

    如果想在生命变量时同时初始化变量,则可按如下语法格式书写:

    var 变量名=初始化

    为便于大家更好的掌握变量语句,我们给出一个多出使用该语句的程序:


    function count(stu){

    var result=0; //声明变量的同时初始化变量

    while(str!=""){

    var ind=0; //每次循环都初始化一次

    // 为退出循环,本块语句内应当提供修改变量str值的语句

    };

    return result

    };

    function example(param){

    var a=0;

    if(param>a){

    var b=a+1; //声明b变量的同时使用a变量初始化b变量
    }else{

    var b=a+2; //声明c变量的同时使用a变量初始化c变量
    };

    return a; //返回a变量的值

    };

    注释语句


    严格来讲,注释语句在WML Script中还不算是真正的语句,它只是一种前指向的规定。不过它也有严格的语法和标注方法,所以我们这里还是像其他编程语言处理的一样,把WML Script注释方法以语句的形式介绍一下。

    注释在程序执行的时候没有任何作用,但是可以用于对程序进行解释,则增强程序的可读性。为了形成良好的编程风格,我们应该养成书写注释的良好习惯,注释有两种表达方式:

    (1)通过双斜线注释一行,这样在双斜先后的字符将成为注释而不被执行。该注释行可以单独一行书写,也可以放在其他语句的后面。

    例如,可以进行如下所示的注释:

    //变量j用于小数每月的天数

    j=0; //我们这里将j赋值为0

    (2)通过符号“/*”和“*/”来规定注释语句,这种注释方式可以进行多行注释,符号“/*”和“*/”之间的内容就是注释语句。例如,可以进行如下所示的多行注释:

    /*我们定义了两个变量:i和j。其中:

    i用于描述每年中的月数,

    而j用于描述每月的天数*/

    j=0; /*我们这里将j赋值为0*/

    return语句

    return语句主要用在函数体中,在函数结束前,可以通过return语句,把函数处理的结果返回给调用函数的语句。它的语法格式如下:

    return表达式;

    下面的函数给出了应用return语句的例子:

    function square(x){

    if(!(Lang.isFloat(x)))return invalid;

    return x*x

    };

    5.1.2 条件语句

    在条件语句中,当满足某种条件时 ,就会执行指定的一些代码,而在代码组另外某种条件时,则会执行另外一些代码。WML Script的条件语句就是if...else语句,它的一般表达相识如下:

    if(条件){

    代码块1

    }

    else{

    代码块2

    }

    这样,当条件满足时,就执行代码块1;如果条件不满足则执行代码块2。代码块和代码块2中如果只有一个条语句,那么,花括号({ })就可以省略;而如果有多条语句,则必须实用花括号将代码块包括在其中。在if...else语句种,其中的else部分是可选的,也就是说,我们可以使用如下的表达形式:

    if(条件){

    代码块

    }

    这样,当条件满足时,就执行代码块,如果条件不满足则什么也不做。

    例如,如果我们需要对一个学生的成绩进行判定,如果大于等于60分,那么我们就认为该学生成绩合格了,反之则认为不合格,同时一并将状态记录到变量status种,相应的WMLScript语句如下所示:

    if(score>=60) status="pass";

    else status="fail";

    再如,我们可以通过对天气是否阳光普照(sunShines)的情况进行判断,来给变量myDay赋值,并累计好天气(goodDays)的天数。程序如下:

    if(sunShines) {
    myDay="Good";

    goodDays++;

    }else

    myDays="Oh well...";


    5.1.3 循环语句

    使用循环语句可以反复执行某个代码块,直到循环结束条件满足后才停止执行。WML Script中有两种循环语句:for语句和while语句,同时还有两终于循环密切相关的操作语言:break语句和continue语句。

    for语句

    for语句可以创建一个带条件的循环,它还有3个可选的条件表达式,用于控制循环。这3个条件表达式放在一个括号里,并以分号(;)间隔。for语句的一般语法形式如下:

    for(初始表达式;循环条件;递增表达式){

    代码块

    }


    for语句的执行主要包括以下几个步骤:

    (1)执行初始表达式。在一般情况下,初始表达式完成的功能是在循环中对循环计数器赋初值。所以在这种意义上,初始表达式也可以采用“var 变量声明列表;”的形式来定义。

    (2)判断循环条件。如果循环条件为真(ture),则执行循环体中的语句,即至步骤(3);否则,循环条件为假(false)或者invalid,就结束循环;

    (3)执行循环代码。然后,在执行递增表达式。一般情况下,我们在递增表达式中对循环计数器进行处理,最后在返回步骤2执行。

    例如,下面的for语句建立了一个循环。初始表达式为定义变量index并付初值0,循环条件为index<100,递增表达式为每循环一次index增加1。当index增加到100时候,循环结束。程序如下:

    for(var index=0;index<100;index++){

    count+=index;

    myFunc(count);

    };


    while 语句

    while语句也可常见一个循环,它的一般语法表达式如下:

    while(循环条件){

    代码块

    }


    while语句的执行过程包括以下几个步骤:

    (1)判断循环条件是否为真。如果循环条件为真,则执行循环;如果为假或为invalid,则跳出循环。

    (2)执行循环中的代码块,然后返回步骤(1)

    下面的程序就是使用while语句的简单例子:

    var counter=0

    var total=0

    while(counter<3){

    counter++;

    total+=c;

    };


    其中建立的循环仅当变量counter的值小于3时执行,否则就结束循环。

    显然,如果循环条件不能为假或为invalid,那么while循环就会无休止的反复执行下去。因此,我们在代码块中一定要有能够改变循环条件的变量,否则,就很有可能会陷入死循环而不能终止程序,下面就是一个死循环的例子:

    var x=1;

    var y=0;

    while(x<=1){

    y=x+1;

    }


    这个程序中,因为变量x的值在循环中不能发生变化,所以循环条件在判断的时候永远为真,所以成为了死循环。因此,对于while语句我们往往使用如下所示的语法形式:

    初始表达式

    while(循环条件){

    代码块

    递增表达式

    }


    这种情况下,while语句的功能和for语句的功能就一样了,不过用while语句编写的程序可读性更强一些。所以我们也可以采用while语句来完成index增加到100的循环。

    程序如下:

    var index=0

    while (index<100){

    counter+=index;

    myFunc(count);

    index++;

    };


    break语句

    为了更好的解决死循环问题,WML Script项大多数编成语言一样提供了break语句。break语句可以使程序执行跳出循环。不论是for语句还是while语句,只要在循环中使用了break语句,那么程序执行到break语句后就立即跳出当前循环,然后继续执行下去。

    break语句的予发行时如下:

    break;

    例如,在下面的函数中我们使用了break语句,它是当index=3时跳出循环。如果不是用该语句,函数中的while循环直到index=6时才可以结束。程序如下:

    funcition testBreak(x){

    var index=0;

    while(index<6){

    if(index==3)break;

    index++

    };

    retrun index*x;


    continue语句

    continue语句的功能和break语句的功能看起来有些类似,但实际上却不一样。循环执行时遇到break语句通常是跳出当前循环,但循环执行到continue语句并不跳出当前循环,而是不执行循环中在continue语句后面的代码块,直接结束循环的本轮运行,然后马上开始下一轮循环的运行。

    在while语句的循环中,遇到continue语句后,程序会直接判断循环条件从而开始下一轮循环。在for语句的循环中,遇到continue语句后程序会直接执行递增表达式,然后判断循环条件从而开始下一轮循环。

    例如,我们想利用for循环求1到10之间偶数的和,其WML Script语句如下:

    var sum=0;

    for (var j=1;j<=10;j++){

    if(j%2!=0)

    continue;

    sun+j;

    };


    在这个例子中,在j%2!=0的情况下,也就是j为奇数的情况下,程序执行continue语句,这时,并没有如同break语句一样跳出循环的运行,而是不执行循环中后面的语句而直接执行递增表达式开始下一轮循环的执行,这样,就可以不将其数j的之类即如总和中。

    再如,我们想利用while循环求0到4之间出3以外几个数的和,则可以使用continue语句进行控制。程序如下;

    var index=0;

    var count=0;

    while (index<5){

    index++;

    if(index==3)

    continue;

    cont+=index;

    };


    这以程序中,当index等于3时,“index==3”为真,所以执行continue语句,不再把此时index的值加大count中,而是开始下一轮的循环。

    [此贴子已经被作者于2008-2-27 1:49:35编辑过]

    ----------------------------------------------

    I'M BACK, NEVER GO AWAY.

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/2/23 20:51:00
     
     GoogleAdSense巨蟹座1984-7-4
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML 与 移动嵌入式开发 』 的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/19 17:42:55

    本主题贴数29,分页: [1] [2]

     *树形目录 (最近20个回帖) 顶端 
    主题:  [推荐] WAP开发入门与提高 [连载](15192字) - enyaxp,2008年2月23日
        回复:  楼主 赞一个。请问 能否提供一个WORD 版本 供下载? 如果有的话 能否给我发一份:yuanha..(95字) - 柳絮飞,2008年5月5日
            回复:  不好意思,没有WORD版本,我是在别的论坛上找到转过来并重新排了一下版(现在想起那个工作量还是很..(275字) - enyaxp,2008年5月6日
        回复:  不错,好.(10字) - zhoubinbin,2008年4月11日
        回复:  6.5 URL函数库名称:URL说明:这个函数库包含了处理绝对的URL与相对URL的程序,一..(6635字) - enyaxp,2008年2月27日
            回复:  楼主,你好,很激动能找到这么全的WML的资料,不过你能不能推荐点或是发一些关于WAP开发的案例资料..(118字) - xingzhewujiang,2010年8月17日
        回复:  6.4 string函数库名称:字符串说明:这个函数库包含了字符串程序的集合,一个字符串可以..(10412字) - enyaxp,2008年2月27日
            回复:  6.7 Dialog函数库名称:对话说明:这个函数库包含典型的用户界面程序。prompt..(984字) - enyaxp,2008年2月27日
            回复:  6.6 WML浏览器函数库名称:WML Brower说明:这个函数库所包含的程序是让WML ..(2629字) - enyaxp,2008年2月27日
        回复:  6.3 Float函数库名称:Float说明:这个函数库包含了典型与常用的浮点数算术程序。..(2010字) - enyaxp,2008年2月27日
        回复:  [B]第六部分:WML Script标准函数库[/B]这节会讨论标准的WML Script函数..(5857字) - enyaxp,2008年2月27日
        回复:  5.4 执行时的错误检测与处理WML Script函数的功能提供用户服务,并希望用户界面能在任..(6138字) - enyaxp,2008年2月27日
        回复:  5.3 预编译WML Script的预编译主要用于在编译阶段控制编译器的行为。与编译头一般在文..(4545字) - enyaxp,2008年2月27日
        回复:  5.2 函数的声明与调用在WML Script中,函数是一种能够完成某种功能的代码块,并可以在..(6809字) - enyaxp,2008年2月27日
        回复:  不错丫好好瞅瞅我呵呵(24字) - tinyqueen,2008年2月26日
        回复:  [B]第五部分:WML Script脚本程序设计[/B]作为一种编辑语言,WMLScript提..(9936字) - enyaxp,2008年2月23日
        回复:  4.5 操作符与表达式在WMLScript中,表达式可以把变量、常量与操作符结合起来,经过运..(5964字) - enyaxp,2008年2月23日
        回复:  4.3 WMLScript基本规则WMLScript在许多基本规则方面沿用了WML的做法。不过..(10103字) - enyaxp,2008年2月23日
        回复:  [B]第四部分:WML Script语法基础 -- WML Script介绍[/B]WML ..(2660字) - enyaxp,2008年2月23日
        回复:  [B]第三部分:WML主要语法 -- 文本格式化及其元素[/B]3.7 文本格式化及其元素..(1890字) - enyaxp,2008年2月23日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    105.469ms