| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:[转]很好的一篇文章
只看楼主 加入收藏
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
结帖率:100%
收藏
 问题点数:0 回复次数:2 
[转]很好的一篇文章
大师为一帮初学者讲解VB之道。
初学者问道:“VB很容易学习吗?”
大师答道:“是的。”
初学者问道:“VB的结构很简单吗?”
大师答道:“是的。”
初学者又问道:“VB程序很慢吗?”
大师轻轻咳嗽了一下:“呃,今天就讲到这里吧。”

内篇

1、 大师如是说:“人如果明确自己的位置,就可以避免不必要的烦恼;变量如果明确自己的类型,就可以避免不必要的错误。”
2、 大师去参观另一个高手的程序,对每一个变量和控件都仔细地请教别人。高手的弟子们在一旁议论:“谁说大师懂得VB之道呢?”
大师回答:“我这样做本身就符合VB之道。”
3、 大师如是说:“除非必要,不要使用非 Intel 处理器;除非必要,不要使用非整型变量。”
4、 一个单机编程者向大师请教如何使程序更小和更快。
大师回答:“有一种树,在地下的部分是地上部分的三倍,庞大的树根为树吸取养料;程序也应该利用这种根系。”
单机编程者问:“那么,怎样做到呢?”
大师回答:“利用32位抢先任务处理,将程序分解到许多个ActiveX部件中;使用远程自动化,让远程处理器承担多数进程。使你的程序完全没有事情可做,这就是VB的最高境界。”
单机编程者说:“这是我无法达到的呵!”
5、 大师如是说:“永远不要进行字符串复制。”
6、 大师和弟子们去自助餐,有经验的弟子直接奔向最喜欢的餐位,一般的弟子在按照餐位的标牌行动,而没有经验的弟子则兴奋得四处乱窜。
大师说:“对于文件输入输出操作,不也是这样吗:优秀的程序员使用二进制访问,一般的程序员使用文本访问方式,蹩脚的程序员使用随机访问方式。”
7、 大师如是说:“多次使用的签名应该做成印章;多次使用的操作应该编制宏;多次使用的属性应该放入变量。”
8、 两个程序员为应该采用集合还是数组争论不已。
其中一个程序员找到大师:“集合不好吗?我可以准确地定位其中任何一个成员。”
大师回答:“你是正确的。”
另一个程序员也找到大师:“数组不好吗?我可以对其进行顺序访问。”
大师回答:“你是正确的。”
前一个程序员听说了,和另一个程序员一起来找大师:“我们俩到底谁是对的?”
大师回答:“你们是正确的。”
两个程序员对别人说:“谁说大师有学问呢?”

外篇

1、 在大师手下学习的一个新手编制了一个大型程序,兴奋地请大师看。当程序启动之后,开始进行无法想象的复杂的初始化,整个系统为之凝滞,其间没有任何提示指出正在干什么,也没有任何措施允许用户取消该过程。令人尴尬的十几分钟过去后,程序界面终于出现在屏幕上--原来是记事本程序的加强版。
大师回过头去对大家说:“这就是所谓新手呵。”
2、 大师如是说:“吸引蜜蜂的果树绽开花朵;遭到袭击的乌贼放出烟幕;正在启动的程序显示Splash屏。自然界就是这样呵。”
3、 大师和弟子们观看魔术师演出,魔术师在表演后介绍魔术的秘诀:只有将物件预先藏在手中,然后转移观众的注意力,才能达到出其不意的效果。
一个弟子对大师说:“预先载入窗体,在需要时显示,从而加快显示,不也是同样的道理吗?”
大师说:“你明白VB之道了。”
4、 一个弟子找到大师:“您刚才讲解的程序还可以更快,”他用手指着屏幕上的窗体,“只要把AutoRedraw关闭就行了。”
大师说:“比我多想到一点,也是我的老师呵。”
5、 大师如是说:“为什么不使用标签呢?它所耗费的资源极少,你可以用隐藏的标签储存文本,你可以使用DragIcon存储图标……没有比标签更好的了!”
6、 大师注意到有一个弟子在上机时还开了一个BBS窗口,当大师走近时,他敏捷地使用VB窗口将其覆盖。大师于是将弟子们召集过来:“控制窗口的重显是很重要的,”大师最小化覆盖在上面的窗口,说道,“非常重要。”
7、 大师如是说:“汽车比自行车快,我仍然要使用自行车;Linux比Windows稳定,我仍然要使用Windows;Line比Pset方便,我仍然要使用Pset。”
8、大师如是说:“Image我所欲也,Picture亦我所欲也,二者不可得兼,舍Picture而取Image者也。”

杂篇

1、 一个弟子向大师倾诉程序编译中频繁的数据类型报错,问大师:“使程序永远没有数据类型错误,可能吗?”
大师回答:“可以做到。”于是将所有变量类型设置为Variant。
弟子运行程序,高兴地发现没有一处错误,但系统很快死机。
2、 大师如是说:“龟不活动,才能长寿;人没有欲望,才能保护自己;程序不吃内存,才能避免被删除。”
3、 大师的弟子微使用Unload卸载窗体,弟子壁使用赋予Nothing值的方法卸载。
大师看到了,对其他的弟子说:“贤能呵壁!更接近VB之道了。”
4、 大师如是说:“没有用的垃圾应该扔掉,没有用的代码应该删除。”
5、 大师问弟子:“有一个机会让你们用三个字说出最想要而总是得不到的东西,你们会要求什么?”
弟子贾说:“涨工资。”
弟子倚说:“放长假。”
弟子饼说:“内存条。”
大师微笑不语。
6、 大师如是说:“使用局部变量,不亦乐乎;删除动态数组,不亦乐乎;程序不会死机,不亦乐乎。”
7、 大师给弟子们讲了一个故事:“在一个公司里,有一个汇编高手,一个网络高手,还有一个VB程序员。项目经理为了考察属下的能力,交给每个人同样的任务。汇编高手从最不起眼的输入输出开始,花费了一个月的时间,打印出了足有一百页的程序清单;网络高手穷尽所有的平台,也花费了一个月的时间,制作了五十多个版本的应用程序;轮到VB程序员了,他在屏幕上画了一个窗体、一个按钮,写道:‘按下此按钮,运行他们的程序。’”
8、 一个弟子问大师:“我什么时候可以出师?”
大师回答:“到你的程序中注释是代码的十倍的时候
收到的鲜花
  • bczgvip2010-10-18 04:01 送鲜花  20朵   附言:的确好文章!
搜索更多相关主题的帖子: 文章 
2010-10-18 00:26
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
8、 一个弟子问大师:“我什么时候可以出师?”
大师回答:“到你的程序中注释是代码的十倍的时候


深表感受...............
我现在注释约代码的 1/20 左右.

授人于鱼,不如授人于渔
早已停用QQ了
2010-10-18 08:05
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
[转]VB的一篇文章

VB写程式的八个优良习惯
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

好处是加快写程式速度

不要選我當版主
2011-05-09 01:35
快速回复:[转]很好的一篇文章
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033806 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved