第2章PowerScript語言介紹._第1頁
第2章PowerScript語言介紹._第2頁
第2章PowerScript語言介紹._第3頁
第2章PowerScript語言介紹._第4頁
第2章PowerScript語言介紹._第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第2章PowerScript語言介紹第2章 PowerScript語言介紹PowerScript語言是PowerBuilder的專用編程語言,是一種結(jié)構(gòu)化的、面向?qū)ο蟮母呒壘?程語言。該語言不僅功能強(qiáng)大,而且簡單易學(xué),是學(xué)習(xí)和使用PowerBuilder必須掌握的一種語言。本章主要介紹PowerScript語言的基本語句、語法規(guī)則、數(shù)據(jù)類型、變量、表達(dá)式、函數(shù)的使用。熟練地掌握PowerScript語言是靈活高效地開發(fā)高質(zhì)量PowerBuilder應(yīng)用程序的基本要求。2.1 PowerScript編程語言基礎(chǔ)PowerScript是一種自由格式的語言,它很寬容,比如:語句行中的空格、縮進(jìn)等格式

2、編 排信息完全被編譯器忽略,為了閱讀方便,可以隨意安排語句行的位置。但是它也有自己的 一組基本語法規(guī)則,本節(jié)簡單介紹PowerScript語言的斷行、續(xù)行、注釋、標(biāo)識符、代詞、保留字等成分的格式和用法。2.1.1 注釋注釋是添加在程序中的一些說明性的文字,雖然不是必須的,也是不可缺少的,但它能 夠增強(qiáng)程序的可讀性,并且程序運(yùn)行時不執(zhí)行而是簡單的跳過。PowerScript中加注釋的方式與C語言完全相似,有行注釋和塊注釋兩種:行注釋:從雙斜線“ /”開始,而后書寫注釋內(nèi)容,到行尾結(jié)束。例如:Ope n( w_ma in)/ 打開主窗口塊注釋:以符號“ /* ”開始,到符號“ */”結(jié)束,不管其中

