(WSH)VBScript(またはVB6)でAndAlsoをどうすればよいか?
VB.NetやC系言語,Javaでは論理演算子として AndoAlso,OrElse(VB.Net) , &&,||(C,Java) を一般的に使います。
AndAlso,&& は左辺を評価して false なら右辺は評価しません。
OrElse,|| は左辺を評価して true なら右辺は評価しません。

この演算子はショートサーキット演算子(短絡演算子)と呼ばれるらしく、処理速度を上げたり、ソースを見やすくする上で役立ちます。

しかし、VB6やVBScriptにはこのショートサーキット演算子は使えません。
なので下記のように文字列変数 x が整数の0~10の値かどうかというのを判定するのには、AndAlso が使えないので、下記のようにIF分をネストして書かないといけません。


If IsNumeric(x) Then '数字か
If x Mod 1 = 0 Then '整数か
If x <= 10 Then '10以下か
If x >= 0 Then '0以上か
'正しい処理
Else
MsgBox "設定した値に誤りがあります"
End If
Else
MsgBox "設定した値に誤りがあります"
End If
Else
MsgBox "設定した値に誤りがあります"
End If
Else
MsgBox "設定した値に誤りがあります"
End IF

(上記は実は、Mod のところや x<=10 , x>=0 は And 演算子でまとめられますが、例ということで。。。)



ネストしまくると非常に見にくいので見やすい方法ないかなとおもって探すと、If AndAlso や OrElse の代替方法 でいい方法がありました。
下記のような感じになります。

If Not IsNumeric(x) Then
MsgBox "設定した値に誤りがあります"
ElseIf x > 10 Then
MsgBox "設定した値に誤りがあります"
ElseIf x Mod 1 <> 0 Then
MsgBox "設定した値に誤りがあります"
ElseIf x < 0 Then
MsgBox "設定した値に誤りがあります"
Else
'正しい処理
End If

条件が逆になります。つまり間違いとなる条件を書くわけですね。
ただ、この方法にしても行が長くなるのはいたし方ありません。エラーメッセージを何度も書かないといけませんしね。(このへんはエラー表示関数とかでカバーする必要がありますが。。)

ちなみに、VB.Netだと AndAlso 使ってこう書けます。

If IsNumeric(x) AndAlso x Mod 1 = 0 AndAlso x <= 10 Then AndAlso x >= 0 Then
'正しい処理
Else
MsgBox "設定した値に誤りがあります"
End If



参考:
VBの And Or 演算子はショートサーキットしない | tk-engineering.com Technical blog:
(vb.net)VB.Net、VB2005で変わった点1
[PR]
by jehoshaphat | 2011-07-10 23:16 | VBScirpt,WSH,バッチ | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/15095875
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< VBScriptで配列宣言時に... (OpenOfficeBasi... >>