Vb6 在if语句表达式中放置布尔函数

Vb6 在if语句表达式中放置布尔函数,vb6,preferences,Vb6,Preferences,我正在维护一个VB6应用程序。对于布尔函数,原始作者将返回值存储在布尔变量中,然后在If语句中检查结果。我更喜欢将函数直接放在If语句中。这是一个偏好的问题,还是我在我的风格中遗漏了一个潜在的陷阱 原创作者风格 bReturn = IsThisFun(maintainingVb6) If bReturn = True Then 'You haven't used .NET Else 'blah End If If IsThisFun(maintainingVb6) Then

我正在维护一个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
我的风格

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
我不确定这些不同的方法是否有合适的术语,这可能会让我错过以前关于这个主题的文章


谢谢

做任何可读性和可维护性最好的事情。在我看来,您的样式在98%的情况下都符合这一标准。

您不能创建一个返回bool类型的方法吗

例如:

public bool maintainingVB6()
{
  return true;
}

我不喜欢声明不必要的变量。 这是对资源的浪费,并且不会使代码更具可读性。
我更喜欢你的风格。

严格地说,这是风格的问题

经验法则是:什么更具可读性。您的代码可能是首选,因为他的代码是冗余的,大多数人更喜欢删除冗余。(他至少可以删除
=True
,这是完全多余的。)


如果布尔值是较长函数调用的结果,而
If-Then
会妨碍,我会将结果作为一个单独的变量,以便于查看函数调用,但这只是我自己。

我相信最初的作者创建了一个变量,以便能够调试应用程序。他将在第2行放置一个断点,并将鼠标悬停在该断点上,以查看
bReturn
的值。但由于您也可以将鼠标悬停在equal符号上,或者在If/EndIf语句中放置两个断点,所以不需要为此创建变量


顺便说一下,我部分同意杜克的观点。不需要创建不必要的变量。这一点也不浪费资源,因为编译器很聪明,可以删除这个变量,但创建这样的变量并不能使代码更可读。

使用任何一种方法(w/或wo/变量)都有一个可能的陷阱。必须确保函数返回的是实际的VB布尔值(OLE VARIANTBOOL),而不是C布尔值或任何其他类型。如果函数是用all-VB6编写和公开的,这不是问题,但是

为原型为返回bool的外部(通常是API)函数创建声明并不少见,对返回类型使用
作为Boolean
。VB接受这一点,但当返回“True”(来自函数的POV)时,它可能处于异常状态:一个包含值1的VB 16位布尔值,而不是正常的-1

这可能会产生奇怪的后续效果,最明显的是测试
(如果不是MyFunction()
),它将计算
(不是1)
,或-2,而不是预期的
(不是-1)
,或0。所以你得到了一个奇怪的结果
Not(True)=True


最好的做法是
声明
外部“bool”函数
,只要结果是
CBool()

实际上大多数情况下,这不是首选项的问题。如果代码在错误恢复下一步时被包装在
中,则单独的本地变量很重要

如果
IsThisFun
爆炸了,那么
bReturn
不会被分配,通常会以false结束。所以这个条件是不满足的。在第二个代码段中,if
IsThisFun
引发异常,然后执行进入
if
true块

为了克服这一点,我看到了许多类似这样的“无意义”片段:

On Error Resume Next
...
If Not IsThisFun(maintainingVb6) Then
Else
    ...
End If

我发现无数的bReturn、bRetVal、bReturnValue、bRVal让人分心。感谢大家确认这是一个偏好问题。感谢您的反馈。+1对于您有趣的示例代码,我认为这可能是一个合理的解释。我没想到。现在我看到一些行注释掉了它们将值写入文本文件的位置。很酷,谢谢你提供的有趣信息。有一些对API函数的调用是用C编写的,这可能解释了原始作者的选择。如果您认为“=True”不好,请尝试“If False=IsNull(blah),然后”而不是在他的示例中使用“Not IsNull”或创建一个名为IsNotNull()的函数,IsThisFun确实返回布尔类型(或者看起来是这样)。