作為一種編輯語言,WMLScript提供了強(qiáng)大的函數(shù)、語句和庫功能,以及外部編輯、訪問控制等支持,同時對程序運行中可能產(chǎn)生的錯誤給出了檢測手段和具體的解決辦法。這些內(nèi)容屬于WMLScript的腳本程序設(shè)計知識和進(jìn)一步的編程規(guī)定,我們本章就對此進(jìn)行詳細(xì)介紹。
5.1 語句前面我們學(xué)習(xí)了變量、操作符和表達(dá)式,但僅由這些內(nèi)容并不能完成某個完整的功能,因為他們不能形成完整的操作或處理程序。變量就如同與嚴(yán)重的單詞,表達(dá)式如語言中的詞組,他們都不能表達(dá)一個完整的意思;只有語句,是語言中完整的句子,能夠表達(dá)完整的意思并實現(xiàn)某個完整的功能。WML Script提供了豐富的語句功能,使用這些語句我們可以在WML的卡片中建立交互功能和其他需要的復(fù)雜功能。
在WML Script中,每條語句的后面都需要以一個分號(;)結(jié)尾。為了養(yǎng)成嚴(yán)謹(jǐn)?shù)木幊田L(fēng)格,建議大家編寫腳本時,語句后一定要加上分號(;),這也有助于我們形成一種良好的編程習(xí)慣。
WML Script語句的書寫和排列格式比較自由。我們可以在同一程序行中連續(xù)寫上多個語句,也可以把同一語句分成多行排列。WML Script將根據(jù)分號(;)來確定語句的具體內(nèi)容。
WML Script的語句主要包括兩類。第一類是基本語句,如空語句、表達(dá)式語句、塊語句、變量語句和return語句等;第二類是條件語句,如if語句;第三類是循環(huán)語句,如while語句、for語句、break語句和continue語句等。下面我們分別講解這些語句的語法、功能和使用方法。
5.1.1 基本語句
WML Script基本語句主要用于程序格式控制和變量聲明,其中有些語句我們已經(jīng)不太陌生了。
空語句
空語句用于定義一個空的程序行,它沒有任何標(biāo)識符和操作符,也不執(zhí)行任何操作。它只是以分號(;)結(jié)束。其語法格式為:
;
顯然,空語句是一種十分特殊的語句。由是我們?yōu)榱俗尦绦蚓哂懈玫目勺x性,通常在程序中的適當(dāng)?shù)胤郊由蠋讉€空語句,以起到分隔或突出的作用。例如,下面的幾行程序中就含有一個空語句:
str="Hello";
val=25;
;
MyVal=val*val+5;
alert("Hi,Hi!!!");
再如,while語句用于判斷一個條件并在條件滿足的時候執(zhí)行相應(yīng)的任務(wù),但如果希望條件滿足的時候什么也不作,那么就可以給它配上一個空語句,使之條件滿足的執(zhí)行空操作:
while(!poll(device));
這實際上是while語句和空語句組成的兩條語句。其中的分號(;)在這里就代表了空語句。這兩條語句的作用是在poll()函數(shù)為真()之前一直等待。
表達(dá)式語句
表達(dá)式語句用于向變量賦值,或進(jìn)行數(shù)學(xué)計算,或進(jìn)行函數(shù)調(diào)用。表達(dá)式語句也是我們最常用的一種語句,語法格式為:
表達(dá)式;
下面幾行程序都是合法的表達(dá)式語句:
str="Hey"+yourName; val3=prevVal+4 counter++; myValue1=counter,myValue2=val3 alert("Watch out!"); retVal=16*Lang.max(val3,counter); |
塊語句
塊語句使用兩個花括號({ })包含一個語句集,形成一個語句體。WML Script的許多語句都需要使用塊語句來實現(xiàn)語句體,快語句的語法格式為:
{
語句列表;
}
下面的簡單程序就是使用塊語句的例子:
}
vari=0;
var x=Lang.abs(b);
popUp("Remember!");
}
變量語句
變量語句用于生命變量并可進(jìn)行變量的初始化賦值。如果用戶不賦值,那么WML Script會自動將變量語句生命的變量賦予一個空字符串("")。基本的語法格式為:
var 變量名;
如果像一次生命多個變量,則相鄰變量名之間使用逗號(,)間隔,其語法格式為:
VAR 變量名1,變量名2......,變量名n;
如果想在生命變量時同時初始化變量,則可按如下語法格式書寫:
var 變量名=初始化
為便于大家更好的掌握變量語句,我們給出一個多出使用該語句的程序:
function count(stu){
var result=0; //聲明變量的同時初始化變量
while(str!=""){
var ind=0; //每次循環(huán)都初始化一次
// 為退出循環(huán),本塊語句內(nèi)應(yīng)當(dāng)提供修改變量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變量的值
}; |
注釋語句
嚴(yán)格來講,注釋語句在WML Script中還不算是真正的語句,它只是一種前指向的規(guī)定。不過它也有嚴(yán)格的語法和標(biāo)注方法,所以我們這里還是像其他編程語言處理的一樣,把WML Script注釋方法以語句的形式介紹一下。
注釋在程序執(zhí)行的時候沒有任何作用,但是可以用于對程序進(jìn)行解釋,則增強(qiáng)程序的可讀性。為了形成良好的編程風(fēng)格,我們應(yīng)該養(yǎng)成書寫注釋的良好習(xí)慣,注釋有兩種表達(dá)方式:
(1)通過雙斜線注釋一行,這樣在雙斜先后的字符將成為注釋而不被執(zhí)行。該注釋行可以單獨一行書寫,也可以放在其他語句的后面。
例如,可以進(jìn)行如下所示的注釋:
//變量j用于小數(shù)每月的天數(shù)
j=0; //我們這里將j賦值為0
(2)通過符號“/*”和“*/”來規(guī)定注釋語句,這種注釋方式可以進(jìn)行多行注釋,符號“/*”和“*/”之間的內(nèi)容就是注釋語句。例如,可以進(jìn)行如下所示的多行注釋:
/*我們定義了兩個變量:i和j。其中:
i用于描述每年中的月數(shù),
而j用于描述每月的天數(shù)*/
j=0; /*我們這里將j賦值為0*/
return語句
return語句主要用在函數(shù)體中,在函數(shù)結(jié)束前,可以通過return語句,把函數(shù)處理的結(jié)果返回給調(diào)用函數(shù)的語句。它的語法格式如下:
return表達(dá)式;
下面的函數(shù)給出了應(yīng)用return語句的例子:
function square(x){
if(!(Lang.isFloat(x)))return invalid;
return x*x
}; |
5.1.2 條件語句
在條件語句中,當(dāng)滿足某種條件時 ,就會執(zhí)行指定的一些代碼,而在代碼組另外某種條件時,則會執(zhí)行另外一些代碼。WML Script的條件語句就是if...else語句,它的一般表達(dá)相識如下:
這樣,當(dāng)條件滿足時,就執(zhí)行代碼塊1;如果條件不滿足則執(zhí)行代碼塊2。代碼塊和代碼塊2中如果只有一個條語句,那么,花括號({ })就可以省略;而如果有多條語句,則必須實用花括號將代碼塊包括在其中。在if...else語句種,其中的else部分是可選的,也就是說,我們可以使用如下的表達(dá)形式:
if(條件){
代碼塊
}
這樣,當(dāng)條件滿足時,就執(zhí)行代碼塊,如果條件不滿足則什么也不做。
例如,如果我們需要對一個學(xué)生的成績進(jìn)行判定,如果大于等于60分,那么我們就認(rèn)為該學(xué)生成績合格了,反之則認(rèn)為不合格,同時一并將狀態(tài)記錄到變量status種,相應(yīng)的WMLScript語句如下所示:
if(score>=60) status="pass";
else status="fail";
再如,我們可以通過對天氣是否陽光普照(sunShines)的情況進(jìn)行判斷,來給變量myDay賦值,并累計好天氣(goodDays)的天數(shù)。程序如下:
if(sunShines) { myDay="Good";
goodDays++;
}else
myDays="Oh well..."; |
5.1.3 循環(huán)語句
使用循環(huán)語句可以反復(fù)執(zhí)行某個代碼塊,直到循環(huán)結(jié)束條件滿足后才停止執(zhí)行。WML Script中有兩種循環(huán)語句:for語句和while語句,同時還有兩終于循環(huán)密切相關(guān)的操作語言:break語句和continue語句。
for語句
for語句可以創(chuàng)建一個帶條件的循環(huán),它還有3個可選的條件表達(dá)式,用于控制循環(huán)。這3個條件表達(dá)式放在一個括號里,并以分號(;)間隔。for語句的一般語法形式如下:
for(初始表達(dá)式;循環(huán)條件;遞增表達(dá)式){
代碼塊
}
for語句的執(zhí)行主要包括以下幾個步驟:
(1)執(zhí)行初始表達(dá)式。在一般情況下,初始表達(dá)式完成的功能是在循環(huán)中對循環(huán)計數(shù)器賦初值。所以在這種意義上,初始表達(dá)式也可以采用“var 變量聲明列表;”的形式來定義。
(2)判斷循環(huán)條件。如果循環(huán)條件為真(ture),則執(zhí)行循環(huán)體中的語句,即至步驟(3);否則,循環(huán)條件為假(false)或者invalid,就結(jié)束循環(huán);
(3)執(zhí)行循環(huán)代碼。然后,在執(zhí)行遞增表達(dá)式。一般情況下,我們在遞增表達(dá)式中對循環(huán)計數(shù)器進(jìn)行處理,最后在返回步驟2執(zhí)行。
例如,下面的for語句建立了一個循環(huán)。初始表達(dá)式為定義變量index并付初值0,循環(huán)條件為index<100,遞增表達(dá)式為每循環(huán)一次index增加1。當(dāng)index增加到100時候,循環(huán)結(jié)束。程序如下:
for(var index=0;index<100;index++){
count+=index;
myFunc(count);
}; |
while 語句
while語句也可常見一個循環(huán),它的一般語法表達(dá)式如下:
while語句的執(zhí)行過程包括以下幾個步驟:
(1)判斷循環(huán)條件是否為真。如果循環(huán)條件為真,則執(zhí)行循環(huán);如果為假或為invalid,則跳出循環(huán)。
(2)執(zhí)行循環(huán)中的代碼塊,然后返回步驟(1)
下面的程序就是使用while語句的簡單例子:
var counter=0
var total=0
while(counter<3){
counter++;
total+=c;
}; |
其中建立的循環(huán)僅當(dāng)變量counter的值小于3時執(zhí)行,否則就結(jié)束循環(huán)。
顯然,如果循環(huán)條件不能為假或為invalid,那么while循環(huán)就會無休止的反復(fù)執(zhí)行下去。因此,我們在代碼塊中一定要有能夠改變循環(huán)條件的變量,否則,就很有可能會陷入死循環(huán)而不能終止程序,下面就是一個死循環(huán)的例子:
var x=1;
var y=0;
while(x<=1){
y=x+1;
} |
這個程序中,因為變量x的值在循環(huán)中不能發(fā)生變化,所以循環(huán)條件在判斷的時候永遠(yuǎn)為真,所以成為了死循環(huán)。因此,對于while語句我們往往使用如下所示的語法形式:
初始表達(dá)式
while(循環(huán)條件){
代碼塊
遞增表達(dá)式
}
這種情況下,while語句的功能和for語句的功能就一樣了,不過用while語句編寫的程序可讀性更強(qiáng)一些。所以我們也可以采用while語句來完成index增加到100的循環(huán)。
程序如下:
var index=0
while (index<100){
counter+=index;
myFunc(count);
index++;
}; |
break語句
為了更好的解決死循環(huán)問題,WML Script項大多數(shù)編成語言一樣提供了break語句。break語句可以使程序執(zhí)行跳出循環(huán)。不論是for語句還是while語句,只要在循環(huán)中使用了break語句,那么程序執(zhí)行到break語句后就立即跳出當(dāng)前循環(huán),然后繼續(xù)執(zhí)行下去。
break語句的予發(fā)行時如下:
break;
例如,在下面的函數(shù)中我們使用了break語句,它是當(dāng)index=3時跳出循環(huán)。如果不是用該語句,函數(shù)中的while循環(huán)直到index=6時才可以結(jié)束。程序如下:
funcition testBreak(x){
var index=0;
while(index<6){
if(index==3)break;
index++
};
retrun index*x;
; |
continue語句
continue語句的功能和break語句的功能看起來有些類似,但實際上卻不一樣。循環(huán)執(zhí)行時遇到break語句通常是跳出當(dāng)前循環(huán),但循環(huán)執(zhí)行到continue語句并不跳出當(dāng)前循環(huán),而是不執(zhí)行循環(huán)中在continue語句后面的代碼塊,直接結(jié)束循環(huán)的本輪運行,然后馬上開始下一輪循環(huán)的運行。
在while語句的循環(huán)中,遇到continue語句后,程序會直接判斷循環(huán)條件從而開始下一輪循環(huán)。在for語句的循環(huán)中,遇到continue語句后程序會直接執(zhí)行遞增表達(dá)式,然后判斷循環(huán)條件從而開始下一輪循環(huán)。
例如,我們想利用for循環(huán)求1到10之間偶數(shù)的和,其WML Script語句如下:
var sum=0;
for (var j=1;j<=10;j++){
if(j%2!=0)
continue;
sun+j;
}; |
在這個例子中,在j%2!=0的情況下,也就是j為奇數(shù)的情況下,程序執(zhí)行continue語句,這時,并沒有如同break語句一樣跳出循環(huán)的運行,而是不執(zhí)行循環(huán)中后面的語句而直接執(zhí)行遞增表達(dá)式開始下一輪循環(huán)的執(zhí)行,這樣,就可以不將其數(shù)j的之類即如總和中。
再如,我們想利用while循環(huán)求0到4之間出3以外幾個數(shù)的和,則可以使用continue語句進(jìn)行控制。程序如下;
var index=0;
var count=0;
while (index<5){
index++;
if(index==3)
continue;
cont+=index;
}; |
這以程序中,當(dāng)index等于3時,“index==3”為真,所以執(zhí)行continue語句,不再把此時index的值加大count中,而是開始下一輪的循環(huán)。
|----------------------------------------------------------------------------------------|
|----------------------------------------------------------------------------------------|