LoginSignup
4
3

More than 5 years have passed since last update.

VBScriptの暗黙的キャストの罠

Posted at

VBScriptを触る機会があり、ちょっと不思議な挙動に出くわしたので書いてみる。
その道の人には既知かもしれないし、今後あまり触れることもないだろう。

比較演算子の挙動

公式のリファレンスをみましょう。
https://msdn.microsoft.com/ja-jp/library/cc392349.aspx

下の方に値に応じた処理内容の表がありますが、この中に一部気になる条件があります。
「一方の式が数値、他方が文字列」 => 「数式の方が文字列式より小さくなります。」

何を言っているのかよくわかりませんね。どうやら数値に落としての比較はしないってことのようです。
なんとなく期待される挙動としてはこういうことでしょうか。

10 < "a" '=> True
10 < "5" '=> True

しかし、現実は違います。

10 < "a" '=> Error: 型が一致しません。: '[string: "a"]' 
10 < "5" '=> False

どうやら、暗黙的に数値にキャストして比較してしまうようです。公式リファレンスとは何だったのか…。

変数に格納すると挙動が変わる

ところが、ちょっとだけ変化を加えるだけでリファレンス通りの挙動になります。

Dim n
n = 10
n < "a" '=> True
n < "5" '=> True

変数に格納しただけで暗黙的なキャストが効かなくなるようです。
なんでしょうね、このキモい挙動は…。

まとめ

ちゃんと比較したいなら CLng などで明示的にキャストしましょう。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3