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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、ger i,li_sumi=1li_sum=0begin:i=i+1if i>50 thengoto finishend ifif mod(i,2)=0 thenli_sum=li_sum+iend ifgoto beginfinish:MessageBox("50以內(nèi)的偶數(shù)和為:",string(li_sum)2.1.5 特殊ASCII碼字符在字符串中可以包括特殊的ASCII碼字符,特別是控制字符,波浪號()作為引用特殊ASCII字符或控制字符的前綴。常用的特殊字符如表2-1所示。表2-1 特殊ASCII字符列表特 殊 字 符表 示 方 法新行(Newline)n

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

9、圖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并不將空值作為變量的默認初值。例如,當變量被說明未初始化時,PowerBuilder把0賦給數(shù)值型變量,把False賦給布爾型變量,把空串("")賦給字符串變量。變量被賦予空值的途徑有兩條:(1)從數(shù)據(jù)庫中讀到空值;(2)使用Se

10、tNull()函數(shù)賦值。例如:String name /此時name=""SetNull(name) / name值為NULL測試變量或表達式是否為空值時,使用函數(shù)IsNull(),而不是直接使用關(guān)系表達式,例如,a是個變量,要測試它是否為空值,可以這樣寫:IF IsNull(a) THEN 下面的寫法是錯誤的:IF a=NULL THEN 原因在于空值不等于任何值,也不等于另一個空值。注意:任意參數(shù)值為空值的函數(shù)返回值為空值,任何變量值為空值的表達式的結(jié)果為空值。2.1.7 保留字保留字是指PowerBuilder內(nèi)部使用的一些命令或符號,它們不能作為標識符來使用,否則在

11、編譯時會出現(xiàn)警告信息。它們有:aliaseventnotstaticand*executeofstepautoinstantiateexitonsubroutinecallexternalopen*supercasefalseorsystemcatchfetchparentsystemreadchoosefinallypost*systemwriteclose*firstpreparethencommitforpriorthisconnectforwardprivatethrowconstantfromprivatereadthrowscontinuefunctionprivatewritet

12、ocreate*globalproceduretriggercursorgotoprotectedtruedeclarehaltprotectedreadtrydeleteifprotectedwritetypedescribe*immediateprototypesuntildescriptorindirectpublicupdate*destroyinsertreadonlyupdateblobdisconnectintorefusingdointrinsicreturnvariablesdynamicisrollbackwhileelselastrpcfuncwithelseiflibr

13、aryselectwithinendloopselectblob_debugenumeratednextshared注意:在上面列舉的保留字中,左上角帶有*的保留字也是函數(shù)名;在PowerBuilder 8.0中,所有保留字的顏色都會變成綠色,這是在編寫程序的時候區(qū)分保留字的最好方法。2.1.8 代詞PowerBuilder提供了幾個代詞用來引用對象或控件而不用指定它們的名稱。程序中使用代詞的好處是避免硬代碼,編出來的程序會具有較好的可移植性。PowerBuilder 提供了4個代詞,分別為:This、Parent、ParentWindow和Super,其中前3個代詞應用廣泛,下面簡單介紹一下

14、這些代詞的意義和用法。l ThisThis:代表窗口、用戶對象、菜單、應用對象或控件本身,即代表正在為之編寫事件處理程序的對象。例如,窗口中有一個名稱為cb_ok的按鈕,在該按鈕的Clicked事件處理程序中可以寫上代碼:This.text=”你好”這里的This就代表cb_ok按鈕(因為是在該按鈕的Clicked事件編寫處理程序),它與下面的代碼是等價的:Cb_ok.text=”你好”l ParentParent:指當前控件所在的窗口。例如,窗口w_main中有個按鈕cb_close,其功能是單擊后關(guān)閉窗口w_main,可以在按鈕Clicked事件處理程序中寫上代碼:Close(parent

15、)它與下面的代碼是等價的:close(w_main)但是用Parent則使代碼具備更強的通用性和可移植性,并且也更容易理解。l parentwindowParentWindow:代表運行時菜單所在的窗口,該代詞只能在菜單的事件處理程序中使用。例如,一菜單中有一“關(guān)閉窗口”的子菜單項,并且菜單關(guān)聯(lián)到w_main窗口。在“關(guān)閉窗口”菜單項的Clicked事件編寫腳本:Close(ParentWindow)單擊該菜單項時就會關(guān)閉與之關(guān)聯(lián)的窗口,而不管窗口的具體名稱。它與下面的代碼是等價的:Close(w_main)l SuperSuper:在編寫控件或?qū)ο蟮淖訉ο髸r,子對象中可以調(diào)用父對象的事件處理

