首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 基础问题:VB6中条件表达式是如何执行的? [已结贴,结贴人:ThreeColor]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 20:55:11 楼主
    举个例子
    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
    但是这样比较啰嗦,所以想知道明确的答案。请知道的告知一下,谢谢
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:02:381楼 得分:1
    VB提高的是开发效率,所以使用的是if a or b then
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:07:202楼 得分:1
    做个测试就知道了。

    VBScript code
    Sub test() If a Or b Then End If End Sub Function a() As Boolean Debug.Print "a" a = True End Function Function b() As Boolean b = True Debug.Print "b" End Function
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:07:333楼 得分:0
    楼上的没有说明a or b VB是如何运行的啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:09:524楼 得分:1
    从右至左,逐个处理。即便第一个为真,后面的还是要处理的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:11:045楼 得分:1
    钻这样的牛角尖有什么意思呢!结合方向跟C语言一样!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:15:516楼 得分:1
    这个问题我也一直想问了,UP
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:21:517楼 得分:0
    引用 5 楼 chenjl1031 的回复:
    钻这样的牛角尖有什么意思呢!结合方向跟C语言一样!

    这不是钻牛角尖,一般情况是不需要特别关注的,但是当
    A or B中B的判断需要很长时间,比如15秒,
    在一个1000次循环中每次判断A or B,而一般情况A为真的概率90%以上,
    这时就非常关键了。
    你仍容忍你的程序1000此循环,每次停个15秒,而如果处理的好的话,你
    的程序效率至少可以提高90%.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:24:308楼 得分:1
    有一腚的道理

    引用 7 楼 ThreeColor 的回复:
    引用 5 楼 chenjl1031 的回复:
    钻这样的牛角尖有什么意思呢!结合方向跟C语言一样! 

    这不是钻牛角尖,一般情况是不需要特别关注的,但是当
    A or B中B的判断需要很长时间,比如15秒,
    在一个1000次循环中每次判断A or B,而一般情况A为真的概率90%以上,
    这时就非常关键了。
    你仍容忍你的程序1000此循环,每次停个15秒,而如果处理的好的话,你
    的程序效率至少可以提高90%.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 23:12:389楼 得分:1
    要等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
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 00:08:1110楼 得分:1
    无论如何,VB始终要计算整个表达式。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 09:15:2911楼 得分:1
    好象不是吧,如果有一个不符合条件就else
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 09:54:0212楼 得分:1
    设计思想上的问题没什么好讨论的,要么掌握它,要么不喜欢就不用。
    自行车直接刹车就可以了,机动车还要打刹车灯,没什么道理好讲的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:00:0513楼 得分:1
    无论a是否为true  都要对b进行计算

    所以如果十分在意,应该把
        If a Or b Then
            '代码
        End If
    改为

    If a Then
        asub
    ElseIf b Then
        asub
    End If

    Sub asub()
        '代码
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:03:0214楼 得分:1
    ..原来都已经写过了    没看全帖子~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:50:2015楼 得分:1
    引用 4 楼 of123 的回复:
    从右至左,逐个处理。即便第一个为真,后面的还是要处理的。


    这个是正确的,所有还是建议LZ用你现在这个方法。同理IIF函数也是这样的。
    VB不管是AND还是OR,其两边的判断式都是要判断或执行的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 21:09:2016楼 得分:1
    引用 15 楼 MrQiu 的回复:
    引用 4 楼 of123 的回复:
    从右至左,逐个处理。即便第一个为真,后面的还是要处理的。


    这个是正确的,所有还是建议LZ用你现在这个方法。同理IIF函数也是这样的。
    VB不管是AND还是OR,其两边的判断式都是要判断或执行的。

    我来抬杠了。。。是从左至右好不好????
    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
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 08:51:5217楼 得分:1
    不好意思,当时没有仔细看人家回复的内容,直接引用了,反正就是判断式两边的条件程序都要判断就对了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 09:06:0918楼 得分:1
    vb的OR 参数条件判断应该都要执行的
    .net 只要满足一个就认为是真 后面就不判断了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 10:02:3119楼 得分:1
    引用 18 楼 tim_zhang 的回复:
    vb的OR 参数条件判断应该都要执行的
    .net 只要满足一个就认为是真 后面就不判断了

    那么请问 Or 和 OrElse 什么区别?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 10:05:0220楼 得分:1
    引用 18 楼 tim_zhang 的回复:
    vb的OR 参数条件判断应该都要执行的
    .net 只要满足一个就认为是真 后面就不判断了

    那么请问 Or 和 OrElse 有区别吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 10:29:5421楼 得分:1
    关注中
    我也遇到了类似问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 10:30:1822楼 得分:0
    TNND,列表中有20个回复,打开只有18个,SB。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 10:31:4623楼 得分:1
    引用 18 楼 tim_zhang 的回复:
    vb的OR 参数条件判断应该都要执行的
    .net 只要满足一个就认为是真 后面就不判断了

    那么 Or 和 OrElse 有区别吗?
    还是你不知要还有一个 OrElse ?
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved