巴顿专贴(第四号):特别技巧专版:十七种可用一行代码完成的技巧:

Bardo 2002-01-14 12:50:46

编程要讲效率,尽管现在的计算机,速度是不成问题,但是,如果一行代码能完成,为什么要用更多的代码了?


1、下列代码,则是对逻辑运算不清楚造成。
If A=true Then
C= Not B
Else
C= B
End If

可以:

C=A XOR B

2、如果加上下列代码:

If C=true then
D=28
Else
D=29
End IF

D=Iif((A XOR B),28,29)

3、布尔赋值,常被人忽略:

如:

If A= 13 then

B=True

Else

B=False

End If

可以:
B = A = 13
或者:
B = (A = 13)

我更喜欢用后者,这样代码易于看懂。

4、字串有效性检测:

If IsNull(StrOrg) Or StrOrg="" then

可以:

If Len(StrOrg & "")<>0 then

5、字串重复次数

RepeatCount=Ubound(Split(StrOrg,StrFind))

同样,如果要对字串有效性判断:

RepeatCount=Iif((Len(StrOrg & "")=0), 0, Ubound(Split(StrOrg,StrFind))

6、有时需要判断字串数组中是否有这一元素,这时最好不用数组,而用分隔符字串

于是: If Len(OrgStr)= Len(Replace(OrgStr,FindStr)) then

则表明,此元素不存在。

7、对数组初始化:
最好用变体,这样,也是一行语句:
如:


IntArr=Array(12,28,29,30,31,52,24,60)

注意,此时需要用变量后缀。上面代码,如要定义为长整型,则

IntArr=Array(12&,28&,29&,30&,31&,52&,24&,60&)

要将IntArr 定义为变体

8、判断大小:

IntMax = Iif((IntA > IntB), IntA, IntB)

IntMin = Iif((IntA < IntB), IntA, IntB)

9、按索引的Select Case

Function GetChoice(Ind As Integer)
GetChoice = Choose(Ind, "Speedy", "United", "Federal")
End Function

10、按表达式的Select Case(这种转换要求不能有Case Else的才可以这样,否则会出错)

Function MatchUp (CityName As String)
Matchup = Switch(CityName = "London", "English", CityName _
= "Rome", "Italian", CityName = "Paris", "French")
End Function

11、使用Iif,前面已有。

Function CheckIt (TestMe As Integer)
CheckIt = IIf(TestMe > 1000, "Large", "Small")
End Function

12、字串动态数组是否已初始化

If Len(Join(StrArr))=0 then
字串动态数组未初始化

13、指定只读CombBox的当前值,如果能确认这个值就在其中,一定不会错,则:

Combbox=CurValue

注意,不可以写成:Combbox.text=CurValue
前者实际是写 _default 这个属性,而后者则是写Text 因为只读,则会导致错误

14、如果有下列代码:

Select Case CombBox.text
Case "London"
Call FuncStrLang(3)
Case "Rome"
Call FuncStrLang(5)
......
End Select


则可以用ItemData属性
即:"London" 的 Itemdata=3
"Rome" 的 Itemdata=5

于是:
Call FuncStrLang(CombBox.ItenData)

15、如果有下列代码:

Select Case CombBox.text
Case "London"
Call ClsCity.CityIntr_London
Case "Rome"
Call ClsCity.CityIntr_Rome
......
End Select
只要:
CallByName ClsCity, "CityIntr_" & CombBox.text, vbMethod

16、复制数组到另一变量中:

Dim iOrgArr(30) as Integer
Dim iDesArr as Variant
......
iDesArr = iOrgArr

即主变体直接取数组指针,则所有元素都复制了过去

17、如果有下列代码:
Do While Not RsAdo.Eof
If len(DesStr)<>0 then
DesStr=DesStr & VbTab
End if
DesStr=RsAdo!Rec_id
RsAdo.MoveNext
loop

则只要:
DesStr=RsAdo.GetString()

我暂时只想到这十七种,如果还有其它,欢迎高手前来奉献给大家!!
...全文
287 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingll 2002-01-26
  • 打赏
  • 举报
回复
同意 Random(随便)
xxlroad 2002-01-26
  • 打赏
  • 举报
回复
第一 易读
第二 易读
lgs73327 2002-01-26
  • 打赏
  • 举报
回复
同意精简,不过最好在代码处添加注释加强易读性!我是菜鸟,要是说得不切实际请不要笑我!
Random 2002-01-16
  • 打赏
  • 举报
回复
效率固然重要,但要看场合使用,大多数情况我认为可读性更重要
而且未必简洁的代码就是高效率的代码,这点完全同意。
cqq_chen 2002-01-16
  • 打赏
  • 举报
回复
很有意思,如果多出这种东东一定大受欢迎。
lingll 2002-01-16
  • 打赏
  • 举报
回复
好像比较喜欢用iif,
tiexuewang 2002-01-16
  • 打赏
  • 举报
回复
记下来学习
fuxc 2002-01-16
  • 打赏
  • 举报
回复
快速导出ado.recordset中的数据至文本文件:
dim ExpData as string
dim adoReport as adodb.recordset
........
adoReport.movefirst
'写标题**************
ExpData = adoReport.Fields(0).Name
For I = 1 To adoReport.Fields.Count - 1
ExpData = ExpData & "," & adoReport.Fields(I).Name
Next I
ExpData = ExpData & Chr(10)

'取数据,csv格式,只需一句:*******************
ExpData = ExpData & adoReport.GetString(adClipString, , ",", Chr(10), ",")

'两句话既可放入剪贴板,粘贴到excel等应用程序中去******************
Clipboard.clear
Clipboard.SetText ExpData


'存入csv文件,excel等应用程序可直接打开*******************
dim strFileName as string
strfilename = "c:\aaa.csv" '此处可用CommonDialog等生成文件名****
Open strFileName For Output As #1
Print #1, ExpData
Close #1
fuxc 2002-01-16
  • 打赏
  • 举报
回复
快速导出ado.recordset中的数据至文本文件:
dim ExpData as string
dim adoReport as adodb.recordset
........
adoReport.movefirst
'写标题**************
ExpData = adoReport.Fields(0).Name
For I = 1 To adoReport.Fields.Count - 1
ExpData = ExpData & "," & adoReport.Fields(I).Name
Next I
ExpData = ExpData & Chr(10)

'取数据,csv格式,只需一句:*******************
ExpData = ExpData & adoReport.GetString(adClipString, , ",", Chr(10), ",")

'存入csv文件,excel等应用程序可直接打开*******************
dim strFileName as string
strfilename = "c:\aaa.csv" '此处可用CommonDialog等生成文件名****
Open strFileName For Output As #1
Print #1, ExpData
Close #1
winthegame 2002-01-16
  • 打赏
  • 举报
回复
同意sandder(包含中)的话:虽然一句话代码较为简洁,但简洁的代码不一定能产生简

洁的机器码。盲目地追求代码的简洁也与无数前人总结出的软件工程学不符。

我并非针对这个贴子的任何人。实际上大家水平都比我高得太多。

但如果让我选择,为了日后维护和可重用性更好,我倒宁愿选择可读性。
晒屁屁 2002-01-16
  • 打赏
  • 举报
回复
不是吧,如果是一个有10000行的程序,如果就真的这么简单,那么注释要多少,如果要看懂其中的一部分又要多少h?????应该说是应简就应,没大碍的还是写清楚点好
cqhydz 2002-01-16
  • 打赏
  • 举报
回复
vb自身的缺点效率很低,但客户只对速度和安全性感兴趣
dbcontrols 2002-01-16
  • 打赏
  • 举报
回复
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
同意withstudy(王永丰) 
wzj1321 2002-01-16
  • 打赏
  • 举报
回复
我也是 :P
skydg 2002-01-16
  • 打赏
  • 举报
回复
我来学习的:)
withstudy 2002-01-16
  • 打赏
  • 举报
回复
以现在的机器来讲,除非是算法问题,否则以上面的东西不会影响到程序的性能,反而会影响程序的可读性,除非是为了炫耀自己的技巧,否则和编程不写注释一样不可取。
lance 2002-01-16
  • 打赏
  • 举报
回复
gzgz
gmc007 2002-01-16
  • 打赏
  • 举报
回复
大家继续呀!哈哈
sandder 2002-01-15
  • 打赏
  • 举报
回复
>>编程要讲效率,尽管现在的计算机,速度是不成问题,但是,如果一行代码能完成,为什么要用更多的代码了?

我认为把这句话去掉会更好。一行代码效率就高???
一个人写代码,可能是简洁点好,我更偏向于易读
一堆人写代码,一定是易读点好。


JYQing 2002-01-15
  • 打赏
  • 举报
回复
同意night_cai(菜烟虫)
加载更多回复(15)

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