VB编程的八个优良习惯第1/2页
使用“&”替代“+”进行字符串拼接可避免类型歧义;变量命名应遵循语义化原则并注意大小写与缩进;控件和对象采用统一前缀命名,如cmd、txt等;变量应定义在最小作用域内,避免滥用全局变量,并提倡模块化代码组织。这些习惯能显著提升代码的可读性与维护性。
在VB的世界里摸爬滚打久了,你会发现很多所谓的“技巧”,其实最后都沉淀为一些最基本、最不起眼的习惯。这些习惯看似简单,却直接决定了代码的可读性、维护性,甚至是你自己的编码效率。今天,我们就来聊聊八个值得养成的VB编程习惯。
先列出几个核心判断:用对连接符、规范命名、善用内置函数、以及结构化的代码组织——这些都不是什么高深莫测的学问,但真正做到位了,写的代码会让人感觉判若两人。
1. “&”替换“+”
很多开发者习惯用“+”来拼接字符串,这其实是个不小的隐患。问题在于,“+”在VB中同时承担着算术加法和字符串连接的双重角色,容易引发类型歧义和运行时错误。真正的好习惯是什么?用“&”。理由很简单:专职专用。“&”就是为字符串连接而生的操作符,它会让你的意图更加明确。
不推荐:
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
差别在哪里?核心有两处:一是变量命名遵循了语义化原则(sName、nTurn),一看就知道是什么;二是代码缩进层次清晰,逻辑嵌套一目了然。这样的代码,几个月后你自己回头看,也不会觉得陌生。
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(例:lwfraSa veOptions)
- 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的“属性”窗口中,同一菜单组的所有成员会整齐地排列在一起,一目了然。
常量和变量命名约定:
变量应该始终被定义在尽可能小的范围内。全局变量容易导致状态复杂,逻辑混乱,也让代码的重用和维护变得更加困难。在VB中,变量可以有以下范围:
- 过程级:在过程、子过程或函数过程中用‘Private’声明,只在声明它的过程中可见。
- 模块级:在窗体或代码模块的声明部分用‘Private’声明,在模块内的每一个过程中可见。
- 全局:在代码模块的声明部分用‘Public’声明,在整个应用程序中可见。
在VB应用程序中,只有当没有其他方便途径在窗体之间共享数据时,才考虑使用全局变量。如果必须使用,建议在一个单一模块中声明它们,并按功能分组,给这个模块取一个有意义的名称,比如Public.bas。
还有一个好习惯:尽可能写模块化的代码。比如,如果应用程序需要显示一个对话框,就把完成这一任务所需的所有控件和代码放在单一的窗体中。这样有助于将代码组织成有用的组件,同时减小运行时的开销。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