3、夾了多少東西,它們都是注 釋,例如:/*函數(shù)返回值為: 0正常 1出錯*/注意:在默認(rèn)情況下,PowerBuilder中的所有注釋內(nèi)容均以藍(lán)色顯示的。2.1.2 標(biāo)識符標(biāo)識符是指在程序中使用的變量、標(biāo)號、函數(shù)、窗口、控件、菜單及對象等的名稱。在PowerBuilder 8.0中,標(biāo)識符的命名遵從下述規(guī)則:必須以英文字母開頭。其余字符可以是字母、數(shù)字及一些特殊符號:下劃線(_)、短橫線(-)、美元符號($)、號碼符號(#)、百分號(%)°最長40個字符,且中間不能插入空格。 保留字不能用做標(biāo)識符,因為它們已有特殊的含義。大小寫不敏感,即不區(qū)分大小寫,女口name與NAME是一樣的。例如

4、,下面是一組正確的標(biāo)識符:rs 返回值r_code/ 代碼Large_Butt on #1/ 第一個大按鈕Child - ID/允許使用短橫線時是個正確標(biāo)識符下面的標(biāo)識符寫法是錯誤的:aBc code標(biāo)識符中間不能有空格abc?def/標(biāo)識符中間有非法字符Ope n誤用保留字2_this/以數(shù)字開頭注意:由于短橫線與減號是同一個字符,因此,表達(dá)式中使用減法運(yùn)算符時,必須在減 號的兩邊加空格,否則可能產(chǎn)生語法甚至語義錯誤。2.1.3語句行的書寫約定通常情況下,PowerScript的一條語句書寫在一行上,每條語句的末尾不需要語句結(jié)束符,書寫完畢后按Enter鍵轉(zhuǎn)到下一行,開始一條新的語句。Pow

5、erScript語言有時候在一行中寫多條語句,在語句之間用分號";”進(jìn)行分隔。例如:a=a+1;g=g+1;c nt=a+g+c nt但最好不要在一行中寫多條語句,每條語句占據(jù)一行既直觀又清晰,而一行中寫了多條 語句會增加閱讀的難度、降低可讀性。如果一條語句太長,那么允許把一條語句書寫在幾行上,這時就需要使用續(xù)行符“& ”。它放在一行的末尾指示下一行是當(dāng)前行的繼續(xù)。例如,可以把下面的語句書寫在兩行上:MessageBox("SQL 語句出錯","出錯編號="+String(SQLCA.SQLCode) MessageBox("

6、SQL語句出錯","出錯編號="+&Stri ng(SQLCA.SQLCode)注意:使用續(xù)行符時要注意它的位置,不能在標(biāo)識符或保留字的中間插入續(xù)行符。例如,對上面的例子,下面的續(xù)行是錯誤的,原因在于將標(biāo)識符分成了兩行:MessageBox("SQL 語句出錯","出錯編號="+String(SQL& CA.SQLCode)2.1.4 標(biāo)號雖然在結(jié)構(gòu)化程序設(shè)計中不提倡使用GOTO語句,但是在 PowerScript中仍然支持這種形式,用標(biāo)號來指明轉(zhuǎn)移地址, 標(biāo)號的寫法就是在標(biāo)識符的后面加冒號“:”標(biāo)號可以在一

7、條語句的前面;也可以單獨(dú)占一行。例如:求50以內(nèi)的偶數(shù)和的程序。in teger i,li_sumi=1li_sum=0begi n:i=i+1if i>50 the ngoto finishend ifif mod(i,2)=0 thenli_sum=li_sum+iend ifgoto begi nfini sh:MessageBox("50 以內(nèi)的偶數(shù)和為:",string(li_sum)2.1.5 特殊ASCII碼字符)作為引用特在字符串中可以包括特殊的ASCII碼字符,特別是控制字符,波浪號(殊ASCII字符或控制字符的前綴。常用的特殊字符如表2-1所示。特

8、殊字符表示方法新行(Newline)n制表符(Tab)t垂直制表(Vertical Tab)V回車(Carrige return)r換行(Formfeed)f退格(Backspace)b雙引號(”)"單引號(?)?波浪號()十進(jìn)制形式的ASCII碼000 到 255十六進(jìn)制形式的ASCII碼h00到hFF八進(jìn)制形式的ASCII碼000 到 255表2-1特殊ASCII字符列表例如下面語句:messagebox(信息','你好!PowerBuilder8!')執(zhí)行后顯示結(jié)果如圖2-1所示。而加上特殊符號回車換行符(rn)之后: messagebox(,信息?,?

9、爾好!rnPowerBuilde?) 顯示結(jié)果如圖2-2所示,可以看到信息分成兩行顯示。圖2-1顯示結(jié)果圖2-2 顯示結(jié)果(加回車換行符)2.1.6 空值(Null )空值是PowerBuilder與數(shù)據(jù)庫交換數(shù)據(jù)時使用的一種特殊值,代表數(shù)據(jù)未定義、不確定,它與空字符串、數(shù)值零以及日期00-00-00的意義完全不同。PowerBuilder的所有數(shù)據(jù)類型都 支持空值,但PowerBuilder并不將空值作為變量的默認(rèn)初值。例如,當(dāng)變量被說明未初始化 時,PowerBuilder把0賦給數(shù)值型變量,把 False賦給布爾型變量,把空串("")賦給字符串 變量。變量被賦予空值的

10、途徑有兩條:(1 )從數(shù)據(jù)庫中讀到空值;(2) 使用SetNull()函數(shù)賦值。例如:String name此時 name=""SetNull(name)/ name 值為 NULL測試變量或表達(dá)式是否為空值時,使用函數(shù)lsNull(),而不是直接使用關(guān)系表達(dá)式,例如,a是個變量,要測試它是否為空值,可以這樣寫:IF IsNull(a) THEN ”下面的寫法是錯誤的:IF a=NULL THEN ”原因在于空值不等于任何值,也不等于另一個空值。注意:任意參數(shù)值為空值的函數(shù)返回值為空值,任何變量值為空值的表達(dá)式的結(jié)果為空 值。2.1.7 保留字保留字是指PowerBuild

11、er內(nèi)部使用的一些命令或符號,它們不能作為標(biāo)識符來使用,否 則在編譯時會出現(xiàn)警告信息。它們有:aliaseventnotstaticand*executeofstepauto in sta ntiateexitonsubrouti necallexter nalope n*supercasefalseorsystemcatchfetchpare ntsystemreadchoosefin allypost*systemwriteclose*firstpreparethe ncommitforpriorthisconnectforwardprivatethrowcon sta ntfrompri

12、vatereadthrowscon ti nuefunctionprivatewritetocreate*globalproceduretriggercursorgotoprotectedtruedeclarehaltprotectedreadtrydeleteifprotectedwritetypedescribe*immediateprototypesun tildescriptorin directpublicupdate*destroyin sertreado nlyupdateblobdisc onnectin torefusi ngdoin tri nsicreturnvariab

13、lesdyn amicisrollbackwhileelselastrpcfu ncwithelseiflibraryselectwithinendloopselectblob_debugenu meratedn extshared注意:在上面列舉的保留字中,左上角帶有*的保留字也是函數(shù)名;在 PowerBuilder 8.0中,所有保留字的顏色都會變成綠色,這是在編寫程序的時候區(qū)分保留字的最好方法。2.1.8 代詞PowerBuilder提供了幾個代詞用來引用對象或控件而不用指定它們的名稱。程序中使用代詞的好處是避免硬代碼,編出來的程序會具有較好的可移植性。PowerBuilder提供了 4

14、個代詞,分別為:This、Pare nt、Pare ntWin dow和Super,其中前3個代詞應(yīng)用廣泛,下面簡單 介紹一下這些代詞的意義和用法。ThisThis :代表窗口、用戶對象、菜單、應(yīng)用對象或控件本身,即代表正在為之編寫事件處理程序的對象。例如,窗口中有一個名稱為cb_ok的按鈕,在該按鈕的Clicked事件處理程序中可以寫上代碼:This.text=你好"這里的This就代表cb_ok按鈕(因為是在該按鈕的 Clicked事件編寫處理程序),它與下 面的代碼是等價的:Cb_ok.text=你好好Pare ntPare nt:指當(dāng)前控件所在的窗口。例如,窗口w_ma in

15、中有個按鈕cb_close,其功能是單擊后關(guān)閉窗口 w_main,可以在按鈕Clicked事件處理程序中寫上代碼:Close(pare nt)它與下面的代碼是等價的:close(w_ma in)但是用Pare nt則使代碼具備更強(qiáng)的通用性和可移植性,并且也更容易理解。pare ntwi ndowParentWindow :代表運(yùn)行時菜單所在的窗口,該代詞只能在菜單的事件處理程序中使用。例如,一菜單中有一 關(guān)閉窗口 ”的子菜單項,并且菜單關(guān)聯(lián)到w_main窗口。在“關(guān)閉窗口”菜單項的Clicked事件編寫腳本:Close(Pare ntWin dow)單擊該菜單項時就會關(guān)閉與之關(guān)聯(lián)的窗口,而不管

16、窗口的具體名稱。它與下面的代碼是 等價的:Close(w_mai n)SuperSuper :在編寫控件或?qū)ο蟮淖訉ο髸r,子對象中可以調(diào)用父對象的事件處理程序,程序中既可直接利用父對象的名稱調(diào)用它們,也可以使用Super代詞來調(diào)用。例如,想調(diào)用父對象的Click事件處理程序時,子對象中可以這樣寫:CALL Super:Clicked當(dāng)調(diào)用在子類中被重載的父對象的函數(shù)時,也可以使用Super來指代父對象,例如,子對象重載了父對象的函數(shù) f_func(),在子對象中調(diào)用父對象的 f_func()函數(shù)的語句可以這樣編 寫:Super:f_fu nc()2.1.9對象的屬性、函數(shù)和事件的引用方法Pow

