IsSet / IsSetRef

指定された変数に値が割り当てられている場合、0以外の数値を返します。

Boolean := IsSet(Var)
Boolean := IsSetRef(&Ref)

パラメータ

Var

型:変数

直接の変数参照です。事例:IsSet(MyVar)

&Ref

型:VarRef

変数への間接的な参照。これは通常、IsSetRef(&MyVar)のように直接渡されるのではなく、VarRefを含むパラメータを再参照する前にチェックするような間接的なものである。

戻り値

型:整数(ブーリアン)

この関数は VarまたはRef で表される変数に値が割り当てられていれば1 (true)を返し、そうでなければ0 (false)を返します。

備考

IsSet(MyGlobalVar)のように、変数を直接チェックする場合は、IsSetを使用します。

IsSetRefを使用すると、以下の例のように、通常変数に含まれるVarRefをチェックすることができます。

値が割り当てられていない変数は、uninitialized variableとも呼ばれます。初期化されていない変数を読み込もうとすると、例外が発生します。IsSetは、グローバル変数や静的変数の初回使用時の初期化など、これを回避するために使用することができます。

注: static my_static_array := []のような静的初期化子は、実行中に最初に到達したときに一度だけ評価されるため、通常、IsSetの使用は必要ありません。

IsSetは関数呼び出しと同じ構文を使っていますが、関数というより演算子と考えた方がいいかもしれません。キーワードIsSetは、ここに示す用途のために予約されており、変数や関数として再定義することはできない。初期化されていない変数を渡そうとするとエラーが発生するため、IsSetを間接的に呼び出すことはできない。

IsSetRefは、参照演算子と併用することで、特定の変数をチェックすることも可能です。このような使い方をする場合、変数がグローバルな場合は最初に宣言する必要があることに注意してください。例えば、IsSetRef(&MyVar)&は、global MyVarの宣言がない想定ローカル関数内で使用すると、MyVarがデフォルトでローカル変数に解決されます。

ByRefパラメータ

IsSetとIsSetRefの使い分けを紹介しています。

Loop 2
    if !IsSet(MyVar)  ; MyVarの最初の「使用」か?
        MyVar := A_Index  ; 初期化
MsgBox Function1(&MyVar)
MsgBox Function2(&MyVar)

Function1(&Param)  ; ByRefパラメータ
{
    if IsSet(Param)  ; MyVarのエイリアスであるParamそのものを渡します。
        return Param  ; ByRefパラメータは自動的に再参照される。
    else
        return "unset"
}

Function2(Param)
{
    if IsSetRef(Param)  ; Paramが含むVarRefを渡す。
        return %Param%  ; 明示的にParamをデリファレンスする。
    else
        return "unset"
}