16、程序,程序中既可直接利用父對象的名稱調(diào)用它們,也可以使用Super代詞來調(diào)用。例如,想調(diào)用父對象的Click事件處理程序時,子對象中可以這樣寫:CALL Super:Clicked當調(diào)用在子類中被重載的父對象的函數(shù)時,也可以使用Super來指代父對象,例如,子對象重載了父對象的函數(shù)f_func(),在子對象中調(diào)用父對象的f_func()函數(shù)的語句可以這樣編寫:Super:f_func()2.1.9 對象的屬性、函數(shù)和事件的引用方法PowerBuilder是一種面向?qū)ο蟮拈_發(fā)工具,它的應用程序的開發(fā)過程實際上就是各種對象的定義和使用過程。所有對象都通過名稱相互區(qū)分。在PowerScript中,訪

17、問對象的屬性、函數(shù)、事件的方法很簡單,就是使用圓點作為標記符,具體來說,訪問對象屬性的格式為:對象名.對象屬性程序中訪問對象的函數(shù)與事件的格式為: objectname. type calltype when functionname( argumentlist )其中,方括號所括成分根據(jù)情況可以省略,各成分的意義為:(1)objectname是對象名。(2)type取值為FUNCTION或EVENT,用于指明是訪問函數(shù)還是事件,默認值為FUNCTION。(3)calltype用于指明PowerBuilder 查找函數(shù)的時機,有效取值為:l STATIC(默認值):編譯時查找函數(shù),若不存在,產(chǎn)

18、生編譯錯誤;l DYNAMIC:程序運行時查找函數(shù),若不存在,產(chǎn)生運行錯誤。(4)when用于指明函數(shù)或事件是立即執(zhí)行還是當前程序段執(zhí)行完畢后執(zhí)行,取值為:l TRIGGER(默認值):立即執(zhí)行;l POST:當前程序段執(zhí)行完畢后執(zhí)行。(5)functionname指明調(diào)用的函數(shù)或事件名稱。(6)argumentlist給出函數(shù)或事件的參數(shù)。例如,想把輸入焦點移動到單行編輯框sle_1上,程序中寫上語句:sle_1.SetFocus()想立即執(zhí)行按鈕cb_1的單擊事件處理程序,那么寫上語句:cb_1 .EVENT TRIGGER Click ( )【實例2-1】窗口對象的屬性、函數(shù)、事件的使用

19、要求:創(chuàng)建窗口對象w_test,窗口的標題為“窗口測試”,背景色為紅色。運行窗口后,單擊該窗口,背景色變?yōu)榫G色;雙擊該窗口,窗口的高度不變,寬度是原來的2倍,并且背景色變?yōu)樗{色。技術(shù)要點:窗口對象的屬性、函數(shù)、事件的使用。操作步驟:(1)在e:student下建立工作區(qū)test.pbw(具體操作方法參考第1章【實例1-1】)。(2)創(chuàng)建應用對象test。(3)創(chuàng)建窗口w_test。選擇ile菜單中的ew命令,選中Pb Object選項卡中的Window圖標,單擊按鈕,出現(xiàn)新建窗口。在屬性子窗口的General選項卡中,將窗口的Title屬性設(shè)為“窗口測試”,即在Title下的編輯框中輸入“窗口

20、測試”,保存窗口命名為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.height) /改變窗口的寬度原來的2倍this.backcolor=rgb(0,0 ,255) /背景色設(shè)置為藍色(7)運行程序。單擊PowerBuilder 8.0工具欄中的Run login按鈕或按&l

