我正在维护一个VB6应用程序。对于布尔函数,原始作者在返回If语句中的结果之前将返回值存储在布尔变量中。我更喜欢将函数直接放在If语句中。这是一个偏好的问题还是我错过了我的风格潜在的陷阱?
原始作者风格
bReturn = IsThisFun(maintainingVb6)
If bReturn = True Then
'You haven't used .NET
Else
'blah
End If
我的风格
If IsThisFun(maintainingVb6) Then
'You haven't used .NET
Else
'blah
End If
我不确定这些不同的方法是否有适当的术语可能让我错过了关于这个主题的上一篇文章。
由于
答案 0 :(得分:7)
做任何最易读和可维护的事情。在我看来,你的风格在98%的时间都符合这个标准。
答案 1 :(得分:5)
我相信原作者创建了一个变量来调试应用程序。他会在第2行放置一个断点,并通过悬停在bReturn
上看到它的值。但是既然你也可以悬停在等号上或在If / EndIf语句中放置两个断点,那么就不需要为此创建一个变量。
顺便说一句,我部分同意DOK。无需创建不必要的变量。这根本不是浪费资源,因为编译器足够聪明地删除了这个变量,但创建这样的变量并不会使代码更具可读性。
答案 2 :(得分:3)
严格来说,这是一种风格问题。
经验法则是:什么更具可读性。您的代码可能是首选,因为他的代码是多余的,大多数人更喜欢删除冗余。 (他至少可以删除= True
,这完全是多余的。)
如果布尔值是一个较长的函数调用的结果,If Then
阻碍了,我会将结果作为一个单独的变量,以便更容易看到函数调用,但那只是我。 / p>
答案 3 :(得分:2)
使用任何一种方法(w /或wo / variable)都有一个可能的缺陷。您必须确定该函数返回实际的VB布尔值(OLE VARIANTBOOL),而不是C bool或任何其他类型。如果函数是在所有VB6中编写和公开的,那么这不是问题,而是......
为返回bool创建原型的外部(通常是API)函数的Declares并不常见,使用As Boolean
作为返回类型。 VB接受了这一点,但是当返回'True'(来自函数的POV)时,它可能处于异常状态:VB 16位布尔值包含值1,而不是正常-1。
这可能有奇怪的后续效果,最明显的是If Not MyFunction()
的测试,它会计算(Not 1)
或-2,而不是(Not -1)
或0,如预期。所以你得到了Not(True) = True
最佳做法是Declare
外部'bool'函数As Long
和CBool()
结果。
答案 4 :(得分:1)
我不喜欢声明不必要的变量。 这是浪费资源,并不会使代码更具可读性。 我更喜欢你的风格。
答案 5 :(得分:0)
难道你不能只创建一个返回bool类型的方法吗?
示例:
public bool maintainingVB6()
{
return true;
}
答案 6 :(得分:0)
实际上,这通常不是偏好问题。如果代码包含在On Error Resume Next
中,则单独的局部变量很重要。
如果IsThisFun
炸弹,则bReturn
不会被分配,通常最终会被误判。所以条件不满意。在第二个片段中,如果IsThisFun
引发异常,则执行进入If
true块。
为了克服这个问题,我看过很多像这样的“无意义”片段:
On Error Resume Next
...
If Not IsThisFun(maintainingVb6) Then
Else
...
End If