IsSet / IsSetRef

Gibt eine Zahl ungleich 0 zurück, wenn einer bestimmten Variable ein Wert zugewiesen wurde.

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

Parameter

Var

Typ: Variable

Eine direkte Variablenreferenz. Zum Beispiel: IsSet(MeineVar).

&Ref

Typ: VarRef

Eine indirekte Referenz, die auf die Variable verweist. Dies wird normalerweise nicht direkt übergeben, wie in IsSetRef(&MeineVar), sondern indirekt, z.B. um einen Parameter, der eine VarRef enthält, vor der Dereferenzierung zu prüfen.

Rückgabewert

Typ: Integer (boolesch)

Diese Funktion gibt 1 (true) zurück, wenn Var oder die durch Ref repräsentierte Variable einen Wert zugewiesen bekommen hat, andernfalls 0 (false).

Bemerkungen

Verwenden Sie IsSet, um eine Variable direkt zu prüfen, wie in IsSet(MeineGlobaleVar).

Verwenden Sie IsSetRef, um eine VarRef zu prüfen, die typischerweise in einer Variable enthalten ist, wie im Beispiel unten.

Eine Variable ohne zugewiesenen Wert wird auch als uninitialisierte Variable bezeichnet. Der Versuch, eine uninitialisierte Variable zu lesen, führt dazu, dass eine Ausnahme ausgelöst wird. IsSet kann verwendet werden, um dies zu vermeiden, z.B. um eine globale oder statische Variable bei der ersten Verwendung zu initialisieren.

Hinweis: Statische Initialisierungen wie z.B. static mein_statisches_array := [] werden nur einmal ausgewertet (wenn sie erstmalig während der Skriptausführung erreicht werden) und erfordern daher normalerweise nicht die Verwendung von IsSet.

Obwohl IsSet dieselbe Syntax wie ein Funktionsaufruf verwendet, ist IsSet eher ein Operator als eine Funktion. Das Schlüsselwort IsSet ist für die hier gezeigte Verwendung reserviert und kann nicht in eine Variable oder Funktion umdefiniert werden. IsSet kann nicht indirekt aufgerufen werden, da jeder Versuch, eine uninitialisierte Variable zu übergeben, einen Fehler auslösen würde.

IsSetRef kann auch verwendet werden, um eine bestimmte Variable zu prüfen, indem sie mit dem Referenzoperator verwendet wird. In diesem Fall ist zu beachten, dass vorher die Variable deklariert werden muss, wenn sie global ist. Zum Beispiel bewirkt das & in IsSetRef(&MeineVar), dass MeineVar standardmäßig in eine lokale Variable aufgelöst wird, wenn es innerhalb einer Assume-Local-Funktion verwendet wird, die nicht die Deklaration global MeineVar enthält.

ByRef-Parameter

Beispiele

Zeigt verschiedene Verwendungen von IsSet und IsSetRef.

Loop 2
    if !IsSet(MeineVar)  ; Wird MeineVar erstmalig "verwendet"?
        MeineVar := A_Index  ; Initialisieren.
MsgBox Funktion1(&MeineVar)
MsgBox Funktion2(&MeineVar)

Funktion1(&Param)  ; ByRef-Parameter.
{
    if IsSet(Param)  ; Param selbst übergeben, was ein Alias für MeineVar ist.
        return Param  ; ByRef-Parameter werden automatisch dereferenziert.
    else
        return "ungesetzt"
}

Funktion2(Param)
{
    if IsSetRef(Param)  ; Die in Param enthaltene VarRef übergeben.
        return %Param%  ; Param explizit dereferenzieren.
    else
        return "ungesetzt"
}