VBScript: リテラル定数にまつわる調査
VBScript において、Const ステートメントで使用できるリテラル定数は以下のように分類される。
(1) 数値
1-1 Integer
・16ビットの符号付き整数 (-2^15 .. 2^15)
例:0, 32767, -32767, 01 (先頭の0は無視される), &O10 (8進数), &H7fff (16進数), &10 (8進数と同等)
※-32768, &H8000 はInteger型ではない。他の言語と異なるので注意。
1-2 Long
・32ビットの符号付き整数 [-2^31 .. -2^15], [2^15 .. 2^31)
例:-2147483647, –32768, 32768, 2147483647, &H7fffffff, &Hffffffff
※-2147483648 は Long型でない(Double型)が、&H80000000 は Long型である。奇妙な仕様。
1-2 Double
・小数点付きの数値表現
・科学表記 (表現可能は範囲の限界は 1e+308 程度?)
・Long の範囲を超えた整数
例:0., 3.14159265358979, 1e2, 1.2e-3, 2147483648, –2147483648
(2) 文字列
2-1 String
・文字列を "" で囲むと文字列定数となる
例:""(空の文字列), """" (1個のダブルクォーテーション), "Hello, World"
※VBScript によって定義されている定数を、Const に再利用することはできない。
vbCrLf (Windows の改行文字: キャリッジリターン+ラインフィード),
vbNullChar (1個のnull文字), vbNullString (長さが0の文字列、ただし""と比較しても一致しない) など
(3) 日付
3-1 Date
・フォーマットに従った日付表記を ## で囲むと日付・時刻を示す定数となる
例:#1-2#, #01-02#, #1/2#, #1 2#, #Jan-2#, #2-Jan#, "2,January" (現在の年、1月2日 0時0分0秒)
#1-2-3#, #2003-1-2#, #2-3-Jan#, #2003-2-Jan#, (2003年1月2日 0時0分0秒)
#4:5#, #04:05#, #4:5 AM# (1899年12月30日 4時5分0秒)
#4:5:6#, #04:05:06#, (1899年12月30日 4時5分6秒)
#1-2-3 4:5:6#, #4:5:6 1-2-3#, #2003-01-02 04:05:06# (2003年1月2日 4時5分6秒)
※日付表記において、「-」・「/」・「,」・連続したホワイトスペース文字(全角半角空白、タブ)は同じ意味となるようだ。
※日付フォーマットはOSのロケール設定に依存する
(4) 真偽値
4-1 Boolean
・True (=-1) または False(=0)
(5) Empty値、Null値
5-1 Empty
・Empty (未初期化値)
5-2 Null
・Null (無効な値)
・検証用コード(CheckType.vbs)
If WScript.FullName <> WScript.Path & "\cscript.exe" Then
Dim args, i, shell
args = """" & WScript.ScriptFullName & """"
For Each i In WScript.Arguments: args = args & " """ & i & """": Next
Set shell = CreateObject("WScript.Shell")
shell.Run WScript.Path & "\cscript.exe //NOLOGO " & args, 1, False
WScript.Quit
End If
Check "0"
Check "1"
Check "0000000000000000001"
Check "32767" ' 2^15-1
Check "32768" ' 2^15
Check "2147483647" ' 2^31-1
Check "2147483648" ' 2^31
Check "-0"
Check "-1"
Check "-32767" ' -(2^15-1)
Check "-32768" ' -(2^15)
Check "-2147483647" ' -(2^31-1)
Check "-2147483648" ' -(2^31)
Check "&O000000" ' 0
Check "&O00000000000" ' 0
Check "&O00000000001" ' 1
Check "&O77777" ' 2^15-1
Check "&O17777777777" ' 2^31-1
Check "&O177777" ' -1
Check "&O37777777777" ' -1
Check "&O100001" ' -(2^15-1)
Check "&O100000" ' -(2^15)
Check "&O20000000001" ' -(2^31-1)
Check "&O20000000000" ' -(2^31)
Check "&H0000" ' 0
Check "&H00000000" ' 0
Check "&H00000001" ' 1
Check "&H7fff" ' 2^15-1
Check "&H10000" ' 2^15
Check "&H7fffffff" ' 2^31-1
Check "&Hffff" ' -1
Check "&Hffffffff" ' -1
Check "&H8001" ' -(2^15-1)
Check "&H8000" ' -(2^15)
Check "&H80000001" ' -(2^31-1)
Check "&H80000000" ' -(2^31)
Check "0."
Check "3.14159265358979"
Check "1e2"
Check "1.2e-3"
Check """"""
Check """"""""""
Check """Hello, World"""
Check "#1-2#"
Check "#01-02#"
Check "#1/2#"
Check "#1 2#"
Check "#Jan-2#"
Check "#2-Jan#"
Check "#1-2-3#"
Check "#2003-1-2#"
Check "#2-3-Jan#"
Check "#2003-2-Jan#"
Check "#4:5#"
Check "#04:05#"
Check "#4:5:6#"
Check "#04:05:06#"
Check "#1-2-3 4:5:6#"
Check "#4:5:6 1-2-3#"
Check "#2003-01-02 04:05:06#"
Check "True"
Check "False"
Check "Empty"
Check "Null"
MsgBox "Click OK to exit."
Function Check(ByVal description)
WScript.StdOut.Write description & String(24 - Len(description), " ")
Execute "WScript.Echo VarType(" & description & ") & "": "" & TypeName(" & description & ")"
End Function
・出力結果
0 2: Integer
1 2: Integer
0000000000000000001 2: Integer
32767 2: Integer
32768 3: Long
2147483647 3: Long
2147483648 5: Double
-0 2: Integer
-1 2: Integer
-32767 2: Integer
-32768 3: Long
-2147483647 3: Long
-2147483648 5: Double
&O000000 2: Integer
&O00000000000 2: Integer
&O00000000001 2: Integer
&O77777 2: Integer
&O17777777777 3: Long
&O177777 2: Integer
&O37777777777 2: Integer
&O100001 2: Integer
&O100000 3: Long
&O20000000001 3: Long
&O20000000000 3: Long
&H0000 2: Integer
&H00000000 2: Integer
&H00000001 2: Integer
&H7fff 2: Integer
&H10000 3: Long
&H7fffffff 3: Long
&Hffff 2: Integer
&Hffffffff 2: Integer
&H8001 2: Integer
&H8000 3: Long
&H80000001 3: Long
&H80000000 3: Long
0. 5: Double
3.14159265358979 5: Double
1e2 5: Double
1.2e-3 5: Double
"" 8: String
"""" 8: String
"Hello, World" 8: String
#1-2# 7: Date
#01-02# 7: Date
#1/2# 7: Date
#1 2# 7: Date
#Jan-2# 7: Date
#2-Jan# 7: Date
#1-2-3# 7: Date
#2003-1-2# 7: Date
#2-3-Jan# 7: Date
#2003-2-Jan# 7: Date
#4:5# 7: Date
#04:05# 7: Date
#4:5:6# 7: Date
#04:05:06# 7: Date
#1-2-3 4:5:6# 7: Date
#4:5:6 1-2-3# 7: Date
#2003-01-02 04:05:06# 7: Date
True 11: Boolean
False 11: Boolean
Empty 0: Empty
Null 1: Null
参考:
VarType 関数
http://msdn.microsoft.com/ja-jp/library/cc392346.aspx