17、erBuilder是一種面向?qū)ο蟮拈_發(fā)工具,它的應(yīng)用程序的開發(fā)過程實(shí)際上就是各種對 象的定義和使用過程。所有對象都通過名稱相互區(qū)分。在PowerScript中,訪問對象的屬性、函數(shù)、事件的方法很簡單,就是使用圓點(diǎn)作為標(biāo)記符,具體來說,訪問對象屬性的格式為:對象名對象屬性程序中訪問對象的函數(shù)與事件的格式為:object name. type calltype whe n functionn ame( argume ntlist )其中,方括號所括成分根據(jù)情況可以省略,各成分的意義為:(1)object name 是對象名。(2)type取值為FUNCTION 或EVENT,用于指明是訪問函數(shù)還是

18、事件,默認(rèn)值為FUNCTION。(3)calltype用于指明PowerBuilder查找函數(shù)的時機(jī),有效取值為:STATIC (默認(rèn)值):編譯時查找函數(shù),若不存在,產(chǎn)生編譯錯誤;DYNAMIC :程序運(yùn)行時查找函數(shù),若不存在,產(chǎn)生運(yùn)行錯誤。(4)when用于指明函數(shù)或事件是立即執(zhí)行還是當(dāng)前程序段執(zhí)行完畢后執(zhí)行,取值為:TRIGGER (默認(rèn)值):立即執(zhí)行;POST:當(dāng)前程序段執(zhí)行完畢后執(zhí)行。(5)functionname指明調(diào)用的函數(shù)或事件名稱。(6) argumentlist給出函數(shù)或事件的參數(shù)。例如,想把輸入焦點(diǎn)移動到單行編輯框sle_1 上,程序中寫上語句:sle_1.SetFocus

19、()想立即執(zhí)行按鈕cb_1的單擊事件處理程序,那么寫上語句:cb_1 .EVENT TRIGGER Click ()【實(shí)例2-1】窗口對象的屬性、函數(shù)、事件的使用要求:創(chuàng)建窗口對象 w_test,窗口的標(biāo)題為"窗口測試”,背景色為紅色。運(yùn)行窗口后, 單擊該窗口,背景色變?yōu)榫G色;雙擊該窗口,窗口的高度不變,寬度是原來的2倍,并且背景色變?yōu)樗{(lán)色。技術(shù)要點(diǎn):窗口對象的屬性、函數(shù)、事件的使用。操作步驟:(1 )在e:student下建立工作區(qū)test.pbw (具體操作方法參考第1章【實(shí)例1-1】)。(2)創(chuàng)建應(yīng)用對象test。(3 )創(chuàng)建窗口 w_test。選擇F ile菜單中的N ew命

20、令,選中Pb Object選項卡中的 Window圖標(biāo),單擊OK按鈕,出現(xiàn)新建窗口。在屬性子窗口的Ge neral選項卡中,將窗口的Title屬性設(shè)為“窗口測試”,即在Title下的編輯框中輸入“窗口測試”,保存窗口命名為w_test。(4 )給窗口的Open事件添加如下腳本:this.backcolor=rgb(255,0,0)/ 背景色設(shè)置為紅色(5)給窗口的Clicked事件添加如下腳本:this.backcolor=rgb(0,255,0)/ 背景色設(shè)置為綠色(6)給窗口的doubleclicked事件添加如下腳本:this.resize(2*this.width,this.heigh

21、t)/改變窗口 的寬度原來的2 倍this.backcolor=rgb(0,0 ,255)/ 背景色設(shè)置為藍(lán)色(7)運(yùn)行程序。單擊PowerBuilder 8.0工具欄中的 公Run login按鈕或按<Ctrl>+<R>快捷鍵,運(yùn)行程序, 單擊窗口,背景色變?yōu)榘咨?;雙擊窗口,改變窗口大小。說明:(1) 窗口的標(biāo)題、背景色都是窗口對象w_test的屬性。設(shè)置屬性值有兩種方法:一種是在屬性窗口中設(shè)置,一種是在運(yùn)行程序時在腳本中設(shè)置。窗口的Open事件的腳本可以直接在屬性窗口中設(shè)置。(2)resize()是窗口對象的函數(shù),語法:對象名 .resize(width, heig

22、ht),將對象的大小修改 為指定的 width(寬度)和 height(高度)。腳本 this.resize(2*this.width,this.height)中的 this 代表窗 口對象 w_test。(3)clicked (單擊)、doubleclicked (雙擊)是窗口對象提供的兩個常用事件,如果用戶想接收某個特殊消息, 以滿足特殊的需要,還可以自己定義事件, 這種自定義的事件叫做 “用 戶事件”。2.2數(shù)據(jù)類型PowerScript語言與其他編程語言相似,也提供數(shù)據(jù)類型來指明變量所存儲的數(shù)據(jù)的類 型,且數(shù)據(jù)類型十分豐富,包括標(biāo)準(zhǔn)數(shù)據(jù)類型、Any類型、系統(tǒng)對象數(shù)據(jù)類型和枚舉類型四大類

