举个例子 A or B这个条件表达式,VB6是如何执行的?如果A结果为真,则B不需要比较直接执行下面的语句, 我记得C语言是这样做,C语言还分左优先和右优先。这样做可以提高代码效率。
比如如下代码: if A or B then 代码段1 else 代码段2 end if 如果B的判定需要很多时间(数据库查询)的话,浪费就比较大了,我的保险做法是 if A then 代码段1 elseif B then 代码段1 else 代码段2 end if 但是这样比较啰嗦,所以想知道明确的答案。请知道的告知一下,谢谢
Sub test()
If a Or b ThenEndIfEnd SubFunction a() AsBoolean
Debug.Print "a"
a =TrueEnd FunctionFunction b() AsBoolean
b =True
Debug.Print "b"End Function
这不是钻牛角尖,一般情况是不需要特别关注的,但是当 A or B中B的判断需要很长时间,比如15秒, 在一个1000次循环中每次判断A or B,而一般情况A为真的概率90%以上, 这时就非常关键了。 你仍容忍你的程序1000此循环,每次停个15秒,而如果处理的好的话,你 的程序效率至少可以提高90%.
要等B的。。。一个测试例子: Private Sub Command1_Click() a = True b = flase If a Or test(b) Then Debug.Print "ok" End If End Sub Function test(ByVal b As Boolean) As Boolean For i = 0 To 10000000 DoEvents Me.Caption = i Next test = False End Function
至于原因,估计是因为vb中的and、or、not等几个运算符的作用不仅仅是进行逻辑运算,还在位运算中有应用,而进行位运算,就必须后面的B了。。。 debug.print 23 or 111
我来抬杠了。。。是从左至右好不好???? Private Sub Command1_Click() a = True b = flase If testa(a) Or test(b) Then Debug.Print "ok" End If End Sub Function test(ByVal b As Boolean) As Boolean For i = 0 To 10000000 DoEvents Me.Caption = i Next test = False End Function Function testa(ByVal b As Boolean) As Boolean For i = 0 To 10000000 DoEvents Me.Caption = "a" + CStr(i) Next testa = False End Function