Как проверить логические выражения в VBScript? - PullRequest
1 голос
/ 29 декабря 2010

Я пытаюсь преобразовать код из https://stackoverflow.com/questions/4554014/how-to-examine-and-manipulate-iis-metadata-in-c в VBVcript.

Моя проблема с этим кодом:

Function LocateVirtualDirectory(ByVal siteName, ByVal vdirName)
    On Error Resume Next
    Dim site
    For Each site in w3svc
        If (site.KeyType = "IIsWebServer") And (site.ServerComment = siteName) Then
            Set LocateVirtualDirectory = GetObject(site.Path & "/ROOT/" & vdirName)
            Exit Function
        End If
    Next
End Function

Если site.ServerComment равно Empty, тогда все логическое выражение получает значение Empty, которое не является ложным, и, следовательно, вводится оператор then.

Как правильно написать это выражение?Чем короче, тем лучше.

Спасибо.

1 Ответ

2 голосов
/ 29 декабря 2010

Я бы просто вложил операторы If и вставил дополнительную проверку для защиты от условия, где ServerComment равно Empty.Я также извлек значение site.ServerComment во временную переменную comment, чтобы вы не обращались к свойству дважды.

Например:

Function LocateVirtualDirectory(ByVal siteName, ByVal vdirName)
    On Error Resume Next
    Dim site
    Dim comment
    For Each site in w3svc
        If site.KeyType = "IIsWebServer" Then
            comment = site.ServerComment
            If (comment <> Empty) And (comment = siteName) Then
                Set LocateVirtualDirectory = GetObject(site.Path & "/ROOT/" & vdirName)
                Exit Function
            End If
        End If
    Next
End Function

Еще одно преимуществовложением операторов If является короткое замыкание оценки.VBScript (и VB 6) не закорачивают условные оценки - оператор And работает как логический оператор, требующий проверки обеих сторон условного выражения для определения результата.Поскольку нет смысла проверять ServerComment, если KeyType не совпадает, вы получите небольшую производительность, если закоротите выражение.Единственный способ добиться этого в VBScript - это вложенность (нет AndAlso).

Я также должен отметить, что нет абсолютно никакого смысла проверять значение = True.Вы можете просто переписать (site.ServerComment = siteName) = True как site.ServerComment = siteName и получить точно такой же результат.Мне потребовалось, по крайней мере, несколько минут, чтобы понять, что сделал ваш оригинальный код, потому что это такой неестественный способ написания условных выражений.

...