2010-12-29 6 views
1

コードをhttps://stackoverflow.com/questions/4554014/how-to-examine-and-manipulate-iis-metadata-in-cからVBVcriptに変換しようとしています。VBScriptでブール式をテストする方法は?

私の問題は、このコードを使用することです:Emptyある

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を、受け取ります。

その表現を書く正しい方法は何ですか?より短いほうが良い。

ありがとうございました。

答えて

2

私は単にIfステートメントをネストし、がEmptyである条件に対してガードする追加のチェックを挿入します。また、site.ServerCommentという値をテンポラリ変数commentに抽出して、プロパティに2度アクセスしないようにしました。例えば

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演算子は論理演算子として動作し、条件式の両辺をテストして結果を決定する必要があります。 KeyTypeが一致しない場合は、ServerCommentをチェックする必要はないため、式を短絡することでパフォーマンスが少し向上します。 VBScriptでこれを実現する唯一の方法は入れ子です(AndAlsoはありません)。

= Trueという値がある場合、テストすることは絶対に必要ではないことを指摘しておきます。 (site.ServerComment = siteName) = Truesite.ServerComment = siteNameと書き換えれば、まったく同じ結果が得られます。条件付き文章を書くのは不自然な方法なので、元のコードが何をしたのかを理解するのに少なくとも数分かかりました。

+0

私は 'Not IsEmpty(site.ServerComment)And ...'を推奨しますが、とにかく... Empty変数を文字列と比較すると、 'Empty'ではなく' False'が返されます。 'Empty'と' Empty'を比較すると 'False'も出ます。 – Tomalak

+0

私のコードのextra = Trueはタイプミスでした。それを意味しませんでした。 – mark

+0

奇妙なことに、私はIsEmptyを使用しようとしていましたが、動作しませんでした。私は何かを混乱させたと思う。 – mark

関連する問題