23、,程序中通過數(shù)據(jù)類型限定變量的取值范圍。2.2.1標(biāo)準(zhǔn)數(shù)據(jù)類型PowerBuilder的標(biāo)準(zhǔn)數(shù)據(jù)類型共有14種,如表2-2所示。表2-2標(biāo)準(zhǔn)數(shù)據(jù)類型列表與示例數(shù)據(jù)類型意義示例Blob二進(jìn)制大對象,用于存儲大量數(shù)據(jù),例如圖像、大文本等如保存位圖Boolean布爾型,布爾型變量只有 2個可能的值:TRUE或FALSEFALSECharacter 或 Char單個ASCII字符ADate日期,包括年(1000-3000)、月(01-12)、日(01-31 )1999-08-21DateTime日期及時間,僅用于訪問數(shù)據(jù)庫的DateTime型數(shù)據(jù)1992-05-413:32Decimal 或 Dec帶

24、符號十進(jìn)制數(shù),最大18位精度8754625.8635Double帶符號浮點(diǎn)數(shù),15位有效數(shù)字,范圍從2.2E-3081.7E+3086.324E+5Integer或Int16位帶符號整數(shù),范圍從 -32768+327677688Long32 位帶符號整數(shù),范圍從 -2,147,483,648 +2,147,483,6474688243Real帶符號浮點(diǎn)數(shù),精度 6位,范圍從1.17E-383.4E+383.5E+5String字符串類型,用于存儲任意的 ASCII字符,長度為060,000 (16位環(huán)境中),32位環(huán)境中長度只受系統(tǒng)能力的限制。程序中直接寫字符串時,用單引號()或雙引號(”)將

25、字符 串括起來"計算機(jī)”"abc"Time24小時制時間,包括小時(0023)、分(0059)、秒(0059) 以及秒的小數(shù)位(最多六位),范圍從00:00:00 23:59:59:99999913:32:18:123456UnsignedInteger 或 UnsignedInt 或 Uint16位無符號整數(shù),范圍從 0655355234UnsignedLong或Ulong32位無符號整數(shù),范圍從04,294,976,29554234850222 Any數(shù)據(jù)類型除了上面講到的標(biāo)準(zhǔn)數(shù)據(jù)類型外,PowerBuilder還提供了一種任意數(shù)據(jù)類型,即Any數(shù)據(jù)類型。它是

26、一種可變的數(shù)據(jù)類型,Any數(shù)據(jù)的類型由初值類型決定,程序中給它賦什么類型的值它將變成什么類型,它可以接受標(biāo)準(zhǔn)數(shù)據(jù)類型、對象、結(jié)構(gòu)以及數(shù)組等各種類型的值。 所以,一般情況下,當(dāng)不能確定變量聲明為何種類型時,可以聲明為Any類型。要想知道Any類型變量中保存的是哪種數(shù)據(jù)類型,可以使用函數(shù)ClassName(),例如:any la_stude ntdatain teger li_in teger=123la_stude ntdata=li_i ntegermessagebox("any 變量類型",classname(la_studentdata)雖然Any類型的數(shù)據(jù)使用靈活,但

27、也存在一些潛在的不安全因素。它是在運(yùn)行時而不是 在編譯時時確定變量的實(shí)際類型,所以編譯器不會在編譯時對Any類型進(jìn)行正確性檢查,運(yùn)行時可能會出現(xiàn)錯誤。使用Any類型要注意,使用Any變量前必須首先賦值;Any類型變量參加運(yùn)算時,必須保證其值的數(shù)據(jù)類型正確且符合操作符的要求。2.2.3系統(tǒng)對象數(shù)據(jù)類型在PowerBuilder中所有的系統(tǒng)元素如窗口、菜單、各種控件都是系統(tǒng)對象,每一種系統(tǒng) 對象實(shí)際上都是定義在PowerBuilder 8.0內(nèi)部的一種數(shù)據(jù)類型。通常情況下,不必把這些對象當(dāng)作數(shù)據(jù)類型來考慮,只是在需要時通過畫板直接創(chuàng)建,然后就可以使用它們。比如,當(dāng) 創(chuàng)建一個 w_main的窗口時,

28、實(shí)際上就是聲明一個Window 類型的變量,當(dāng)程序執(zhí)行Open(w_main)時,此變量就被初始化了。但有時需要動態(tài)處理窗口、菜單、控件等系統(tǒng)對象時,這就需要定義系統(tǒng)對象數(shù)據(jù)類型 的變量。例如:wi ndow mywin/說明窗口變量menu myme nu /說明菜單對象變量要知道PowerBuilder 8.0中有多少個系統(tǒng)對象,可以單擊工具欄上的左按鈕,打開"對象瀏覽器”,選擇“ System”選項頁,此時窗口左邊列出了所有的系統(tǒng)對象,如圖2-3所示。|; Br owserIBMApplicationDataWirdoiA1 |Window | Menu Uta Objod D

29、ata Type|OLEFunctionProxySystemEnumeratedStructurermailsession rridiclient menu£PropertiesEvents ffiol Functionsnnenucascaderndbineeditn onvisualobiect lecontrol27第2章PowerScript語言介紹#第2章PowerScript語言介紹Icon Legend - describes selected Rfcipmrty” Function,圖2-3對象瀏覽器的“ System”選項頁224 枚舉類型枚舉類型是PowerBu

30、ilder定義的用符號代替的數(shù)值的特殊常量,不過與其他編程語言(比如PASCAL或C)不同,在PowerBuilder 8.0中所有枚舉類型的值都是系統(tǒng)預(yù)先定義的,開 發(fā)人員不能定義自己的枚舉類型,而只能按系統(tǒng)要求使用它。枚舉類型實(shí)際是一組值,每個 值都以英文單詞開始,以感嘆號“!”結(jié)束。枚舉類型一般用于以下兩種情況:作為函數(shù)的參數(shù)。作為對象和控件的屬性。用得較多的是第二種情形,例如,定義文本框?qū)R方式的枚舉類型為Alignment,其取值只能為:Left!、Justify !、Center!、Right !,并且直接使用,不需加引號。例如:mle_1.Alignment=center! /