21、t;Ctrl>+<R>快捷鍵,運行程序,單擊窗口,背景色變?yōu)榘咨?;雙擊窗口,改變窗口大小。說明:(1)窗口的標題、背景色都是窗口對象w_test的屬性。設(shè)置屬性值有兩種方法:一種是在屬性窗口中設(shè)置,一種是在運行程序時在腳本中設(shè)置。窗口的Open事件的腳本可以直接在屬性窗口中設(shè)置。(2)resize()是窗口對象的函數(shù),語法:對象名.resize(width,height),將對象的大小修改為指定的width(寬度)和height(高度)。腳本this.resize(2*this.width,this.height)中的this代表窗口對象w_test。(3)clicked(單

22、擊)、doubleclicked(雙擊)是窗口對象提供的兩個常用事件,如果用戶想接收某個特殊消息,以滿足特殊的需要,還可以自己定義事件,這種自定義的事件叫做“用戶事件”。2.2 數(shù)據(jù)類型PowerScript語言與其他編程語言相似,也提供數(shù)據(jù)類型來指明變量所存儲的數(shù)據(jù)的類型,且數(shù)據(jù)類型十分豐富,包括標準數(shù)據(jù)類型、Any類型、系統(tǒng)對象數(shù)據(jù)類型和枚舉類型四大類,程序中通過數(shù)據(jù)類型限定變量的取值范圍。2.2.1 標準數(shù)據(jù)類型PowerBuilder的標準數(shù)據(jù)類型共有14種,如表2-2所示。表2-2 標準數(shù)據(jù)類型列表與示例數(shù) 據(jù) 類 型意 義示 例Blob二進制大對象,用于存儲大量數(shù)據(jù),例如圖像、大文

23、本等如保存位圖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帶符號十進制數(shù),最大18位精度8754625.8635Double帶符號浮點數(shù),15位有效數(shù)字,范圍從2.2E-3081.7E+3086.324E+5Integer或Int16位帶符號整數(shù),范圍從-32768+327677688Long

