20130608

VBScript 程式撰寫規格

什麼是程式撰寫規格?
程式撰寫規格包含了下列數項:
  • 物件、變數和程序的命名規格
  • 寫註解時的規格
  • 文字格式和縮排的使用原則
使用一致的程式撰寫規格之主要理由在於可以標準化一個 script 或一組 script 的架構和程式碼樣式。如此一來,您和其它人便可以輕鬆地了解這些程式碼的意義。使用良好的程式撰寫規格,可提高原始程式碼的精確度、可讀性和清晰度,而且可使它與其他程式語言規格更具一致性和直覺性。
常數命名規格
早期的 VBScript 版本不能建立使用者自訂常數。如果需要使用常數時,通常都是以一變數來當作常數,同時使用全部大寫的字母來命名以和一般的變數區別。而每個字之間則使用底線( _ )字元來做區隔。比如像:
 USER_LIST_MAX
 NEW_LINE
雖然現在這仍是一個辨別常數的可行辦法,但因為現在可以使用 Const 陳述式來建立一個真正的常數,所以您可能會希望改用另一種命名的架構。這個方式混合了大小寫字母,同時在常數之前加了一個「con」當作字首。比如像:
 conYourOwnConstant
變數命名規格
為了維持程式的可讀性和一致性,請您在您的 VBScript 程式碼內的變數名稱前,加上下述的字首。
子型態字首範例
BooleanblnblnFound
BytebytbytRasterData
Date (Time)dtmdtmStart
DoubledbldblTolerance
ErrorerrerrOrderNum
IntegerintintQuantity
LonglnglngDistance
ObjectobjobjCurrent
SinglesngsngAverage
StringstrstrFirstName
變數的有效範圍
變數應該盡可能的定義在最小的有效範圍之中。VBScript 變數有下列幾種有效範圍:
有效範圍變數宣告的地點可視性
程序層級事件,函數,或 Sub 程序可見範圍在其宣告的程序中
Script 層級HTML 網頁的 HEAD 區段,需寫在所有程序之外Script 中的每一個程序都可見
變數有效範圍字首
當 script 很大時,加上變數有效範圍字首將可以快速區別變數的有效範圍。一個置於型態字首之前的單一字母之有效範圍字首可以幫我們做到這點,同時又不會過度的增加變數名稱的長度。
有效範圍字首範例
程序層級不必加dblVelocity
Script 層級ssblnCalcInProgress
有說明性的變數和程序名稱
變數和程序名稱應該使用大小寫混合的命名名稱,同時這個名稱應該盡可能地能夠說明變數的用途。此外,程序名稱應該以動詞開頭,比如像 InitNameArray 或 CloseDialog。對於一些經常使用的長名詞,我們建議您使用標準的縮寫,以免名稱過長。一般來說,名稱長度如果超過 32 個字元就很難閱讀。當您使用縮寫時,請在全部的 script 中都保持相同的縮寫方式。舉例來說,如果您在一個 script 或一組 script 中時而用 Cnt,時而用 Count,那麼有時可能會造成困擾。
物件命名規格
下清單格列出了您在撰寫 VBScript 時會遭遇的物件型態及建議的命名規格。
物件型態字首範例
3D PanelpnlpnlGroup
Animated buttonanianiMailBox
Check boxchkchkReadOnly
Combo box, drop-down list boxcbocboEnglish
Command buttoncmdcmdExit
Common dialogdlgdlgFileOpen
FramefrafraLanguage
Horizontal scroll barhsbhsbVolume
ImageimgimgIcon
LabellbllblHelpMessage
LinelinlinVertical
List BoxlstlstPolicyCodes
SpinspnspnPages
Text boxtxttxtLastName
Vertical scroll barvsbvsbRate
SlidersldsldScale
程式註解規格
所有的程序都應該以一簡短的註解當作開頭來解釋程序的功用。這些說明不必解釋程式製作的細節(它怎麼做到的), 因為這些內容可能時時會改變。如此一來,您就不必做一些不必要的註解維護工作,或是讓您的註解錯誤百出。這些程式碼本身和所有必要的行間註解就足以說明製作的方式。當要傳遞到程序中的引數之目的不是很明顯時,或是程序預期引數的值應該介於某個範圍之間時,您就應該在註解中說明。函數的傳回值以及會被程序更動的變數,特別是經由引用的引數,也都應該寫在程序的前頭的註解中。
程序的開頭註解應該包含下列幾個區段標題。您可以參考以下「格式化您的程式碼」中的例子。
區段標題註解內容
目的(Purpose)程序的功用(不是如何達成其功用)。
假設(Assumptions)列出任何會影響這個程序的外部變數、控制項或其它元件。
影響(Effects)列出這個程序會影響的任何外部變數、控制項或其它元件。
輸入(Inputs)解釋每一個沒有明顯功能的引數。每一個引數都應該自成一行,同時使用行間註解。
傳回值(Return Values)解釋傳回值的意義。
請記得下列幾個要點:
  • 每一個重要變數的宣告都應該伴隨著一個行間註解來說明變數的功用。
  • 變數、控制項和程序的名稱都應該要令人可以一目了然。行間註解只需要用在一些較複雜的程式細節部分。
  • 在 script 的開頭,您應該包含一段描述整個 script 的概觀,同時列舉物件、程序、演算法、對話方塊以及其它和系統相關的事項。有時用一段虛擬碼來說明演算法可能會有不小的幫助。
格式化您的程式碼
盡可能保留螢幕的空間,但是同時要讓您的程式格式可以反映程式的邏輯結構和巢狀架構。這裡有幾個要點:
  • 標準的巢狀區塊應該用四個空格縮排。
  • 一個程序的概觀註解應該用一個空格縮排。
  • 緊接在概觀註解後的最高層級陳述式應該要用四個空格縮排,其中的巢狀區塊則再用四個空格縮排。下面是一個例子:

 '*********************************************************
 ' Purpose:  Locates the first occurrence of a specified user 
 '           in the UserList array.
 ' Inputs:   strUserList():   the list of users to be searched.
 '           strTargetUser:   the name of the user to search for.
 ' Returns:  The index of the first occurrence of the strTargetUser 
 '           in the strUserList array. 
 '           If the target user is not found, return -1.
 '*********************************************************

 Function intFindUser (strUserList(), strTargetUser)
     Dim i                     ' Loop counter.
     Dim blnFound        ' Target found flag
     intFindUser = -1
     i = 0                     ' Initialize loop counter
     Do While i <= Ubound(strUserList) and Not blnFound
         If strUserList(i) = strTargetUser Then 
             blnFound = True   ' Set flag to True
             intFindUser = i   ' Set return value to loop count
         End If
         i = i + 1             ' Increment loop counter
     Loop
 End Function

沒有留言:

張貼留言