我正在處理一段遺留代碼,我遇到了一個變量賦值,爲我提出了一些問題。變量PortOpen
的類型設置爲Long
,稍後在代碼中將其設置爲False
。由於False
的整數值是0
,我假設這只是意味着PortOpen
將是0
,直到它被修改,但我懷疑這可能會引入一些細微的錯誤。在這種情況下,Long
的大小是Boolean
的兩倍,因此在邏輯比較中稍後使用PortOpen
時是否有可能出現錯誤?或者,一般來說,使用這種類型的變量賦值有什麼怪癖或其他影響?將Long變量設置爲False會產生哪些副作用?
2
A
回答
3
這當然是一件壞事,因爲讀取代碼的人會感到困惑,但只要您使用0/False作爲虛假值,-1/True作爲真值,程序應該可以正常工作。
您需要注意將1用於True,因爲這會給您帶來不確定的結果。 1(或實際上除0以外的任何值)會給你在邏輯比較真實,所以這將顯示「真」:
Dim myvar As Long
myvar = 2
If myvar Then
MsgBox "True"
Else
MsgBox "False"
End If
然而,當在應用一個「不」到這個表達式的問題出現了。一般來說,你會想到「不真」是「假」,但下面的代碼會顯示「真」:
Dim myvar As Long
myvar = 2
If Not myvar Then
MsgBox "True"
Else
MsgBox "False"
End If
所以,除了是不好的代碼的可讀性,使用整型或長的布爾CAN導致您的代碼中出現錯誤。
3
正如你所說PortOpen
將自動轉換爲True
到Long
後0
,這個任務沒有其他副作用。
除了是不好的做法&爲他人混淆的唯一其他潛在的問題將是PortOpen = 1 = True
這是並非如此,因爲Clng(True)
是-1
任何假設。
就我個人而言,我會用0
或0
CLOSED
符號常量/枚舉來代替assignemtnet。
相關問題
- 1. JavaScript行爲重用:這種方法會產生哪些副作用?
- 2. 將清單設置爲新集合之前可能發生哪些副作用?
- 3. 將tcp_max_tw_buckets設置爲非常小的值會產生什麼副作用?
- 4. 設置變量爲false
- 5. SqlMembershipProvider中的哪些方法將IsApproved設置爲false?
- 6. 當contenteditable從true變爲false時,哪些css屬性會改變?
- 7. 我應該爲生產應用程序設置enableDebugLogging爲false嗎?
- 8. python tkinter按鈕設置變量爲false
- 9. 將會話變量設置爲bool
- 10. 在具有大量流量的異步ASP.NET Web API中,將ConfigureAwait設置爲false會產生什麼影響?
- 11. Python - 將外部變量設置爲用戶輸入的副作用
- 12. 設置false爲範圍變量在工廠設置時不起作用
- 13. 將多個php變量作爲lat/long在Google Maps中放置
- 14. 爲什麼生產中的whiny_nils默認設置爲false?
- 15. pentaho將變量設置爲作業
- 16. 將變量設置爲工作簿
- 17. Rails無法識別將變量設置爲'false'?
- 18. 如何將python變量設置爲true或false?
- 19. 當EnableEventValidation設置爲'false'時,未設置Post變量
- 20. 獲取會話變量,並將其設置爲一個變量
- 21. 將ASP會話變量設置爲Javascript全局變量值
- 22. 如何將javascript變量設置爲php會話變量
- 23. 哪些操作產生排序輸出?
- 24. 我需要爲Java設置哪些環境變量?
- 25. 設置會話變量爲paramiko會話
- 26. 使用EmptyWorkingSet有哪些副作用?
- 27. 將變量值設置爲
- 28. 將值設置爲變量
- 29. 將document.body.className設置爲變量
- 30. 將變量設置爲CGPointMake
感謝您的快速響應。我同意你所提出的改變,但源代碼是由老闆的兄弟編寫的,所以它可能需要一些工作才能實現它。 - 它使我在源代碼中留下了一些含糊不清的東西,但我需要知道這是否會成爲最後的選擇。 – Tim