本文由馬爾文帕納科亞太應(yīng)用中心技術(shù)經(jīng)理朱曉東供稿
HighScore Plus腳本所使用的語言是Object Pascal,繼承自相對古老的Pascal編程語言,,支持結(jié)構(gòu)化和面向?qū)ο缶幊?。它的?yōu)點(diǎn)包括代碼的易讀性、快速編譯,,以及支持多個單元文件從而實(shí)現(xiàn)模塊化編程,。作為已經(jīng)不再流行的編程語言,可能在圖書館里才能翻得到它的出版教程了,,但網(wǎng)絡(luò)上依然保留了不少資源,。Neil Moffatt的Delphi Basic、Marco Cantù的Essential Pascal(中文)和Tao Yue的Learn Pascal tutorial(Wiki化后的中文版)都可以給初學(xué)者提供不少幫助,。
HighScore Plus軟件里甚至內(nèi)置了一個集成開發(fā)環(huán)境(IDE,,Integrated Development Environment ),可以由菜單Tools - Script Editor調(diào)出,,麻雀雖小五臟俱全,,可以直接編輯、編譯和調(diào)試代碼,。軟件幫助系統(tǒng)的第11部分中羅列了HighScore Plus軟件開放的可調(diào)用的對象模型及它們的屬性,、函數(shù)和過程。軟件安裝目錄下的HelpExternals子目錄下也放了不少.PAS的示例代碼文件,,可用于參考和學(xué)習(xí),;Documentation子目錄下的Scripting in HighScore Plus.pdf文件中也舉了大量的例子來告訴你如何實(shí)現(xiàn)某些功能。
本文的編寫也參考了上述的文件和網(wǎng)絡(luò)資源。
圖1 HighScore Plus中內(nèi)置的腳本編輯器
01丨程序結(jié)構(gòu)
如下圖,,Pascal程序的基本結(jié)構(gòu)由三部分組成:
圖2 Pascal程序基本結(jié)構(gòu)
程序首部:
以關(guān)鍵字program開頭,,用以標(biāo)識這是一個程序;其后便是由用戶自己定義的程序名稱ExampleProgram,;最后以半角分號(;)作為這一部分的結(jié)束,。聲明部分:
聲明部分可以省略,但凡是在程序中用到所有變量,、常量,、數(shù)組及自定義的數(shù)據(jù)類型、過程與函數(shù)等都必須在聲明部分預(yù)先定義,,也就是說,,不允許不聲明就使用;聲明部分中可以包含:
使用指令:以關(guān)鍵字uses開頭,,要在程序中引用的單元(相當(dāng)于模塊),,以便在程序中使用在單元中定義好的過程、函數(shù)和類等等,;一般System單元不用特地聲明引用,;如程序中不需要引用額外的單元,此部分可省略,;
類型聲明:以關(guān)鍵字type開頭,,基于已有數(shù)據(jù)類型構(gòu)建自定義的數(shù)據(jù)類型,以在程序中使用,;如沒有自定義新數(shù)據(jù)類型的必要,,此部分可省略;
常量聲明:以關(guān)鍵字const開頭,,定義在程序中會使用到的常量;如無必要可省略,;
變量聲明:以關(guān)鍵字var開頭,,定義在程序中會使用到的變量;如果程序中用不到自定義的變量,,此部分可以省略,;
子過程、子函數(shù)定義,;如無必要可省略,;
程序主體:
程序主體由begin開始,end.(注意,,不要遺漏這個點(diǎn)符)結(jié)束,,兩者中間則是執(zhí)行語句。
Pascal程序代碼不管哪一部分,語句末尾都必須有半角分號(;)以示這一語句的結(jié)束,,但允許end前面的那一個語句省略分號,;多個語句可以用一對begin和end;(注意,這里有半角分號)包含起來作為一個程序塊,,程序塊多用于子過程,、子函數(shù)等的定義以及流程語句;代碼里最后一個end后的點(diǎn)符(.)代表整個程序的結(jié)束,。
Pascal語言中,,程序名稱、常量名稱,、變量名稱等這種自定義的名稱統(tǒng)稱為標(biāo)識符,。標(biāo)識符必須以一個英文字母或者下劃線(_)開始,后面可以是英文字母,、數(shù)字或下劃線,,長度不限;但不能與Pascal語言已占用的有特殊含義的關(guān)鍵字/保留字(如program)相同,。標(biāo)識符以及關(guān)鍵字都不區(qū)分大小寫,,因此exampleprogram、ExampleProgram,、EXAMPLEPROGRAM和eXaMpLePrOgRaM這幾個名稱都是相同的,,但為了代碼的可讀性,建議遵循一定的命名書寫規(guī)范,,有意義地使用大小寫,。
在圖2中可以看到,在腳本編輯器默認(rèn)的代碼高亮規(guī)則下,,部分代碼以綠色斜體顯示,,這些是不被編譯也不被執(zhí)行的注釋。注釋同樣是代碼的一部分,,主要用來寫一些說明,,以讓代碼更容易理解,也可以用來在不刪除的情況下屏蔽有問題的代碼,。Pascal語言支持三種注釋方式:一對半角大括號({ }),、一對帶星號的半角小括號((* *))以及雙斜線(//)。
圖3 注釋
在HighScore Plus的腳本編輯器中,,當(dāng)點(diǎn)開工具欄中第一個按鈕并點(diǎn)擊New Script項(xiàng)新建一個腳本時,,在Script Name框中輸入的腳本名稱同時默認(rèn)為程序名稱;輸完名稱后,,點(diǎn)擊OK按鈕,,即會新建一個完整結(jié)構(gòu)的空白的腳本,。
圖4 新建腳本
02丨數(shù)據(jù)類型及賦值、運(yùn)算
Pascal語言中包含了以下基本數(shù)據(jù)類型:
整數(shù)類型:最基礎(chǔ)的是integer類型,,其數(shù)據(jù)范圍一般情況下已足夠使用,,如果需要更大的整數(shù)范圍,可以用longint類型甚至int64類型,;
實(shí)數(shù)類型:也稱浮點(diǎn)數(shù)型,,最基礎(chǔ)的是real類型,但不提倡用,,建議用single單精度實(shí)型或double雙精度實(shí)型,,要更大范圍得話,還可以用extended擴(kuò)展實(shí)型,;
字符類型:最基礎(chǔ)的是char類型,,即ASCII字符,一般用一對半角單引號將單個字符括起來,,如‘a(chǎn)‘,、‘@’等(注:半角單引號需多用一個單引號轉(zhuǎn)義,即’’’’),,也可以用井號加0~255以內(nèi)的整數(shù)表示第幾個ASCII字符,,如#65即為‘A’;雙字節(jié)的Unicode字符可以用widechar類型來支持,;多個字符組成的字符串則可以用string類型,;
布爾類型:最基礎(chǔ)的是boolean類型,只有TRUE(真,,值為1)和FALSE(假,,值為0)兩個值;
常量的賦值直接在聲明部分中聲明常量的同時完成,,而且不必特別要求其數(shù)據(jù)類型,,編譯器會根據(jù)所賦的值自動選用合適的數(shù)據(jù)類型;賦值時,,直接用等號(=)賦值,;賦值后,在程序中可以用常量的標(biāo)識符來使用其值,,但無法修改其值,。對于一個在程序中到處會用到,,而且程序運(yùn)行中保持不變的值,,建議用常量來存儲,然后在執(zhí)行代碼中使用這個常量的標(biāo)識符,,這樣當(dāng)要改這個值時,,就不用到執(zhí)行代碼中到處查找這個值然后修改,,而是可以輕松地直接在常量聲明中修改一次就成。
圖5 常量的聲明與賦值
變量的值在程序運(yùn)行的過程中可以更改,,但使用前必須先聲明好,。在程序的聲明部分中聲明的變量稱為全程變量,可以在整個程序(包括子過程,、子函數(shù)中)中使用,;在子過程、子函數(shù)中聲明的變量,,稱為局部變量,,只能在聲明它的子過程或子函數(shù)中使用。變量一般在執(zhí)行語句中用賦值符(帶半角冒號的等號,,即:=)賦值,;全程變量也可以在聲明的同時用等號(=)賦初值,但不建議這么做,。在聲明變量時,,必須用半角冒號(:)要求變量的數(shù)據(jù)類型;不賦初值的情況下,,一個語句可以聲明同一類型的多個變量,,這些變量的標(biāo)識符須用半角逗號(,)分隔開。
圖6 變量的聲明與賦值
一般的工作可能前面所講的那些數(shù)據(jù)類型已經(jīng)足夠使用了,,但涉及到相對復(fù)雜的,、要處理大量數(shù)據(jù)的工作時,通過定義很多個變量去實(shí)現(xiàn)很顯然不太現(xiàn)實(shí),,此時對于同一類型的大量數(shù)據(jù),,就可以用數(shù)組來處理。
數(shù)組可以通過“array[下標(biāo)范圍] of 數(shù)據(jù)類型”來定義,,其中下標(biāo)值一般是整數(shù)類型,。[下標(biāo)范圍]可以省略:定義時省略了[下標(biāo)范圍]的數(shù)組稱為動態(tài)數(shù)組,使用前必須先用函數(shù)setlength設(shè)置其大小,,設(shè)置后,,動態(tài)數(shù)組的下標(biāo)總是從零開始;定義時要求了下標(biāo)范圍的數(shù)組稱為靜態(tài)數(shù)組,,下標(biāo)范圍可以按需要設(shè)置,,以[下標(biāo)下屆..下標(biāo)上屆](用兩個半角點(diǎn)符隔開,相當(dāng)于從幾到幾的連續(xù)整數(shù))的格式定義,,下標(biāo)值甚至可以是負(fù)數(shù),;如果要定義多維數(shù)組,可以通過套娃的方式定義,,也可以在[ ]里定義多組下標(biāo)范圍,。當(dāng)聲明了一個數(shù)組變量,,則該數(shù)組變量中的各個元素就共用一個數(shù)組名(即該數(shù)組變量標(biāo)識符),通過下標(biāo)的不同以區(qū)別不同的元素,,可以通過“數(shù)組名[下標(biāo)]”來引用數(shù)組元素,;對數(shù)組的操作歸根到底就是對數(shù)組元素的操作,數(shù)組元素可以像同類型的普通變量那樣操作,。
圖7 數(shù)組的聲明與賦值
上圖中第30行中的“[true, true, true, true, true, false, false]”是一個直接常量(直接以字面形式,,而非標(biāo)識符表示的常量,如前面附圖中賦值語句等號右側(cè)的那些數(shù)值或字符,,2.7182818,、10086、true,、’A’ 等)數(shù)組,,用一對半角方括號([ ])將各元素括在其中,元素之間用半角逗號(,)分隔,。
變量在賦值時,,賦值號的右側(cè)除了用直接常量外,也可以是一個運(yùn)算表達(dá)式,,運(yùn)算表達(dá)式中可以帶有變量或常量,。
數(shù)字的計算使用算術(shù)運(yùn)算符,除了常規(guī)的四則運(yùn)算:加(+),、減(-),、乘(*)、除(/)外,,還有整除(div)和取模(除法取余數(shù),,mod);運(yùn)算時,,先乘除(整除和取模和乘除同一優(yōu)先級)后加減,,當(dāng)然括號優(yōu)先級最高(由內(nèi)向外逐層降低),相同優(yōu)先級則從左往右順序計算,;
圖8 數(shù)字的算數(shù)運(yùn)算
關(guān)系運(yùn)算符(=,、<>、>,、<,、>=、<=)則可以用來判斷兩個數(shù)之間的大小關(guān)系,,其結(jié)果是布爾類型,;關(guān)系運(yùn)算符的優(yōu)先級是zui低的;
圖9 數(shù)字的大小比較
邏輯運(yùn)算符則用來處理布爾類型的量,,包含:not(非,,只有一個運(yùn)算對象,結(jié)果取運(yùn)算對象的相反值),、and(且,,只有兩邊都為真,結(jié)果才為真),、or(或,,兩邊有一個真,則結(jié)果就為真),、xor(異或,,兩邊不一樣,則結(jié)果為真),;not優(yōu)先級最高,,其次是and,與乘除同一級別,, or和xor則與加減并列,;
圖10 布爾值的邏輯運(yùn)算
對于字符(串),,有連接運(yùn)算符(加號,,+)用來將兩邊的字符(串)連成一個字符串;關(guān)系運(yùn)算符也可以用于字符串的比較,,比較時,,兩個字符串從左往右按ASCII碼值逐個比較,,遇到不相等時,碼值大的字符所在的字符串為大,,因此小寫字母>大寫字母>數(shù)字,。
圖11 字符(串)的運(yùn)算
除上述數(shù)據(jù)類型外,還有枚舉,、集合(圖5中聲明的常量Letters就是一個點(diǎn)亮大小寫字母的52個字符的集合),、記錄、指針,、文件,、類等等類型,本文中不再贅述,,感興趣的可以參考Essential Pascal,、Delphi Basics、Learn Pascal tutorial等網(wǎng)絡(luò)資源中的說明,。
相關(guān)產(chǎn)品
免責(zé)聲明
- 凡本網(wǎng)注明“來源:化工儀器網(wǎng)”的所有作品,,均為浙江興旺寶明通網(wǎng)絡(luò)有限公司-化工儀器網(wǎng)合法擁有版權(quán)或有權(quán)使用的作品,未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載,、摘編或利用其它方式使用上述作品,。已經(jīng)本網(wǎng)授權(quán)使用作品的,,應(yīng)在授權(quán)范圍內(nèi)使用,并注明“來源:化工儀器網(wǎng)”,。違反上述聲明者,,本網(wǎng)將追究其相關(guān)法律責(zé)任。
- 本網(wǎng)轉(zhuǎn)載并注明自其他來源(非化工儀器網(wǎng))的作品,,目的在于傳遞更多信息,,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé),不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任,。其他媒體,、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品第一來源,,并自負(fù)版權(quán)等法律責(zé)任,。
- 如涉及作品內(nèi)容、版權(quán)等問題,,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,,否則視為放棄相關(guān)權(quán)利。