1、"&"替換"+" | 2、變量命名大小寫,語句錯落有秩,源代碼維護方面 |
3、請養成以下的“對象命名約定”良好習慣 | 4、在簡單的選擇條件情況下,使用IIf()函數 |
5、盡量使用Debug.Print進行調試 | 6、在重復對某一對象的屬性進行修改時,盡量使用With....End With |
7、MsgBox中盡量使用消息圖標,這樣程序比較有規范 | 8、在可能的情況下使用枚舉 |
1、"&"替換"+"
在很多人的編程語言中,用“+”來連接字符串,這樣容易導致歧義。良好的習慣是用“&”來連接字符串.
不正確:
Dim sMessage As String
sMessage = "1" + "2"
正確:
Dim sMessage As String
sMessage = "1" & "2"
注意:"&"的后面有個空格
2、變量命名大小寫,語句錯落有秩,源代碼維護方面
下面大家比較一下以下兩段代碼:
讀懂難度很大的代碼:
Dim SNAME As String
Dim NTURN As Integer
If NTURN = 0 Then
If SNAME = "vbeden" Then
Do While NTURN < 4
NTURN = NTURN + 1
Loop
End If
End If
容易讀懂的代碼:
Dim sName As String
Dim nTurn As Integer
If nTurn = 0 Then
If sName = "vbeden" Then
Do While nTurn < 4
nTurn = nTurn + 1
Loop
End If
End If
[返回索引]
3、請養成以下的“對象命名約定”良好習慣
推薦使用的控件前綴 | ||
控件類型 | 前綴 | 例子 |
3D Panel | pnl | pnlGroup |
ADO Data | ado | adoBiblio |
Animated button | ani | aniMailBox |
Check box | chk | chkReadOnly |
Combo box, drop-down list box | cbo | cboEnglish |
Command button | cmd | cmdExit |
Common dialog | dlg | dlgFileOpen |
Communications | com | comFax |
Control (當特定類型未知時,在過程中所使用的) | ctr | ctrCurrent |
Data | dat | datBiblio |
Data-bound combo box | dbcbo | dbcboLanguage |
Data-bound grid | dbgrd | dbgrdQueryResult |
Data-bound list box | dblst | dblstJobType |
Data combo | dbc | dbcAuthor |
Data grid | dgd | dgdTitles |
Data list | dbl | dblPublisher |
Data repeater | drp | drpLocation |
Date picker | dtp | dtpPublished |
Directory list box | dir | dirSource |
Drive list box | drv | drvTarget |
File list box | fil | filSource |
Flat scroll bar | fsb | fsbMove |
Form | frm | frmEntry |
Frame | fra | fraLanguage |
Gauge | gau | gauStatus |
Graph | gra | graRevenue |
Grid | grd | grdPrices |
Hierarchical flexgrid | flex | flexOrders |
Horizontal scroll bar | hsb | hsbVolume |
Image | img | imgIcon |
Image combo | imgcbo | imgcboProduct |
ImageList | ils | ilsAllIcons |
Label | lbl | lblHelpMessage |
Lightweight check box | lwchk | lwchkArchive |
Lightweight combo box | lwcbo | lwcboGerman |
Lightweight command button | lwcmd | lwcmdRemove |
Lightweight frame | lwfra | lwfraSaveOptions |
Lightweight horizontal scroll bar | lwhsb | lwhsbVolume |
Lightweight list box | lwlst | lwlstCostCenters |
Lightweight option button | lwopt | lwoptIncomeLevel |
Lightweight text box | lwtxt | lwoptStreet |
Lightweight vertical scroll bar | lwvsb | lwvsbYear |
Line | lin | linVertical |
List box | lst | lstPolicyCodes |
ListView | lvw | lvwHeadings |
MAPI message | mpm | mpmSentMessage |
MAPI session | mps | mpsSession |
MCI | mci | mciVideo |
Menu | mnu | mnuFileOpen |
Month view | mvw | mvwPeriod |
MS Chart | ch | chSalesbyRegion |
MS Flex grid | msg | msgClients |
MS Tab | mst | mstFirst |
OLE container | ole | oleWorksheet |
Option button | opt | optGender |
Picture box | pic | picVGA |
Picture clip | clp | clpToolbar |
ProgressBar | prg | prgLoadFile |
Remote Data | rd | rdTitles |
RichTextBox | rtf | rtfReport |
Shape | shp | shpCircle |
Slider | sld | sldScale |
Spin | spn | spnPages |
StatusBar | sta | staDateTime |
SysInfo | sys | sysMonitor |
TabStrip | tab | tabOptions |
Text box | txt | txtLastName |
Timer | tmr | tmrAlarm |
Toolbar | tlb | tlbActions |
TreeView | tre | treOrganization |
UpDown | upd | updDirection |
Vertical scroll bar | vsb | vsbRate |
推薦使用的數據訪問對象 (DAO) 的前綴 用下列前綴來指示數據訪問對象 | ||
數據庫對象 | 前綴 | 例子 |
Container | con | conReports |
Database | db | dbAccounts |
DBEngine | dbe | dbeJet |
Document | doc | docSalesReport |
Field | fld | fldAddress |
Group | grp | grpFinance |
Index | ix | idxAge |
Parameter | prm | prmJobCode |
QueryDef | qry | qrySalesByRegion |
Recordset | rec | recForecast |
Relation | rel | relEmployeeDept |
TableDef | tbd | tbdCustomers |
User | usr | usrNew |
Workspace | wsp | wspMine |
應用程序頻繁使用許多菜單控件,對于這些控件具備一組唯一的命名約定很實用。除了最前面 "mnu" 標記以外,菜單控件的前綴應該被擴展:對每一級嵌套增加一個附加前綴,將最終的菜單的標題放在名稱字符串的最后。下表列出了一些例子。
推薦使用的菜單前綴 | |
菜單標題序列 | 菜單處理器名稱 |
File Open | mnuFileOpen |
File Send Email | mnuFileSendEmail |
File Send Fax | mnuFileSendFax |
Format Character | mnuFormatCharacter |
Help Contents | mnuHelpContents |
當使用這種命名約定時,一個特定的菜單組的所有成員一個接一個地列在 Visual Basic 的“屬性”窗口中。而且,菜單控件的名字清楚地表示出它們所屬的菜單項。
為其它控件選擇前綴
對于上面沒有列出的控件,應該用唯一的由兩個或三個字符組成的前綴使它們標準化,以保持一致性。只有當需要澄清時,才使用多于三個字符的前綴。
除了對象之外,常量和變量也需要良好格式的命名約定。本節列出了 Visual Basic 支持的常量和變量的推薦約定。并且討論標識數據類型和范圍的問題。
變量應該總是被定義在盡可能小的范圍內。全局 (Public) 變量可以導致極其復雜的狀態機構,并且使一個應用程序的邏輯非常難于理解。全局變量也使代碼的重用和維護更加困難。
Visual Basic 中的變量可以有下列范圍 | ||
范圍 | 聲明位置 | 可見位置 |
過程級 | 過程,子過程或函數過程中的 ‘Private’ | 在聲明它的過程中 |
模塊級 | 窗體或代碼模塊(.frm、.bas )的聲明部分中的 ‘Private’ | 窗體或代碼模塊中的每一個過程 |
全局 | 代碼模塊(.bas)的聲明部分中的 ‘Public’ | 應用程序中的每一處 |
在 Visual Basic 的應用程序中,只有當沒有其它方便途徑在窗體之間共享數據時才使用全局變量。當必須使用全局變量時,在一個單一模塊中聲明它們,并按功能分組。給這個模塊取一個有意義的名稱,以指明它的作用,如 Public.bas。
較好的編碼習慣是盡可能寫模塊化的代碼。例如,如果應用程序顯示一個對話框,就把要完成這一對話任務所需要的所有控件和代碼放在單一的窗體中。這有助于將應用程序的代碼組織在有用的組件中,并減小它運行時的開銷。
除了全局變量(應該是不被傳遞的),過程和函數應該僅對傳遞給它們的對象操作。在過程中使用的全局變量應該在過程起始處的聲明部分中標識出來。此外,應該用 ByVal 將參數傳遞給 Sub 過程及 function 過程,除非明顯地需要改變已傳遞的參數值。
隨著工程大小的增長,劃分變量范圍的工作也迅速增加。在類型前綴的前面放置單字母范圍前綴標明了這種增長,但變量名的長度并沒有增加很多。
變量范圍前綴 | ||
范圍 | 前綴 | 例子 |
全局 | g | gstrUserName |
模塊級 | m | mblnCalcInProgress |
本地到過程 | 無 | dblVelocity |
如果一個變量在標準模塊或窗體模塊中被聲明為 Public,那么該變量具有全局范圍。如果一個變量在標準模塊或窗體模塊中被分別聲明為 Private,那么該變量有模塊級范圍。
注意:
一致性是卓有成效地使用這種技術的關鍵;Visual Basic
中的語法檢查器不會捕捉以"p."
開頭的模塊級變量。
常量
常量名的主體是大小寫混合的,每個單詞的首字母大寫。盡管標準 Visual Basic 常量不包含數據類型和范圍信息,但是象 i、s、g 和 m 這樣的前綴對于理解一個常量的值和范圍還是很有用的。對于常量名,應遵循與變量相同的規則。例如:
mintUserListMax '
對用戶列表的最大限制'(
整數值,本地到模塊)
gstrNewLine '
新行字符'(
字符串,應用程序全局使用)
變量
聲明所有的變量將會節省編程時間,因為鍵入操作引起的錯誤減少了(例如,究竟是 aUserNameTmp,還是 sUserNameTmp,還是 sUserNameTemp)。在“選項”對話框的“編輯器”標簽中,復選“要求變量聲明”選項。Option Explicit 語句要求在 Visual Basic 程序中聲明所有的變量。
應該給變量加前綴來指明它們的數據類型。而且前綴可以被擴展,用來指明變量范圍,特別是對大型程序。
用下列前綴來指明一個變量的數據類型。
變量數據類型 | ||
數據類型 | 前綴 | 例子 |
String (字符串類型) | str | strFName |
Integer (短整數類型) | int | intQuantity |
Long (長整數類型) | lng | lngDistance |
Single (單精度浮點數類型) | sng | sngAverage |
Double (雙精度浮點數類型) | dbl | dblTolerance |
Boolean (布爾類型) | bln | blnFound |
Byte (字節類型) | byt | bytRasterData |
Date (日期類型) | dte | dteNow |
Currency (貨幣計算與定點計算類型) | cur | curRevenue |
Object (對象類型) | obj | objCurrent |
Variant (變體類型) | vnt | vntCheckSum |
描述變量和過程名
變量或過程名的主體應該使用大小寫混合形式,并且應該足夠長以描述它的作用。而且,函數名應該以一個動詞起首,如 InitNameArray 或 CloseDialog。
對于頻繁使用的或長的項,推薦使用標準縮略語以使名稱的長度合理化。一般來說,超過 32 個字符的變量名在 VGA 顯示器上讀起來就困難了。
當使用縮略語時,要確保它們在整個應用程序中的一致性。在一個工程中,如果一會兒使用 Cnt, 一會兒使用 Count,將導致不必要的混淆。
用戶定義的類型
在一項有許多用戶定義類型的大工程中,常常有必要給每種類型一個它自己的三個字符的前綴。如果這些前綴是以 "u" 開始的,那么當用一個用戶定義類型來工作時,快速識別這些類型是很容易的。例如,ucli 可以被用來作為一個用戶定義的客戶類型變量的前綴。
[返回索引]
4、在簡單的選擇條件情況下,使用IIf()函數
羅索的代碼:
If nNum = 0 Then
sName = "sancy"
Else
sName = "Xu"
End If
簡單的代碼:
sName=IIf(nNum=0,"sancy","Xu")
5、盡量使用Debug.Print進行調試
在很多初學者的調試中,用MsgBox來跟蹤變量值.其實用Debug.Print不僅可以達到同樣的功效,而且在程序最后編譯過程中,會被忽略.而MsgBox必須手動注釋或刪除.
通常:
MsgBox nName
應該:
Debug.Print nName
6、在重復對某一對象的屬性進行修改時,盡量使用With....End With
通常:
Form1.Height = 5000
Form1.Width = 6000
Form1.Caption = "This is MyLabel"
應該:
With Form1
.Height = 5000
.Width = 6000
.Caption = "This is MyLabel"
End With
這種結構程序執行效率比較高,特別在循環語句里。
7、MsgBox中盡量使用消息圖標,這樣程序比較有規范
一般來說
vbInformation 用來提示確認或成功操作的消息
vbExclamation 用來提示警告的消息
vbCritical 用來提示危機情況的消息
vbQuestion 用來提示詢問的消息
[返回索引]
8、在可能的情況下使用枚舉
枚舉的格式為
[Public | Private] Enum name
membername [= constantexpression]
membername [= constantexpression]
....
End Enum
Enum 語句包含下面部分:
部分 | 描述 |
Public | 可選的。表示該 Enum 類型在整個工程中都是可見的。Enum 類型的缺省情況是 Public。 |
Private | 可選的。表示該 Enum 類型只在所聲明的模塊中是可見的。 |
name | 必需的。該 Enum 類型的名稱。name 必須是一個合法的 Visual Basic 標識符,在定義該 Enum 類型的變量或參數時用該名稱來指定類型。 |
membername | 必需的。用于指定該 Enum 類型的組成元素名稱的合法 Visual Basic 標識符。 |
constantexpression | 可選的。元素的值(為 Long 類型)。可以是別的 Enum 類型。如果沒有指定 constantexpression,則所賦給的值或者是 0(如果該元素是第一個 membername),或者比其直接前驅的值大 1。 |
說明
所謂枚舉變量,就是指用 Enum 類型定義的變量。變量和參數都可以定義為 Enum 類型。Enum 類型中的元素被初始化為 Enum 語句中指定的常數值。所賦給的值可以包括正數和負數,且在運行時不能改變。例如:
Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum
Enum 語句只能在模塊級別中出現。定義 Enum 類型后,就可以用它來定義變量,參數或返回該類型的過程。不能用模塊名來限定 Enum 類型。類模塊中的 Public Enum 類型并不是該類的成員;只不過它們也被寫入到類型庫中。在標準模塊中定義的 Enum 類型則不寫到類型庫中。具有相同名字的 Public Enum 類型不能既在標準模塊中定義,又在類模塊中定義,因為它們共享相同的命名空間。若不同的類型庫中有兩個 Enum 類型的名字相同,但成員不同,則對這種類型的變量的引用,將取決于哪一個類型庫具有更高的引用優先級。
不能在 With 塊中使用 Enum 類型作為目標。
Enum 語句示例
下面的示例演示用 Enum 語句定義一個命名常數的集合。在本例中是一些可以選擇的顏色常數用于設計數據庫的數據輸入窗體。
Public Enum InterfaceColors
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFBF00&
icSpringGreen = &H7FFF00&
icForestGreen = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
End Enum
好處是加快編程速度
|
新聞熱點
疑難解答