我有这样的 if 语句:
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
我想知道有这么多AndAlso
的是不是很糟糕。它确实有效,只是弄不清楚发生了什么令人困惑。有没有一种更简单的方法来做这个测试?还是这是正确的做事方式?
我有这样的 if 语句:
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
我想知道有这么多AndAlso
的是不是很糟糕。它确实有效,只是弄不清楚发生了什么令人困惑。有没有一种更简单的方法来做这个测试?还是这是正确的做事方式?
据我所知,MSDN 文档没有说明可以在If
语句中使用的最大条件数——因此任何限制都可能受可用堆栈空间的约束,而且你几乎不可能接近那个。
至于实践:编码术语还不错,但正如您所说,它可能变得难以阅读。我个人倾向于只使用续行来使此类语句更具可读性:
If r1.Left < r2.Right _
AndAlso r2.Right < r1.Right _
AndAlso r2.Top + r2.Height > r1.Top Then
你总是可以引入一个新的变量或方法来提高可读性。
所以而不是
If r1.Left < r2.Right AndAlso r2.Right < r1.Right AndAlso r2.Top + r2.Height > r1.Top Then
就像是
Function RectIsInsideOf(r1 As ..., r2 As ...) As Bool
Return r1.Left < r2.Right AndAlso
r2.Right < r1.Right AndAlso
r2.Top + r2.Height > r1.Top
End Function
...
If RectIsInsideOf(r1, r2) Then ...
好吧,您对可以在 if 语句中使用多少个运算符没有任何限制。此外,使用任意数量的代码(从程序员的角度来看)是完全可以的,毕竟这就是 if 语句的意义所在。但是,如果您面临需要检查太多运算符的情况,那么您必须考虑另一种方法。
在您的具体示例中,您使用的代码仅包含两个 AndAlso 运算符,这对您的程序来说开销不大。如果您只想在程序中的一个位置检查这种情况,那么您的方法可以被认为是正确的,如果您需要在许多位置进行这种检查,那么为此编写一个 BigYellowCactus 函数是明智的建议。
希望这可以帮助...