24、32位帶符號整數(shù),范圍從-2,147,483,648+2,147,483,6474688243Real帶符號浮點數(shù),精度6位,范圍從1.17E-383.4E+383.5E+5String字符串類型,用于存儲任意的ASCII字符,長度為060,000(16位環(huán)境中),32位環(huán)境中長度只受系統(tǒng)能力的限制。程序中直接寫字符串時,用單引號(')或雙引號(")將字符串括起來"計算機""abc"Time24小時制時間,包括小時(0023)、分(0059)、秒(0059)以及秒的小數(shù)位(最多六位),范圍從00:00:0023:59:59:999999

25、13:32:18:123456UnsignedInteger或UnsignedInt或Uint16位無符號整數(shù),范圍從0655355234UnsignedLong或Ulong32位無符號整數(shù),范圍從04,294,976,295542348502.2.2 Any數(shù)據(jù)類型除了上面講到的標準數(shù)據(jù)類型外,PowerBuilder還提供了一種任意數(shù)據(jù)類型,即Any數(shù)據(jù)類型。它是一種可變的數(shù)據(jù)類型,Any數(shù)據(jù)的類型由初值類型決定,程序中給它賦什么類型的值它將變成什么類型,它可以接受標準數(shù)據(jù)類型、對象、結(jié)構(gòu)以及數(shù)組等各種類型的值。所以,一般情況下,當不能確定變量聲明為何種類型時,可以聲明為Any類型。要想知

26、道Any類型變量中保存的是哪種數(shù)據(jù)類型,可以使用函數(shù)ClassName(),例如: any la_studentdatainteger li_integer=123la_studentdata=li_integermessagebox("any變量類型",classname(la_studentdata)雖然Any類型的數(shù)據(jù)使用靈活,但也存在一些潛在的不安全因素。它是在運行時而不是在編譯時時確定變量的實際類型,所以編譯器不會在編譯時對Any類型進行正確性檢查,運行時可能會出現(xiàn)錯誤。使用Any類型要注意,使用Any變量前必須首先賦值;Any類型變量參加運算時,必須保證其值的數(shù)

27、據(jù)類型正確且符合操作符的要求。2.2.3 系統(tǒng)對象數(shù)據(jù)類型在PowerBuilder中所有的系統(tǒng)元素如窗口、菜單、各種控件都是系統(tǒng)對象,每一種系統(tǒng)對象實際上都是定義在PowerBuilder 8.0內(nèi)部的一種數(shù)據(jù)類型。通常情況下,不必把這些對象當作數(shù)據(jù)類型來考慮,只是在需要時通過畫板直接創(chuàng)建,然后就可以使用它們。比如,當創(chuàng)建一個w_main的窗口時,實際上就是聲明一個Window類型的變量,當程序執(zhí)行Open(w_main)時,此變量就被初始化了。但有時需要動態(tài)處理窗口、菜單、控件等系統(tǒng)對象時,這就需要定義系統(tǒng)對象數(shù)據(jù)類型的變量。例如:window mywin /說明窗口變量menu myme

28、nu /說明菜單對象變量要知道PowerBuilder 8.0中有多少個系統(tǒng)對象,可以單擊工具欄上的按鈕,打開“對象瀏覽器”,選擇“System”選項頁,此時窗口左邊列出了所有的系統(tǒng)對象,如圖2-3所示。圖2-3 對象瀏覽器的“System”選項頁2.2.4 枚舉類型枚舉類型是PowerBuilder定義的用符號代替的數(shù)值的特殊常量,不過與其他編程語言(比如PASCAL或C)不同,在PowerBuilder 8.0中所有枚舉類型的值都是系統(tǒng)預先定義的,開發(fā)人員不能定義自己的枚舉類型,而只能按系統(tǒng)要求使用它。枚舉類型實際是一組值,每個值都以英文單詞開始,以感嘆號“!”結(jié)束。枚舉類型一般用于以下兩

29、種情況:l 作為函數(shù)的參數(shù)。l 作為對象和控件的屬性。用得較多的是第二種情形,例如,定義文本框?qū)R方式的枚舉類型為Alignment,其取值只能為:Left!、Justify!、Center!、Right!,并且直接使用,不需加引號。例如:mle_1.Alignment=center! /多行編輯框控件名為mle_1要查看PowerBuilder中的枚舉類型數(shù)據(jù),可以選擇Tools菜單中的Browser命令(單擊工具欄的圖標),并在彈出的Browser對話框選擇Enumerated標簽頁。在左邊列表框中選擇要查看的枚舉值類別,然后雙擊右邊樹型列表中的Properties,該類別的枚舉值即被顯示

30、出來,如圖2-4所示。圖2-4 系統(tǒng)的枚舉類型2.3 變量和常量PowerScript的基本功能之一是對數(shù)據(jù)進行處理,數(shù)據(jù)處理的基本對象是變量和常量。無論是常量還是變量都是程序中不可缺少的元素,它們在使用前都應先聲明,但聲明的格式不同,作用域也不同。2.3.1 變量變量是指在程序運行過程中其值可以改變的量,變量在程序運行中可被賦值,在執(zhí)行各種運算和控制時其值可以改變,可用來存放常數(shù)、中間結(jié)果和最終結(jié)果,還可以作為控制變量來控制程序的運行。變量必須先聲明后使用。變量聲明的一般語法格式為:數(shù)據(jù)類型 變量名=初值,變量名=初值其中方括弧括起的內(nèi)容為可選項。數(shù)據(jù)類型可以是標準數(shù)據(jù)類型、系統(tǒng)對象數(shù)據(jù)類型

31、、Any數(shù)據(jù)類型和枚舉類型中的任一種。變量名為前面講到的合法的標識符。例如:integer li_number=23string ls_name="Lucy"在設(shè)計過程中,通常為了便于認別和管理,變量名的命名除符合標識符命名規(guī)則外,其標識名的前兩個字母具有標識意義第一個字符代表變量的作用范圍(這個在下一小節(jié)中將詳細介紹),第二個代表數(shù)據(jù)類型。例如:integer ii_number=100 /實例的整型變量。第一個字母I代表(instance實例變量),第二個I代表整型。date id_date /實例的日期型變量time st_time /共享的時間變量。s代表(shar

32、e共享變量),t代表時間變量。String gs_name /全局的字符串變量。g代表(global全局變量),s代表字符串變量。Integer li_count,li_total /局部的整型變量,一次聲明了兩個變量變量若在聲明時不賦初值,系統(tǒng)將按數(shù)據(jù)類型的默認值自動賦初值,數(shù)值類型的默認初值為0,字符類型的默認初值是空字符串,Boolean型的初值為False,Date型初值為1900-01-01。一行聲明多個相同類型的變量,變量之間用逗號“,”分隔。例如:integer li_n1=18,li_n2=20,li_n3=22注意:變量初始化是在編譯時進行,而不是在運行時進行。2.3.2 變

33、量的作用域變量的作用域即變量的使用范圍,也可以認為在什么條件、什么范圍內(nèi)該變量有效。在PowerBuilder中按變量的作用范圍可分為全局變量、實例變量、共享變量和局部變量四種類型,每種變量的說明位置也不一樣1 全局變量(Global Variables)在PowerBuilder的幾種變量中,全局變量的作用域是最大的,是整個應用程序,在整個應用程序中都可以被訪問。全局變量可以在應用對象、窗口、用戶對象、函數(shù)或菜單對象的畫板的腳本視圖中聲明,選擇Declare標簽頁,并在列表框中選擇Global Variables項,如圖2-5所示。圖2-5 聲明全局變量由于全局變量增加了應用程序各個部分的耦

34、合和聯(lián)系,當在任何一個地方修改其值時,所有的變量的值都將發(fā)生變化,就在可能導致程序運行不正常,所以必須限制全局變量的使用和修改,只把那些在整個應用程序中要使用的變量定義為全局變量,沒有必要時盡量不要使用全局變量。2 實例變量(Instance Variables)實例變量屬于某個特定對象(應用對象、窗口對象、用戶對象或菜單)并與該對象相關(guān)聯(lián)。只有在該對象或其派生的子對象的事件處理程序或函數(shù)中才能使用對象的實例變量,實例變量在它所關(guān)聯(lián)的對象被打開時創(chuàng)建,被關(guān)閉時消失。聲明實例變量的方法與聲明全局變量的方法類似,只不過是選擇Instance Variables就可以了,如果在定義范圍之外使用它,則

35、要通過點符號“”,例如:我們在窗口w_1中聲明了一個整型實例變量ii_sum,當我們在w_1中給它賦值時,可以這樣寫:ii_sum=50可是當我們要在窗口w_2中要使用ii_sum,將它賦值給w_2中的一個整型變量integer時,就要這樣寫:integer1=w_1.ii_sum /w_1必須是處于打開狀態(tài)。當且僅當?shù)谝淮未蜷_與實例變量相關(guān)的對象時,實例變量才被創(chuàng)建,在打開對象之前,實例變量是不存在的。3 共享變量(Share Variables)共享變量與實例變量相似,但并不常用,共享變量屬于一個對象的定義,在對象的所有實例中共享。共享變量是一個靜態(tài)變量,將保存其最后的值,即它所在的對象關(guān)

