2012-10-15 34 views
3

IF THEN語句可能重複:
Does VB6 short-circuit complex conditions?情結VB6

我很好奇如何IF語句在VB6執行。 例如,如果我有聲明

If x And y Then 
    'execute some code 
End If 

上是否如果x是不正確的代碼的舉動?或者即使沒有邏輯關係,它也會繼續評估y

又如

If x Or y Then 
    'execute some code 
End If 

代碼是否繼續評估y如果x是真的嗎?

編輯: 如果我想評估非常複雜的條件,並且我不想浪費CPU時間,是否有避免嵌套IF語句的方法?

+1

否,VB 6不具有短路邏輯。執行繼續。 –

+0

@DavidStratton我同意。 –

+0

不,我的問題是關於嵌套'IF'語句的替代方法。見編輯。 – aserwin

回答

3

一個笨拙或類似語句呈現短路現象:

select case True 
    case a(), b(), c() 
     '//if a returns true b & c are not invoked, if b returns true a & b were invoked 
    case else 
     ... 
+2

不可讀!如果我發現自己維護這個代碼是因爲它的「比嵌套的ifs好」,那麼,我是[comeing you](http://www.codinghorror.com/blog/2008/06/coding-for-violent-psychopaths .html) – MarkJ

+0

啊!我的眼睛... –

+0

那還是比較好的那個 如果一個()那麼 如果b()那麼 如果c()Then – aserwin

4

你所描述是短路邏輯,和VB6沒有它...

例如,在VB.Net你可以寫

If x AndAlso y then... 

在這種情況下y不測試如果x結果是錯誤的。

Dim x as Object 
If Not x Is Nothing And x.y=1 Then 

由於對象x沒有實例:

在你的VB6例如,如果你嘗試一些諸如你會得到一個錯誤Object or With block variable not set

+0

不是VB6的傢伙,但它聽起來像喬恩是對的。你可以通過類似FunctionA()和FunctionB()的方式來驗證它,然後定義函數A和B來打印調試消息並返回false。然後看看你從誰那裏得到調試信息。 –

+1

@RBarryYoung:否 - 'AndAlso' /'OrElse'運算符只存在於VB.NET中,而不是VB6中。 –

+0

@RBarryYoung爲了避免日後出現混淆,您可以刪除您的評論嗎? – Deanna

2

要回答您的編輯 - 避免嵌套的IF語句,您可以使用Select Case,在this article的後半部分中介紹。從物品

代碼段:

Select Case strShiftCode 
    Case "1" 
     sngShiftRate = sngHourlyRate 
    Case "2" 
     sngShiftRate = sngHourlyRate * 1.1 
    Case "3" 
     sngShiftRate = sngHourlyRate * 1.5 
    Case Else 
     Print "Shift Code Error" 
End Select 
+0

是的,那正是我在想的。謝謝你的答案。 – aserwin