Keyword Reference

Dim / Global / Local / Const

変数・定数の宣言。配列の作成。

Dim [Const] $variable [ = initializer ]
Dim [Const] $array[subscript 1]...[subscript n] [ = initializer ]

 

パラメータ

const [オプション] キーワードConstを指定した場合、変数でなく定数が作成されます。
$variable 宣言する変数名/定数名
initializer 変数の初期値。Constの場合は必ず指定します。初期化に関数呼び出しの値を使うこともできます。
subscript 配列の各次元での作成する要素数。0からn-1でインデックスされます。

 

注意

Dim/Local/Global キーワードは同じ機能を持ちます。
1. 変数を使用する前に変数を宣言(VBスクリプトと同様)
2. 配列を作成

Note: AutoItでは変数代入($myvar = 0)によって変数を作成できます。しかし多くの人は変数を明確に宣言することを好みます。AutoItSetOption("MustDeclareVars", 1)をアクティブにすると、変数は使用前に必ず宣言が必要になります。

また、1行で複数の変数の宣言をすることが可能です。

Dim $a, $b, $c


変数の初期化もできます。

Dim $a = 2, $b = 10, $c = 20



同様にして定数の作成もできます。

Const $a = 2, $b = 10, $c = 20
Dim Const $d = 21, $e = Exp(1)
Local Const $f = 5, $g = 7, $h = -2


一度作成した定数の値を変更することはできません。また、すでに存在する変数を定数に変更することもできません。



配列を初期化するためには、それぞれの要素の値を大括弧内でコンマで区切って指定してください。複数次元の場合は初期化を入れ子にしておこなってください。 宣言した要素数より少ない要素数を初期化することはできますが逆はできません。関数呼び出しを配列の初期化で使うこともできます。呼び出した関数が配列を返す場合、配列の1要素に返される配列が格納されます。

Dim $Array1[12]=[3, 7.5, "string"], $array[5] = [8, 4, 5, 9, 1]
Dim $Grid[2][4]=[["Paul", "Jim", "Richard", "Louis"], [485.44, 160.68, 275.16, 320.00]]
Dim $Test[5] = [3, 1, StringSplit("Abe|Jack|Bobby|Marty", "|"), Cos(0)]



Dim、Local、Globalの違いは作成時に決まるスコープ(作用範囲)の違いです。
Dim = もし同名のグローバル変数がなければローカル変数になります(この場合あとでグローバル変数として利用することができます!)。
Global = グローバル変数を作成します。
Local = ローカル/関数内変数を作成します。

変数/定数/配列のスコープを明確に定めたい場合はDimの代わりにLocalやGlobalを使用する必要があります。

変数が使用される場合にはまずローカルスコープがチェックされ、次にグローバルスコープがチェックされます。

作成できる配列は最大64次元、トータル1600万要素までです。

AutoItのユニークな特徴として次のような配列のコピーがあげられます。
$mycopy = $myarray
この場合、$mycopyは$myarrayの完全なコピーとなり同じ次元を持ちます - 配列のサイズを決めるためのDimは必要ありません。AutoItSetOption("MustDeclareVars", 1) がアクティブな場合、はじめに$mycopyを宣言する必要はありますがそのサイズを決めておく必要はありません。$mycopy内に値が代入されていた場合、その値はコピー前に消去されます。

配列を消去するためには(おそらくは大きくてグローバルな配列のメモリを開放したい場合でしょう)、配列に値をひとつ代入してください。
$array = 0
こうすると配列は開放され、値0の通常の変数に変換されます。

同じ変数名を再宣言すると配列の値すべてが消去され、次元が新しい定義に基づいてリセットされます。同じスコープ内で単純な値を使って変数を宣言した場合、変数内の値は変更されません。

ユーザー定義関数内でLocalを使用してパラメータと同じ名前の変数を宣言した場合、エラーが起きます。 Globalを使用して関数内でグローバル変数への代入をおこなうことができますが、ローカル変数(もしくはパラメータ)がグローバル変数と同じ名前を持っていた場合、ローカル変数のみが使用されます。ローカル変数とグローバル変数で異なる名前をつけることをお勧めします。

 

関連

UBound, ReDim, Static, AutoItSetOption

 

Example


; 例1 - 変数の宣言
Dim $x, $y = 23, $z
Global $_PI = 3.14159, $RADIUS
Local $_daysWorking = 5

; 例2 - 配列の宣言
Dim $weeklyWorkSchedule[$_daysWorking]
Global $chessBoard[8][8]
Local $mouseCoordinates[2], $windowStats[4]

; 例3 - 定数の宣言
Const $x1 = 11, $y1 = 23, $z1 = 55
Global Const $PI = 3.14159, $E = 2.71828
Local Const $daysWorking = 5