36、閉后再次打開時,共享變量還保持著關(guān)閉前的值。可使用共享變量的對象有應用對象、窗口對象、菜單對象及用戶對象。聲明一個共享變量和聲明一個實例變量的方法是一樣的,首先要進入該對象的代碼視圖,選擇Declare標簽頁,如圖2-5,再選擇Share Variables項。用一個例子來說明它們的區(qū)別。假設(shè)窗口w_1中有一個共享變量si_data的聲明。當窗口w_1第一次打開時,將創(chuàng)建共享變量si_data并初始化,si_data=500。運行一段代碼之后,共享變量si_data被改成了300。不久,窗口w_1關(guān)閉,但是共享變量并不像實例變量那樣消失了,而是仍然存在,當再次打開窗口w_1時,相同的共享變量s

37、i_data仍然存在,無須再次創(chuàng)建和初始化,所以當?shù)诙未蜷_窗口w_1時,共享變量的值是300。實例變量是隨著它的對象被打開、關(guān)閉和再次打開而被創(chuàng)建、刪除和創(chuàng)建的。共享變量是與對象的定義相關(guān)聯(lián)的,而不是它的任何特定的實例,所以它總是存在的。4 局部變量(Local Variables)局部變量的作用范圍是四種變量中最嚴格的。這種變量只在聲明變量的腳本之內(nèi)有效,退出此腳本就自動取消。在不同的函數(shù)內(nèi)使用相同的局部變量名是可以的,不會引起混淆,這樣就增加了編程的方便性。5 優(yōu)先級順序在一個腳本的執(zhí)行過程中,若出現(xiàn)不適當?shù)恼{(diào)用時,PowerBuilder將按照下面的順序搜索該變量的位置:(1)局部變量

38、(2)共享變量(3)全局變量(4)實例變量如果按上述的順序找不到,就會向上搜索該對象繼承關(guān)系的父對象,查看其實例變量。2.3.3 常量常量是在程序運行過程中其值保持不變的量。并且聲明為一個常量以后只能引用,不能更改它的值。聲明常量時需要加關(guān)鍵字CONSTANT,必須賦初值,其語法格式如下:CONSTANT 數(shù)據(jù)類型 變量名=值為了區(qū)分常量和變量,通常情況下常量名用大寫字母表示。例如:CONSTANT real LR_PI=3.14注意:不能在一行中聲明多個常量,否則只有第一個是常量,其余是變量。2.3.4 數(shù)組數(shù)組是一系列有序數(shù)據(jù)的集合,數(shù)組中的每一個元素都具有相同的數(shù)據(jù)類型,并且可以用一個共

39、同的名字通過不同的下標來訪問數(shù)組中的每一個元素。下標就是數(shù)組的序號,它能惟一地標識數(shù)組中的每一個元素。PowerScript語言中數(shù)組的聲明格式如下:數(shù)據(jù)類型 數(shù)組名d1,dn=初值數(shù)據(jù)類型可以是標準數(shù)據(jù)類型、系統(tǒng)對象數(shù)據(jù)類型、Any數(shù)據(jù)類型和枚舉數(shù)據(jù)類型中的任一種。數(shù)組名是數(shù)組的標識符,它的命名符合標識符命名規(guī)則。數(shù)組后面的兩的方括號,外面一對表示數(shù)組下標的符號,里面一對表示其中的內(nèi)容是可選的,“d1,dn”代表各維下標,后面的大括號用來給數(shù)組中元素賦初值,用逗號分隔。數(shù)組中最常用的是一維數(shù)組,如果大小確定,用下列方法定義:integer lib_number6 /默認下界,下標從1到6共6

40、個元素string lsb_name2 to 7 /自定義下界,下標從2到7共6個元素數(shù)組中如果省略下標,表示大小不確定是動態(tài)數(shù)組,動態(tài)數(shù)組的下標從1開始,元素的個數(shù)在程序運行時決定。例如:string ls_name /大小不確定的一維數(shù)組多維數(shù)組定義時,用逗號分隔。例如:Long llc_data3,4 /二維數(shù)組3×4Real lrc_data3,3,3 /三維數(shù)組3×3×3在聲明數(shù)組的過程中,可以同時給數(shù)組中的元素賦初值,沒有賦初值的元素自動初始為零。例如:integer li_abc3=1,3初始化結(jié)果如下:li_abc1=1li_abc2=3li_ab

41、c3=0注意:數(shù)組在使用時不能越界,否則會出現(xiàn)編譯錯誤。2.4 運算符和表達式運算符的作用是進行操作數(shù)之間的運算操作,來滿足數(shù)據(jù)處理的需要。PowerScript的運算符有4類:算術(shù)運算符、關(guān)系運算符、邏輯運算符和連接運算符。利用運算符構(gòu)成表達式來完成一定的運算。2.4.1 算術(shù)運算符算術(shù)操作符用于完成數(shù)學運算,表2-3列出了PowerScript算術(shù)操作符及其示例。表2-3 算術(shù)操作符操作符意 義示 例示例解釋+加c = a + ba加b-減c = a - ba減b-取負c = - a負a*乘c = a * ba乘b/除c = a / ba除以b乘方c = a ba的b次方+增1a +a加1

42、賦給a-減1a -a減1賦給a+=加等a += ba加b賦給a-=減等a -= ba減b賦給a*=乘等a *= ba乘b賦給a/=除等a /= ba除以b賦給a=冪等a = ba的b次方賦給a2.4.2 關(guān)系運算符關(guān)系操作符是比較運算符,用于比較兩個相同類型數(shù)據(jù)間進行比較運算,比較的結(jié)果是否符合給定的條件,符合條件則其值為TRUE,否則為FALSE。表2-4列出了PowerScript關(guān)系操作符及其示例。表2-4 關(guān)系操作符操作符意 義示例解釋=等于If a = b Then >大于If a > b Then <小于If a < b Then <>不等于If

43、 a <> b Then >=大于等于If a >= b Then <=小于等于If a <= b Then 關(guān)系運算符可以用于數(shù)值型、日期型、時間型、字符型比較。字符串比較時,從左至右逐個字符按字符的ASCII值比較,所以進行字符串比較時是區(qū)分大小寫的,空格也參與比較。對于日期型的數(shù)據(jù)比較,日期在前的小,比如2006-12-12比2006-12-24小。對于時間型的數(shù)據(jù)比較,時間在前的小,比如18:20:10比18:10:20大。2.4.3 邏輯運算符邏輯操作符可以對布爾型數(shù)據(jù)進行運算,其運算結(jié)果仍是布爾型。能構(gòu)成其結(jié)果為TRUE或FALSE的邏輯表達式。

44、表2-5列出了PowerScript邏輯操作符及其示例。表2-5 邏輯操作符操作符意 義示例解釋NOT邏輯反this.Checked = NOT this.CheckedAND邏輯與If a > 100 AND a < 200 Then OR邏輯或If a = 100 OR a = 200 Then 2.4.4 連接運算符連接操作符只有一個,就是符號“+”,用于把兩個String型或Blob型變量的內(nèi)容連接在一起,形成新的字符串或Blob型數(shù)據(jù)。例如:string TestTest = "北京" + "海淀" / Test等于"北京

45、海淀"2.4.5 表達式及運算符優(yōu)先級表達式由各種運算符、各種類型的數(shù)據(jù)及括號組成。在表達式中數(shù)據(jù)的類型應與運算符相匹配,若在計算表達式時同時出現(xiàn)多種運算符,應根據(jù)運算符的優(yōu)先級來進行求值,操作符的優(yōu)先級定義表達式的運算次序。表2-6列出了運算符的優(yōu)先級。表2-6 運算符的優(yōu)先級優(yōu)先級運算符意 義1(最高)()括號2+、-、+、-正號、負號、自增、自減3冪運算4*,/乘、除5+,-加、減、及連接運算6=,>,<,>=,<=,<>關(guān)系運算符7NOT邏輯反8AND邏輯與9(最低)OR邏輯或2.5 PowerScript基本語句PowerBuilder中

46、的基本程序語句,可分為下列幾種類型:l 賦值語句l 條件判斷語句l 循環(huán)語句l 調(diào)用語句l 流程控制語句2.5.1 賦值語句賦值語句是用等號“=”來將數(shù)據(jù)值或表達式的值賦給一個變量。賦值語句是應用程序中使用最頻繁的語句,其格式如下:varname=expression其中,varname是要賦值的變量名。Expression是表達式、字符串、數(shù)字等。它將表達式的值賦給左邊的變量。例如:ls_name="John"li_A= 10A=B2+40A=B=C /A是一個Boolean型的變量。表達B=C的值決定了變量A的值為TRUE或FALSE,如果B和C的值相等,則A的值為TR

47、UE;如果B不等于C,則A的值為FALSE,第一個等號作為賦值號,第二個等號作為關(guān)系運算符。2.5.2 條件語句PowerBuilder的條件語句共有兩類:IF語句和CHOOSE CASE語句。IF語句計算一個邏輯表達式,然后根據(jù)表達式的值是真(TRUE)是假(FALSE)決定下一步執(zhí)行的語句塊;CHOOSE CASE語句可同時處理多種情況。下面介紹條件語句的結(jié)構(gòu)和用法。1IF語句IF語句有兩種形式,單行IF . THEN語句和多行IF . THEN語句。l 單行IF . THEN語句的格式為:IF cond THEN action1 ELSE action2其中cond是個表示條件的邏輯表達

48、式,action1、action2是一條語句,方括號表示該成分可根據(jù)需要選擇。單行IF . THEN語句書寫時整條語句寫在一行上,當cond的結(jié)果為True時執(zhí)行語句action1,否則執(zhí)行語句action2(如果有該子句的話)。l 多行IF . THEN語句的語法格式為:IF condition1 THENaction1 ELSEIF condition2 THENaction2 . . . ELSEaction3 END IF其中condition1、condition2是邏輯表達式,action1、action2、action3是一條或多條語句,方括號表示該子句可根據(jù)需要選擇。本語句的執(zhí)

49、行過程為:計算邏輯表達式condition1,如果其結(jié)果為True,則執(zhí)行action1,然后離開整個IF語句;否則計算condition2,如果其結(jié)果為True,則執(zhí)行action2,然后離開整個IF語句;如果邏輯表達式的結(jié)果都是False,且存在ELSE子句,則執(zhí)行action3。2CHOOSE CASE語句CHOOSE CASE語句根據(jù)測試表達式的值選擇不同的操作,其語法格式為:CHOOSE CASE testexpressionCASE expressionlist StatementblockCASE expressionliststatementblock . . .CASE ex

50、pressionliststatementblockCASE ELSEstatementblockEND CHOOSE其中,testexpression是測試表達式,expressionlist是判斷表達式,Statementblock是滿足條件時執(zhí)行的語句塊,方括號表示該成分可以省略。判斷表達式可以使用如下的形式:l 用逗號分隔的一組數(shù)據(jù),例如:2,4,7;l 用TO表示一個區(qū)間范圍,例如:2 TO 15;l 用IS代表測試值,后跟關(guān)系操作符和比較值,例如:IS> 30;l 組合運用上述3種方法,并用逗號進行分隔,例如:5,6,8 TO 12,IS > 20。執(zhí)行CHOOSE C

51、ASE語句時,PowerBuilder將逐條查找CASE,如果找到與測試值相匹配的判斷表達式,就執(zhí)行該CASE后的語句塊,然后執(zhí)行END CHOOSE后的第一條語句。如果CHOOSE CASE語句中包含CASE ELSE子句,則未找到任何匹配的CASE條件時,執(zhí)行CASE ELSE子句中的語句塊。2.5.3 循環(huán)語句1. DO LOOP循環(huán)DO LOOP結(jié)構(gòu)提供了一種基于某個條件的靈活的循環(huán)方法,其中DO表示循環(huán)的開始,LOOP表示循環(huán)的結(jié)束,condition表示循環(huán)條件,是個邏輯表達式,其值為True或False。它有4種形式,分別為:l DO UNTIL condition LOOPDO

52、 UNTIL condition LOOP的語法格式為:DO UNTIL condition StatementsLOOP其執(zhí)行過程為:先計算條件condition,其結(jié)果為False時,執(zhí)行語句塊Statements,接著再檢查條件,直到condition的結(jié)果為True時退出循環(huán)。l DO WHILE condition LOOPDO WHILE condition LOOP的語法格式為:DO WHILE conditionStatementsLOOP其執(zhí)行過程為:先計算條件condition,其結(jié)果為True時,執(zhí)行語句塊Statements,接著再檢查條件,直到condition的結(jié)果

53、為False時退出循環(huán)。l DO LOOP UNTIL conditionDO LOOP UNTIL condition的語法格式為:DOStatementsLOOP UNTIL condition其執(zhí)行過程為:先執(zhí)行語句塊Statements,然后計算條件condition,如果其結(jié)果為False,則繼續(xù)執(zhí)行語句塊statements,直到condition的結(jié)果為True時退出循環(huán)。l DO LOOP WHILE conditionDO LOOP WHILE condition的語法格式為:DO StatementsLOOP WHILE condition其執(zhí)行過程為:先執(zhí)行語句塊Stat

54、ements,然后計算條件condition,如果其結(jié)果為True,則繼續(xù)執(zhí)行語句塊Statements,直到condition的結(jié)果為False時退出循環(huán)。2FOR NEXT循環(huán)FOR NEXT是個循環(huán)次數(shù)確定的循環(huán)結(jié)構(gòu),它使循環(huán)體內(nèi)的語句執(zhí)行規(guī)定的次數(shù),其語法結(jié)構(gòu)為:FOR varname = start TO end STEP increment StatementblockNEXT其中,varname是循環(huán)變量,可以是任意的數(shù)值類型,start、end分別是循環(huán)變量的初值和終值,increment是每次循環(huán)后循環(huán)變量的步長增量(缺省值為1),Statementblock是一組語句,稱做循環(huán)體,方括號表示該子句可以省略。FOR NEXT語句的執(zhí)行過程為:循環(huán)變量varname從start開始,到end為止,重復執(zhí)行循環(huán)體,每執(zhí)行一次,varname被重新賦值,新值為varname+ increment。另外,如果start或end在循環(huán)體內(nèi)被修改,將影響循環(huán)次數(shù)。2.5.4 調(diào)用語句(CALL)調(diào)用語句從后代對象的腳本中調(diào)用其祖先對象的腳本。調(diào)用語句不但可以調(diào)用祖先的窗口對象、菜單對象和用戶自定義對象的腳本。也可以在窗口對象和用戶自定義對象的控制腳本。格式:CALL ancestorobjectna

溫馨提示

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

最新文檔

評論

0/150

提交評論