1、"&"替換"+" | 2、變量命名大小寫,語(yǔ)句錯(cuò)落有秩,源代碼維護(hù)方面 |
3、請(qǐng)養(yǎng)成以下的“對(duì)象命名約定”良好習(xí)慣 | 4、在簡(jiǎn)單的選擇條件情況下,使用IIf()函數(shù) |
5、盡量使用Debug.Print進(jìn)行調(diào)試 | 6、在重復(fù)對(duì)某一對(duì)象的屬性進(jìn)行修改時(shí),盡量使用With....End With |
7、MsgBox中盡量使用消息圖標(biāo),這樣程序比較有規(guī)范 | 8、在可能的情況下使用枚舉 |
1、"&"替換"+"
在很多人的編程語(yǔ)言中,用“+”來(lái)連接字符串,這樣容易導(dǎo)致歧義。良好的習(xí)慣是用“&”來(lái)連接字符串.
不正確:
Dim sMessage As String
sMessage = "1" + "2"
正確:
Dim sMessage As String
sMessage = "1" & "2"
注意:"&"的后面有個(gè)空格
2、變量命名大小寫,語(yǔ)句錯(cuò)落有秩,源代碼維護(hù)方面
下面大家比較一下以下兩段代碼:
讀懂難度很大的代碼:
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、請(qǐng)養(yǎng)成以下的“對(duì)象命名約定”良好習(xí)慣
推薦使用的控件前綴 | ||
控件類型 | 前綴 | 例子 |
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 (當(dāng)特定類型未知時(shí),在過(guò)程中所使用的) | 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 |
推薦使用的數(shù)據(jù)訪問(wèn)對(duì)象 (DAO) 的前綴 用下列前綴來(lái)指示數(shù)據(jù)訪問(wèn)對(duì)象 | ||
數(shù)據(jù)庫(kù)對(duì)象 | 前綴 | 例子 |
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 |
應(yīng)用程序頻繁使用許多菜單控件,對(duì)于這些控件具備一組唯一的命名約定很實(shí)用。除了最前面 "mnu" 標(biāo)記以外,菜單控件的前綴應(yīng)該被擴(kuò)展:對(duì)每一級(jí)嵌套增加一個(gè)附加前綴,將最終的菜單的標(biāo)題放在名稱字符串的最后。下表列出了一些例子。
推薦使用的菜單前綴 | |
菜單標(biāo)題序列 | 菜單處理器名稱 |
File Open | mnuFileOpen |
File Send Email | mnuFileSendEmail |
File Send Fax | mnuFileSendFax |
Format Character | mnuFormatCharacter |
Help Contents | mnuHelpContents |
當(dāng)使用這種命名約定時(shí),一個(gè)特定的菜單組的所有成員一個(gè)接一個(gè)地列在 Visual Basic 的“屬性”窗口中。而且,菜單控件的名字清楚地表示出它們所屬的菜單項(xiàng)。
為其它控件選擇前綴
對(duì)于上面沒(méi)有列出的控件,應(yīng)該用唯一的由兩個(gè)或三個(gè)字符組成的前綴使它們標(biāo)準(zhǔn)化,以保持一致性。只有當(dāng)需要澄清時(shí),才使用多于三個(gè)字符的前綴。
除了對(duì)象之外,常量和變量也需要良好格式的命名約定。本節(jié)列出了 Visual Basic 支持的常量和變量的推薦約定。并且討論標(biāo)識(shí)數(shù)據(jù)類型和范圍的問(wèn)題。
變量應(yīng)該總是被定義在盡可能小的范圍內(nèi)。全局 (Public) 變量可以導(dǎo)致極其復(fù)雜的狀態(tài)機(jī)構(gòu),并且使一個(gè)應(yīng)用程序的邏輯非常難于理解。全局變量也使代碼的重用和維護(hù)更加困難。
Visual Basic 中的變量可以有下列范圍 | ||
范圍 | 聲明位置 | 可見位置 |
過(guò)程級(jí) | 過(guò)程,子過(guò)程或函數(shù)過(guò)程中的 ‘Private’ | 在聲明它的過(guò)程中 |
模塊級(jí) | 窗體或代碼模塊(.frm、.bas )的聲明部分中的 ‘Private’ | 窗體或代碼模塊中的每一個(gè)過(guò)程 |
全局 | 代碼模塊(.bas)的聲明部分中的 ‘Public’ | 應(yīng)用程序中的每一處 |
在 Visual Basic 的應(yīng)用程序中,只有當(dāng)沒(méi)有其它方便途徑在窗體之間共享數(shù)據(jù)時(shí)才使用全局變量。當(dāng)必須使用全局變量時(shí),在一個(gè)單一模塊中聲明它們,并按功能分組。給這個(gè)模塊取一個(gè)有意義的名稱,以指明它的作用,如 Public.bas。
較好的編碼習(xí)慣是盡可能寫模塊化的代碼。例如,如果應(yīng)用程序顯示一個(gè)對(duì)話框,就把要完成這一對(duì)話任務(wù)所需要的所有控件和代碼放在單一的窗體中。這有助于將應(yīng)用程序的代碼組織在有用的組件中,并減小它運(yùn)行時(shí)的開銷。
除了全局變量(應(yīng)該是不被傳遞的),過(guò)程和函數(shù)應(yīng)該僅對(duì)傳遞給它們的對(duì)象操作。在過(guò)程中使用的全局變量應(yīng)該在過(guò)程起始處的聲明部分中標(biāo)識(shí)出來(lái)。此外,應(yīng)該用 ByVal 將參數(shù)傳遞給 Sub 過(guò)程及 function 過(guò)程,除非明顯地需要改變已傳遞的參數(shù)值。
隨著工程大小的增長(zhǎng),劃分變量范圍的工作也迅速增加。在類型前綴的前面放置單字母范圍前綴標(biāo)明了這種增長(zhǎng),但變量名的長(zhǎng)度并沒(méi)有增加很多。
變量范圍前綴 | ||
范圍 | 前綴 | 例子 |
全局 | g | gstrUserName |
模塊級(jí) | m | mblnCalcInProgress |
本地到過(guò)程 | 無(wú) | dblVelocity |
如果一個(gè)變量在標(biāo)準(zhǔn)模塊或窗體模塊中被聲明為 Public,那么該變量具有全局范圍。如果一個(gè)變量在標(biāo)準(zhǔn)模塊或窗體模塊中被分別聲明為 Private,那么該變量有模塊級(jí)范圍。
注意:
一致性是卓有成效地使用這種技術(shù)的關(guān)鍵;Visual Basic
中的語(yǔ)法檢查器不會(huì)捕捉以"p."
開頭的模塊級(jí)變量。
常量
常量名的主體是大小寫混合的,每個(gè)單詞的首字母大寫。盡管標(biāo)準(zhǔn) Visual Basic 常量不包含數(shù)據(jù)類型和范圍信息,但是象 i、s、g 和 m 這樣的前綴對(duì)于理解一個(gè)常量的值和范圍還是很有用的。對(duì)于常量名,應(yīng)遵循與變量相同的規(guī)則。例如:
mintUserListMax '
對(duì)用戶列表的最大限制'(
整數(shù)值,本地到模塊)
gstrNewLine '
新行字符'(
字符串,應(yīng)用程序全局使用)
變量
聲明所有的變量將會(huì)節(jié)省編程時(shí)間,因?yàn)殒I入操作引起的錯(cuò)誤減少了(例如,究竟是 aUserNameTmp,還是 sUserNameTmp,還是 sUserNameTemp)。在“選項(xiàng)”對(duì)話框的“編輯器”標(biāo)簽中,復(fù)選“要求變量聲明”選項(xiàng)。Option Explicit 語(yǔ)句要求在 Visual Basic 程序中聲明所有的變量。
應(yīng)該給變量加前綴來(lái)指明它們的數(shù)據(jù)類型。而且前綴可以被擴(kuò)展,用來(lái)指明變量范圍,特別是對(duì)大型程序。
用下列前綴來(lái)指明一個(gè)變量的數(shù)據(jù)類型。
變量數(shù)據(jù)類型 | ||
數(shù)據(jù)類型 | 前綴 | 例子 |
String (字符串類型) | str | strFName |
Integer (短整數(shù)類型) | int | intQuantity |
Long (長(zhǎng)整數(shù)類型) | lng | lngDistance |
Single (單精度浮點(diǎn)數(shù)類型) | sng | sngAverage |
Double (雙精度浮點(diǎn)數(shù)類型) | dbl | dblTolerance |
Boolean (布爾類型) | bln | blnFound |
Byte (字節(jié)類型) | byt | bytRasterData |
Date (日期類型) | dte | dteNow |
Currency (貨幣計(jì)算與定點(diǎn)計(jì)算類型) | cur | curRevenue |
Object (對(duì)象類型) | obj | objCurrent |
Variant (變體類型) | vnt | vntCheckSum |
描述變量和過(guò)程名
變量或過(guò)程名的主體應(yīng)該使用大小寫混合形式,并且應(yīng)該足夠長(zhǎng)以描述它的作用。而且,函數(shù)名應(yīng)該以一個(gè)動(dòng)詞起首,如 InitNameArray 或 CloseDialog。
對(duì)于頻繁使用的或長(zhǎng)的項(xiàng),推薦使用標(biāo)準(zhǔn)縮略語(yǔ)以使名稱的長(zhǎng)度合理化。一般來(lái)說(shuō),超過(guò) 32 個(gè)字符的變量名在 VGA 顯示器上讀起來(lái)就困難了。
當(dāng)使用縮略語(yǔ)時(shí),要確保它們?cè)谡麄€(gè)應(yīng)用程序中的一致性。在一個(gè)工程中,如果一會(huì)兒使用 Cnt, 一會(huì)兒使用 Count,將導(dǎo)致不必要的混淆。
用戶定義的類型
在一項(xiàng)有許多用戶定義類型的大工程中,常常有必要給每種類型一個(gè)它自己的三個(gè)字符的前綴。如果這些前綴是以 "u" 開始的,那么當(dāng)用一個(gè)用戶定義類型來(lái)工作時(shí),快速識(shí)別這些類型是很容易的。例如,ucli 可以被用來(lái)作為一個(gè)用戶定義的客戶類型變量的前綴。
[返回索引]
4、在簡(jiǎn)單的選擇條件情況下,使用IIf()函數(shù)
羅索的代碼:
If nNum = 0 Then
sName = "sancy"
Else
sName = "Xu"
End If
簡(jiǎn)單的代碼:
sName=IIf(nNum=0,"sancy","Xu")
5、盡量使用Debug.Print進(jìn)行調(diào)試
在很多初學(xué)者的調(diào)試中,用MsgBox來(lái)跟蹤變量值.其實(shí)用Debug.Print不僅可以達(dá)到同樣的功效,而且在程序最后編譯過(guò)程中,會(huì)被忽略.而MsgBox必須手動(dòng)注釋或刪除.
通常:
MsgBox nName
應(yīng)該:
Debug.Print nName
6、在重復(fù)對(duì)某一對(duì)象的屬性進(jìn)行修改時(shí),盡量使用With....End With
通常:
Form1.Height = 5000
Form1.Width = 6000
Form1.Caption = "This is MyLabel"
應(yīng)該:
With Form1
.Height = 5000
.Width = 6000
.Caption = "This is MyLabel"
End With
這種結(jié)構(gòu)程序執(zhí)行效率比較高,特別在循環(huán)語(yǔ)句里。
7、MsgBox中盡量使用消息圖標(biāo),這樣程序比較有規(guī)范
一般來(lái)說(shuō)
vbInformation 用來(lái)提示確認(rèn)或成功操作的消息
vbExclamation 用來(lái)提示警告的消息
vbCritical 用來(lái)提示危機(jī)情況的消息
vbQuestion 用來(lái)提示詢問(wèn)的消息
[返回索引]
8、在可能的情況下使用枚舉
枚舉的格式為
[Public | Private] Enum name
membername [= constantexpression]
membername [= constantexpression]
....
End Enum
Enum 語(yǔ)句包含下面部分:
部分 | 描述 |
Public | 可選的。表示該 Enum 類型在整個(gè)工程中都是可見的。Enum 類型的缺省情況是 Public。 |
Private | 可選的。表示該 Enum 類型只在所聲明的模塊中是可見的。 |
name | 必需的。該 Enum 類型的名稱。name 必須是一個(gè)合法的 Visual Basic 標(biāo)識(shí)符,在定義該 Enum 類型的變量或參數(shù)時(shí)用該名稱來(lái)指定類型。 |
membername | 必需的。用于指定該 Enum 類型的組成元素名稱的合法 Visual Basic 標(biāo)識(shí)符。 |
constantexpression | 可選的。元素的值(為 Long 類型)。可以是別的 Enum 類型。如果沒(méi)有指定 constantexpression,則所賦給的值或者是 0(如果該元素是第一個(gè) membername),或者比其直接前驅(qū)的值大 1。 |
說(shuō)明
所謂枚舉變量,就是指用 Enum 類型定義的變量。變量和參數(shù)都可以定義為 Enum 類型。Enum 類型中的元素被初始化為 Enum 語(yǔ)句中指定的常數(shù)值。所賦給的值可以包括正數(shù)和負(fù)數(shù),且在運(yùn)行時(shí)不能改變。例如:
Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum
Enum 語(yǔ)句只能在模塊級(jí)別中出現(xiàn)。定義 Enum 類型后,就可以用它來(lái)定義變量,參數(shù)或返回該類型的過(guò)程。不能用模塊名來(lái)限定 Enum 類型。類模塊中的 Public Enum 類型并不是該類的成員;只不過(guò)它們也被寫入到類型庫(kù)中。在標(biāo)準(zhǔn)模塊中定義的 Enum 類型則不寫到類型庫(kù)中。具有相同名字的 Public Enum 類型不能既在標(biāo)準(zhǔn)模塊中定義,又在類模塊中定義,因?yàn)樗鼈児蚕硐嗤拿臻g。若不同的類型庫(kù)中有兩個(gè) Enum 類型的名字相同,但成員不同,則對(duì)這種類型的變量的引用,將取決于哪一個(gè)類型庫(kù)具有更高的引用優(yōu)先級(jí)。
不能在 With 塊中使用 Enum 類型作為目標(biāo)。
Enum 語(yǔ)句示例
下面的示例演示用 Enum 語(yǔ)句定義一個(gè)命名常數(shù)的集合。在本例中是一些可以選擇的顏色常數(shù)用于設(shè)計(jì)數(shù)據(jù)庫(kù)的數(shù)據(jù)輸入窗體。
Public Enum InterfaceColors
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFBF00&
icSpringGreen = &H7FFF00&
icForestGreen = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
End Enum
好處是加快編程速度
新聞熱點(diǎn)
疑難解答