| 1、"&"替換"+" | 2、變量命名大小寫(xiě),語(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、變量命名大小寫(xiě),語(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í)慣
推薦使用的控件前綴 | ||
| 控件類(lèi)型 | 前綴 | 例子 |
| 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)特定類(lèi)型未知時(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ù)訪(fǎng)問(wèn)對(duì)象 (DAO) 的前綴 用下列前綴來(lái)指示數(shù)據(jù)訪(fǎng)問(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)題放在名稱(chēng)字符串的最后。下表列出了一些例子。
| 推薦使用的菜單前綴 | |
| 菜單標(biāo)題序列 | 菜單處理器名稱(chēng) |
| 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ù)類(lèi)型和范圍的問(wèn)題。
變量應(yīng)該總是被定義在盡可能小的范圍內(nèi)。全局 (Public) 變量可以導(dǎo)致極其復(fù)雜的狀態(tài)機(jī)構(gòu),并且使一個(gè)應(yīng)用程序的邏輯非常難于理解。全局變量也使代碼的重用和維護(hù)更加困難。
Visual Basic 中的變量可以有下列范圍 | ||
| 范圍 | 聲明位置 | 可見(jiàn)位置 |
| 過(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è)有意義的名稱(chēng),以指明它的作用,如 Public.bas。
較好的編碼習(xí)慣是盡可能寫(xiě)模塊化的代碼。例如,如果應(yīng)用程序顯示一個(gè)對(duì)話(huà)框,就把要完成這一對(duì)話(huà)任務(wù)所需要的所有控件和代碼放在單一的窗體中。這有助于將應(yīng)用程序的代碼組織在有用的組件中,并減小它運(yùn)行時(shí)的開(kāi)銷(xiāo)。
除了全局變量(應(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),劃分變量范圍的工作也迅速增加。在類(lèi)型前綴的前面放置單字母范圍前綴標(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."開(kāi)頭的模塊級(jí)變量。
常量
常量名的主體是大小寫(xiě)混合的,每個(gè)單詞的首字母大寫(xiě)。盡管標(biāo)準(zhǔn) Visual Basic 常量不包含數(shù)據(jù)類(lèi)型和范圍信息,但是象 i、s、g 和 m 這樣的前綴對(duì)于理解一個(gè)常量的值和范圍還是很有用的。對(duì)于常量名,應(yīng)遵循與變量相同的規(guī)則。例如:
mintUserListMax '對(duì)用戶(hù)列表的最大限制'(整數(shù)值,本地到模塊)gstrNewLine '新行字符'(字符串,應(yīng)用程序全局使用)
變量
聲明所有的變量將會(huì)節(jié)省編程時(shí)間,因?yàn)殒I入操作引起的錯(cuò)誤減少了(例如,究竟是 aUserNameTmp,還是 sUserNameTmp,還是 sUserNameTemp)。在“選項(xiàng)”對(duì)話(huà)框的“編輯器”標(biāo)簽中,復(fù)選“要求變量聲明”選項(xiàng)。Option Explicit 語(yǔ)句要求在 Visual Basic 程序中聲明所有的變量。
應(yīng)該給變量加前綴來(lái)指明它們的數(shù)據(jù)類(lèi)型。而且前綴可以被擴(kuò)展,用來(lái)指明變量范圍,特別是對(duì)大型程序。
用下列前綴來(lái)指明一個(gè)變量的數(shù)據(jù)類(lèi)型。
變量數(shù)據(jù)類(lèi)型 | ||
| 數(shù)據(jù)類(lèi)型 | 前綴 | 例子 |
| String (字符串類(lèi)型) | str | strFName |
| Integer (短整數(shù)類(lèi)型) | int | intQuantity |
| Long (長(zhǎng)整數(shù)類(lèi)型) | lng | lngDistance |
| Single (單精度浮點(diǎn)數(shù)類(lèi)型) | sng | sngAverage |
| Double (雙精度浮點(diǎn)數(shù)類(lèi)型) | dbl | dblTolerance |
| Boolean (布爾類(lèi)型) | bln | blnFound |
| Byte (字節(jié)類(lèi)型) | byt | bytRasterData |
| Date (日期類(lèi)型) | dte | dteNow |
| Currency (貨幣計(jì)算與定點(diǎn)計(jì)算類(lèi)型) | cur | curRevenue |
| Object (對(duì)象類(lèi)型) | obj | objCurrent |
| Variant (變體類(lèi)型) | vnt | vntCheckSum |
描述變量和過(guò)程名
變量或過(guò)程名的主體應(yīng)該使用大小寫(xiě)混合形式,并且應(yīng)該足夠長(zhǎng)以描述它的作用。而且,函數(shù)名應(yīng)該以一個(gè)動(dòng)詞起首,如 InitNameArray 或 CloseDialog。
對(duì)于頻繁使用的或長(zhǎng)的項(xiàng),推薦使用標(biāo)準(zhǔn)縮略語(yǔ)以使名稱(chēng)的長(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)致不必要的混淆。
用戶(hù)定義的類(lèi)型
在一項(xiàng)有許多用戶(hù)定義類(lèi)型的大工程中,常常有必要給每種類(lèi)型一個(gè)它自己的三個(gè)字符的前綴。如果這些前綴是以 "u" 開(kāi)始的,那么當(dāng)用一個(gè)用戶(hù)定義類(lèi)型來(lái)工作時(shí),快速識(shí)別這些類(lèi)型是很容易的。例如,ucli 可以被用來(lái)作為一個(gè)用戶(hù)定義的客戶(hù)類(lèi)型變量的前綴。
[返回索引]
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)提示詢(xún)問(wèn)的消息
[返回索引]
8、在可能的情況下使用枚舉
枚舉的格式為
[Public | Private] Enum name
membername [= constantexpression]
membername [= constantexpression]
....
End Enum
Enum 語(yǔ)句包含下面部分:
| 部分 | 描述 |
| Public | 可選的。表示該 Enum 類(lèi)型在整個(gè)工程中都是可見(jiàn)的。Enum 類(lèi)型的缺省情況是 Public。 |
| Private | 可選的。表示該 Enum 類(lèi)型只在所聲明的模塊中是可見(jiàn)的。 |
| name | 必需的。該 Enum 類(lèi)型的名稱(chēng)。name 必須是一個(gè)合法的 Visual Basic 標(biāo)識(shí)符,在定義該 Enum 類(lèi)型的變量或參數(shù)時(shí)用該名稱(chēng)來(lái)指定類(lèi)型。 |
| membername | 必需的。用于指定該 Enum 類(lèi)型的組成元素名稱(chēng)的合法 Visual Basic 標(biāo)識(shí)符。 |
| constantexpression | 可選的。元素的值(為 Long 類(lèi)型)。可以是別的 Enum 類(lèi)型。如果沒(méi)有指定 constantexpression,則所賦給的值或者是 0(如果該元素是第一個(gè) membername),或者比其直接前驅(qū)的值大 1。 |
說(shuō)明
所謂枚舉變量,就是指用 Enum 類(lèi)型定義的變量。變量和參數(shù)都可以定義為 Enum 類(lèi)型。Enum 類(lèi)型中的元素被初始化為 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)型后,就可以用它來(lái)定義變量,參數(shù)或返回該類(lèi)型的過(guò)程。不能用模塊名來(lái)限定 Enum 類(lèi)型。類(lèi)模塊中的 Public Enum 類(lèi)型并不是該類(lèi)的成員;只不過(guò)它們也被寫(xiě)入到類(lèi)型庫(kù)中。在標(biāo)準(zhǔn)模塊中定義的 Enum 類(lèi)型則不寫(xiě)到類(lèi)型庫(kù)中。具有相同名字的 Public Enum 類(lèi)型不能既在標(biāo)準(zhǔn)模塊中定義,又在類(lèi)模塊中定義,因?yàn)樗鼈児蚕硐嗤拿臻g。若不同的類(lèi)型庫(kù)中有兩個(gè) Enum 類(lèi)型的名字相同,但成員不同,則對(duì)這種類(lèi)型的變量的引用,將取決于哪一個(gè)類(lèi)型庫(kù)具有更高的引用優(yōu)先級(jí)。
不能在 With 塊中使用 Enum 類(lèi)型作為目標(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)
疑難解答