Как я могу кодировать проверки с повторением «Если не отменить то» более элегантно - PullRequest
0 голосов
/ 27 апреля 2018

В 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 голосов
/ 27 апреля 2018

Вы также можете использовать простой 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
0 голосов
/ 27 апреля 2018

Вы можете просто использовать 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
...