31、多行編輯框控件名為 mle_1工具欄的圖標(biāo)要查看PowerBuilder中的枚舉類型數(shù)據(jù),可以選擇Tools菜單中的Browser命令(單擊,并在彈出的 Browser對話框選擇 Enumerated標(biāo)簽頁。在左邊列表框中選擇要查看的枚舉值類別,然后雙擊右邊樹型列表中的Properties,該類別的枚舉值即被顯示出來,如圖2-4所示。;Browser I可刃T arget:prinUE:王鹿DataWindow | Window | Menu | User Object |Data TvpeOLEUsesFunction Prox> SystemEnumeraledStructureal

32、ignmentargcallingconv_ arrangetypes band- JIcon Legend - describes selected Property, Function圖2-4系統(tǒng)的枚舉類型2.3變量和常量PowerScript的基本功能之一是對數(shù)據(jù)進(jìn)行處理,數(shù)據(jù)處理的基本對象是變量和常量。無 論是常量還是變量都是程序中不可缺少的元素,它們在使用前都應(yīng)先聲明,但聲明的格式不 同,作用域也不同。2.3.1 變量變量是指在程序運(yùn)行過程中其值可以改變的量,變量在程序運(yùn)行中可被賦值,在執(zhí)行各 種運(yùn)算和控制時其值可以改變,可用來存放常數(shù)、中間結(jié)果和最終結(jié)果,還可以作為控制變 量來控制

33、程序的運(yùn)行。變量必須先聲明后使用。變量聲明的一般語法格式為:數(shù)據(jù)類型 變量名=初值,變量名=初值其中方括弧括起的內(nèi)容為可選項。數(shù)據(jù)類型可以是標(biāo)準(zhǔn)數(shù)據(jù)類型、系統(tǒng)對象數(shù)據(jù)類型、Any數(shù)據(jù)類型和枚舉類型中的任一種。變量名為前面講到的合法的標(biāo)識符。例如:in teger li_nu mber=23stri ng ls_n ame="Lucy"在設(shè)計過程中,通常為了便于認(rèn)別和管理,變量名的命名除符合標(biāo)識符命名規(guī)則外,其 標(biāo)識名的前兩個字母具有標(biāo)識意義第一個字符代表變量的作用范圍(這個在下一小節(jié)中將詳 細(xì)介紹),第二個代表數(shù)據(jù)類型。例如:integer ii_number=100/實(shí)例

34、的整型變量。第一個字母I代表(instanee實(shí)例變量),第二個I代表整型。/實(shí)例的日期型變量共享的時間變量。s代表(share共享變量),t代表時間變量。/全局的字符串變量。g代表(global全局變量),s代表字符串變量。datetimeStri ngid_date st timegs_n ameInteger li count,li total/局部的整型變量,一次聲明了兩個變量Application |變量若在聲明時不賦初值,系統(tǒng)將按數(shù)據(jù)類型的默認(rèn)值自動賦初值,數(shù)值類型的默認(rèn)初 值為0,字符類型的默認(rèn)初值是空字符串,Boolean型的初值為False, Date型初值為1900-01-

35、01。一行聲明多個相同類型的變量,變量之間用逗號“,”分隔。例如:in teger li_n 1=18,li_ n2=20,li_ n3=22注意:變量初始化是在編譯時進(jìn)行,而不是在運(yùn)行時進(jìn)行。2.3.2變量的作用域變量的作用域即變量的使用范圍,也可以認(rèn)為在什么條件、什么范圍內(nèi)該變量有效。在 PowerBuilder中按變量的作用范圍可分為全局變量、實(shí)例變量、共享變量和局部變量四種類 型,每種變量的說明位置也不一樣1. 全局變量(Global Variables )在PowerBuilder的幾種變量中,全局變量的作用域是最大的,是整個應(yīng)用程序,在整個 應(yīng)用程序中都可以被訪問。全局變量可以在應(yīng)

36、用對象、窗口、用戶對象、函數(shù)或菜單對象的 畫板的腳本視圖中聲明,選擇Declare標(biāo)簽頁,并在列表框中選擇 Global Variables項,如圖2-5所示。圖2-5 聲明全局變量由于全局變量增加了應(yīng)用程序各個部分的耦合和聯(lián)系,當(dāng)在任何一個地方修改其值時, 所有的變量的值都將發(fā)生變化,就在可能導(dǎo)致程序運(yùn)行不正常,所以必須限制全局變量的使 用和修改,只把那些在整個應(yīng)用程序中要使用的變量定義為全局變量,沒有必要時盡量不要 使用全局變量。2. 實(shí)例變量(Instanee Variables)實(shí)例變量屬于某個特定對象(應(yīng)用對象、窗口對象、用戶對象或菜單)并與該對象相關(guān) 聯(lián)。只有在該對象或其派生的子對

37、象的事件處理程序或函數(shù)中才能使用對象的實(shí)例變量,實(shí) 例變量在它所關(guān)聯(lián)的對象被打開時創(chuàng)建,被關(guān)閉時消失。聲明實(shí)例變量的方法與聲明全局變量的方法類似,只不過是選擇In sta nee Variables就可以了,如果在定義范圍之外使用它,則要通過點(diǎn)符號“?',例如:我們在窗口 w_1中聲明了一個整型實(shí)例變量ii_sum,當(dāng)我們在 w_1中給它賦值時,可以這樣寫:ii sum=50可是當(dāng)我們要在窗口w_2中要使用ii_sum,將它賦值給 w_2中的一個整型變量integer時,就要這樣寫:in teger仁w_1.ii_sumw_1必須是處于打開狀態(tài)。當(dāng)且僅當(dāng)?shù)谝淮未蜷_與實(shí)例變量相關(guān)的對象時

38、,實(shí)例變量才被創(chuàng)建,在打開對象之前, 實(shí)例變量是不存在的。3. 共享變量(Share Variables)共享變量與實(shí)例變量相似,但并不常用,共享變量屬于一個對象的定義,在對象的所有 實(shí)例中共享。共享變量是一個靜態(tài)變量,將保存其最后的值,即它所在的對象關(guān)閉后再次打 開時,共享變量還保持著關(guān)閉前的值??墒褂霉蚕碜兞康膶ο笥袘?yīng)用對象、窗口對象、菜單 對象及用戶對象。聲明一個共享變量和聲明一個實(shí)例變量的方法是一樣的,首先要進(jìn)入該對象的代碼視圖,選擇 Declare標(biāo)簽頁,如圖 2-5,再選擇 Share Variables項。用一個例子來說明它們的區(qū)別。假設(shè)窗口w_1中有一個共享變量 si_data

