Я бы просто вложил операторы 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
и получить точно такой же результат.Мне потребовалось, по крайней мере, несколько минут, чтобы понять, что сделал ваш оригинальный код, потому что это такой неестественный способ написания условных выражений.