3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(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