Альтернатива выражению IF с несколькими условиями, которые все равны одному значению - PullRequest
0 голосов
/ 12 сентября 2018

Есть ли лучший способ, чем этот?(при условии, что все переменные будут равны нулю)

If var1 = 0 Or var2 = 0 Or var3 = 0 Or var4 = 0 Or var5 = 0 Or var6 = 0 Then
    'do something
End If

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы могли бы написать функцию короткого замыкания, которая выходит из строя, когда находит значение, соответствующее критериям:

Public Function MatchesAny(ByVal value, ParamArray values()) As Boolean
    Dim i As Long
    For i = LBound(values) To UBound(values)
        If values(i) = value Then
            MatchesAny = True
            Exit Function
        End If
    Next
End Function

И теперь вы можете сделать это:

If MatchesAny(0, var1, var2, var3, var4, var5, var6) Then

Иесли вам нужно выручить, когда какое-либо значение не не соответствует критериям, то вы можете использовать аналогичную функцию с обратной логикой:

Public Function MatchesAll(ByVal value, ParamArray values()) As Boolean
    MatchesAll = True
    Dim i As Long
    For i = LBound(values) To UBound(values)
        If values(i) <> value Then
            MatchesAll = False
            Exit Function
        End If
    Next
End Function

Использовать так:

If MatchesAll(0, var1, var2, var3, var4, var5, var6) Then
0 голосов
/ 12 сентября 2018

Вы можете сделать это с помощью Select Case.Это также приведет к короткому замыканию оценки (в отличие от оператора If):

Select Case 0
    Case var1, var2, var3, var4, var5, var6
        'do something
End Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...