如何重复编码检查"如果不取消则"更优雅

时间:2018-04-27 08:41:02

标签: access-vba coding-style

在MS Access VBA中,我使用不同的参数在不同的方法中进行了不同的检查。只要其中一个失败,Cancel就会设置为True,不再执行进一步的检查。它看起来像是:

Cancel = checkMethodOne(param1)

If Not Cancel Then
    Cancel = checkMethodTwo(param2, param3)
End If

If Not Cancel Then
    Cancel = checkMethodThree(param4)
End If

......等等。有没有一种方法可以更优雅地编码,而不重复"如果不取消那么"条款?

类似于"虽然没有取消"由于具有单独名称和参数的不同方法,这似乎是一个问题。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用And来评估多个语句,如果返回false,则返回false:

Cancel =  checkMethodOne(param1) And checkMethodTwo(param2, param3) And checkMethodThree(param4)

如果方便,可能取决于具体情况。它更短,更多代码高尔夫球,但可能更令人困惑。

请注意,这会评估所有功能,因此如果它们性能密集,则可能会运行一段时间

或者,您可以尝试以下Select case以避免执行所有比较:

Cancel = True

Select Case True
     Case checkMethodOne(param1)
     Case checkMethodTwo(param2, param3)
     Case checkMethodThree(param4)
     Case Else
        Cancel = False
End Select

答案 1 :(得分:2)

您还可以使用简单的 If-ElseIf 块:

If checkMethodOne(param1) Then
    Cancel = True
ElseIf checkMethodTwo(param2, param3) Then
    Cancel = True
ElseIf checkMethodThree(param4) Then
    Cancel = True
End If

替代:

Cancel = True
If checkMethodOne(param1) Then
ElseIf checkMethodTwo(param2, param3) Then
ElseIf checkMethodThree(param4) Then
Else
    Cancel = False
End If