39、的聲明。當(dāng)窗口 w_1第一次打開時,將創(chuàng)建共享變量si_data并初始化,si_data=500。運(yùn)行一段代碼之后,共享變量si_data被改成了 300。不久 簡口 w_1關(guān)閉,但是共享變量并不像實(shí)例變量那樣消 失了,而是仍然存在,當(dāng)再次打開窗口w_1時,相同的共享變量si_data仍然存在,無須再次創(chuàng)建和初始化,所以當(dāng)?shù)诙未蜷_窗口w_1時,共享變量的值是300。實(shí)例變量是隨著它的對象被打開、關(guān)閉和再次打開而被創(chuàng)建、刪除和創(chuàng)建的。共享變量 是與對象的定義相關(guān)聯(lián)的,而不是它的任何特定的實(shí)例,所以它總是存在的。4. 局部變量(Local Variables)局部變量的作用范圍是四種變量中最嚴(yán)格

40、的。這種變量只在聲明變量的腳本之內(nèi)有效, 退出此腳本就自動取消。在不同的函數(shù)內(nèi)使用相同的局部變量名是可以的,不會引起混淆, 這樣就增加了編程的方便性。5. 優(yōu)先級順序在一個腳本的執(zhí)行過程中,若出現(xiàn)不適當(dāng)?shù)恼{(diào)用時,PowerBuilder將按照下面的順序搜索該變量的位置:(1 )局部變量(2 )共享變量(3 )全局變量(4 )實(shí)例變量如果按上述的順序找不到,就會向上搜索該對象繼承關(guān)系的父對象,查看其實(shí)例變量。2.3.3 常量常量是在程序運(yùn)行過程中其值保持不變的量。并且聲明為一個常量以后只能引用,不能 更改它的值。聲明常量時需要加關(guān)鍵字CONSTANT,必須賦初值,其語法格式如下:CONSTANT

41、數(shù)據(jù)類型 變量名=值為了區(qū)分常量和變量,通常情況下常量名用大寫字母表示。例如:CONSTANT real LR_PI=3.14注意:不能在一行中聲明多個常量,否則只有第一個是常量,其余是變量。234數(shù)組數(shù)組是一系列有序數(shù)據(jù)的集合,數(shù)組中的每一個元素都具有相同的數(shù)據(jù)類型,并且可以 用一個共同的名字通過不同的下標(biāo)來訪問數(shù)組中的每一個元素。下標(biāo)就是數(shù)組的序號,它能 惟一地標(biāo)識數(shù)組中的每一個元素。PowerScript語言中數(shù)組的聲明格式如下:數(shù)據(jù)類型 數(shù)組名di,dn=初值數(shù)據(jù)類型可以是標(biāo)準(zhǔn)數(shù)據(jù)類型、系統(tǒng)對象數(shù)據(jù)類型、Any數(shù)據(jù)類型和枚舉數(shù)據(jù)類型中的任一種。數(shù)組名是數(shù)組的標(biāo)識符,它的命名符合標(biāo)識符命

42、名規(guī)則。數(shù)組后面的兩的方括號, 外面一對表示數(shù)組下標(biāo)的符號,里面一對表示其中的內(nèi)容是可選的,“d1,dn”代表各維下標(biāo),后面的大括號用來給數(shù)組中元素賦初值,用逗號分隔。數(shù)組中最常用的是一維數(shù)組,如果大小確定,用下列方法定義:integer lib_number6默認(rèn)下界,下標(biāo)從 1到6共6個元素string lsb_name2 to 7/自定義下界,下標(biāo)從 2到7共6個元素數(shù)組中如果省略下標(biāo),表示大小不確定是動態(tài)數(shù)組,動態(tài)數(shù)組的下標(biāo)從1開始,元素的個數(shù)在程序運(yùn)行時決定。例如:stri ng ls_n ame大小不確定的一維數(shù)組多維數(shù)組定義時,用逗號分隔。例如:Long llc_data3,4/

43、二維數(shù)組 3X 4Real lrc_data3,3,3/三維數(shù)組 3X 3 x 3在聲明數(shù)組的過程中,可以同時給數(shù)組中的元素賦初值,沒有賦初值的元素自動初始為 零。例如:in teger li_abc3=1,3初始化結(jié)果如下:li_abc1=1li_abc2=3li_abc3=0注意:數(shù)組在使用時不能越界,否則會出現(xiàn)編譯錯誤。2.4運(yùn)算符和表達(dá)式運(yùn)算符的作用是進(jìn)行操作數(shù)之間的運(yùn)算操作,來滿足數(shù)據(jù)處理的需要。PowerScript的運(yùn)算符有4類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和連接運(yùn)算符。利用運(yùn)算符構(gòu)成表達(dá)式 來完成一定的運(yùn)算。2.4.1算術(shù)運(yùn)算符算術(shù)操作符用于完成數(shù)學(xué)運(yùn)算,表2-3列出了

44、PowerScript算術(shù)操作符及其示例。表2-3算術(shù)操作符操作符意義示例示例解釋+加c = a + ba加b-減c = a - ba減b-取負(fù)c = - a負(fù)a*乘c = a * ba乘b/除c = a / ba除以bA乘方c = a a ba的b次方+ +增1a +a加1賦給a-減1a -a減1賦給a+ =加等a += ba加b賦給a-=減等a -= ba減b賦給a* =乘等a *= ba乘b賦給a/=除等a /= ba除以b賦給aA =冪等a a= ba的b次方賦給a242關(guān)系運(yùn)算符關(guān)系操作符是比較運(yùn)算符,用于比較兩個相同類型數(shù)據(jù)間進(jìn)行比較運(yùn)算,比較的結(jié)果是否符合給定的條件,符合條件則其

45、值為 TRUE,否則為FALSE。表2-4列出了 PowerScript 關(guān)系操作符及其示例。表2-4關(guān)系操作符操作符意義示例解釋=等于If a = b Then “>大于If a > b Then “<小于If a < b Then “<>不等于If a <> b Then “>=大于等于If a >= b Then “<=小于等于If a <= b Then “關(guān)系運(yùn)算符可以用于數(shù)值型、日期型、時間型、字符型比較。字符串比較時,從左至右 逐個字符按字符的 ASCII值比較,所以進(jìn)行字符串比較時是區(qū)分大小寫的,空格也參與

46、比較。對于日期型的數(shù)據(jù)比較,日期在前的小,比如 2006-12-12比2006-12-24小。對于時間型的數(shù)據(jù)比較,時間在前的小,比如 18:20:10比18:10:20大。2.4.3 邏輯運(yùn)算符邏輯操作符可以對布爾型數(shù)據(jù)進(jìn)行運(yùn)算,其運(yùn)算結(jié)果仍是布爾型。能構(gòu)成其結(jié)果為TRUE或FALSE的邏輯表達(dá)式。表 2-5列出了 PowerScript邏輯操作符及其示例。表2-5邏輯操作符操作符意義示例解釋NOT邏輯反this.Checked = NOT this.CheckedAND邏輯與If a > 100 AND a < 200 Then “OR邏輯或If a = 100 OR a =

47、200 Then “2.4.4連接運(yùn)算符連接操作符只有一個,就是符號“ + ”用于把兩個String型或Blob型變量的內(nèi)容連接在一起,形成新的字符串或Blob型數(shù)據(jù)。例如:string TestTest ="北京"+ "海淀"/ Test等于"北京海淀"245表達(dá)式及運(yùn)算符優(yōu)先級表達(dá)式由各種運(yùn)算符、各種類型的數(shù)據(jù)及括號組成。在表達(dá)式中數(shù)據(jù)的類型應(yīng)與運(yùn)算符 相匹配,若在計算表達(dá)式時同時出現(xiàn)多種運(yùn)算符,應(yīng)根據(jù)運(yùn)算符的優(yōu)先級來進(jìn)行求值,操作 符的優(yōu)先級定義表達(dá)式的運(yùn)算次序。表 2-6列出了運(yùn)算符的優(yōu)先級。表2-6運(yùn)算符的優(yōu)先級優(yōu)先級運(yùn)算符

48、意義1 (最高)()括號2+、 、 +、-正號、負(fù)號、自增、自減3A幕運(yùn)算4*, /乘、除5+,-力口、減、及連接運(yùn)算6=,>,V, >=, <=, <>關(guān)系運(yùn)算符7NOT邏輯反8AND邏輯與9 (最低)OR邏輯或2.5 PowerScript 基本語句PowerBuilder中的基本程序語句,可分為下列幾種類型:賦值語句條件判斷語句循環(huán)語句 調(diào)用語句 流程控制語句2.5.1 賦值語句賦值語句是用等號“=”來將數(shù)據(jù)值或表達(dá)式的值賦給一個變量。賦值語句是應(yīng)用程序 中使用最頻繁的語句,其格式如下:varn ame=expressi on其中,varname是要賦值的變

49、量名。Expression是表達(dá)式、字符串、數(shù)字等。它將表達(dá)式 的值賦給左邊的變量。例如:ls_n ame="John"li_A= 10A=BA2+40A=B=C A是一個Boolean型的變量。表達(dá) B=C的值決定了變量 A的值為TRUE或 FALSE,如果B和C的值相等,貝U A的值為TRUE ;如果B不等于C,則A的值為FALSE, 第一個等號作為賦值號,第二個等號作為關(guān)系運(yùn)算符。2.5.2 條件語句PowerBuilder的條件語句共有兩類:IF語句和 CHOOSE CASE語句。IF語句計算一個邏 輯表達(dá)式,然后根據(jù)表達(dá)式的值是真(TRUE )是假(FALSE )

50、決定下一步執(zhí)行的語句塊;CHOOSE CASE語句可同時處理多種情況。下面介紹條件語句的結(jié)構(gòu)和用法。1. IF語句IF語句有兩種形式,單行IF . THEN語句和多行IF . THEN語句。單行IF . THEN語句的格式為:IF cond THEN action1 ELSE action2其中cond是個表示條件的邏輯表達(dá)式,action1、action2是一條語句,方括號表示該成分可根據(jù)需要選擇。單行IF . THEN語句書寫時整條語句寫在一行上,當(dāng)cond的結(jié)果為True時執(zhí)行語句action1,否則執(zhí)行語句 action2 (如果有該子句的話)。多行IF . THEN語句的語法格式為:

51、IF condition1 THENaction1ELSEIF condition2 THENaction2.ELSEaction3 END IF其中 condition1、condition2 是邏輯表達(dá)式,action1、action2、action3 是一條或多條語句, 方括號表示該子句可根據(jù)需要選擇。本語句的執(zhí)行過程為:計算邏輯表達(dá)式con diti on1,如果其結(jié)果為True,則執(zhí)行action1,然后離開整個IF語句;否則計算condition2,如果其結(jié)果 為True,則執(zhí)行action2 ,然后離開整個IF語句;如果邏輯表達(dá)式的結(jié)果都是False,且存在ELSE子句,則執(zhí)行

52、action3。2. CHOOSE CASE 語句CHOOSE CASE語句根據(jù)測試表達(dá)式的值選擇不同的操作,其語法格式為:CHOOSE CASE testexpressionCASE expressionlistStatementblockCASE expressionliststatementblockCASE expressionliststatementblockCASE ELSEstatementblockEND CHOOSE其中,testexpression是測試表達(dá)式,expressionlist是判斷表達(dá)式,Statementblock是滿足條件時執(zhí)行的語句塊,方括號表示該成分

53、可以省略。判斷表達(dá)式可以使用如下的形式:用逗號分隔的一組數(shù)據(jù),例如:2,4,7 ;用TO表示一個區(qū)間范圍,例如: 2 TO 15 ;用IS代表測試值,后跟關(guān)系操作符和比較值,例如:IS> 30 ;組合運(yùn)用上述3種方法,并用逗號進(jìn)行分隔,例如:5,6,8 TO 12,IS > 20。執(zhí)行CHOOSE CASE語句時,PowerBuilder將逐條查找 CASE,如果找到與測試值相匹 配的判斷表達(dá)式,就執(zhí)行該CASE后的語句塊,然后執(zhí)行END CHOOSE后的第一條語句。如果CHOOSE CASE語句中包含 CASE ELSE子句,則未找到任何匹配的CASE條件時,執(zhí)行CASE ELS

54、E子句中的語句塊。2.5.3循環(huán)語句1. DOLOOP循環(huán)DO , LOOP結(jié)構(gòu)提供了一種基于某個條件的靈活的循環(huán)方法,其中DO表示循環(huán)的開始,LOOP表示循環(huán)的結(jié)束,condition表示循環(huán)條件,是個邏輯表達(dá)式,其值為True或Falseo 它有4種形式,分別為:DO UNTIL con diti on , LOOPDO UNTIL condition , LOOP 的語法格式為:DO UNTIL conditionStatementsLOOP其執(zhí)行過程為:先計算條件condition ,其結(jié)果為False時,執(zhí)行語句塊 Statements,接著再檢查條件,直到 condition的結(jié)果為True時退出循環(huán)。DO WHILE con diti on , LOOPDO WHILE condition , LOOP 的語法格式為:DO WHILE conditionStatementsLOOP其執(zhí)行過程為:先計算條件condition,其結(jié)果為True時,執(zhí)行語句塊 Statements,接著再檢查條件,直到 condition的結(jié)果為False時退出循環(huán)。DO , LOOP UNTIL conditionDO ,LOOP UNTIL condition 的語法格式為:DOStatementsLOOP UNTIL c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論