Nullable type
A class type is not a super type or a subtype of null
type.
So, a variable of a class type may not be set to null
.
Only a variable of a nullable type may be set to null
.
A nullable type is constructed from a class type.
Suppose that T
is a class type name.
Then, T | null
and T | undefined
are nullable types
(Note that null
and undefiend
are identical in BlueScript).
A variable of T | null
may be set to either a T
object or null
(or undefined
).
let r: Rectangle | null = null
r = new Rectangle(3.0, 4.0)
A nullable type is also constructed from the string
type and array types.
All the following types are valid nullable types.
string | null
integer[] | null
string[] | null
Uint8Array | null
However, integer | null
or float | null
is not a valid type.
Subtyping
If type T
is a subtype of S
, then T | null
is also a subtype of S | null
.
Type guards
BlueScript (currently) supports only a very simple type guard.
If a local varialbe of type T | null
is tested for null in the condition expression
of a if
statement, that variable is treated
as a variable of type T
in the then clause or the else clause.
function area(r: Rectangle | null): float {
if (r == null)
return 0.0;
else {
// the static type of r is Rectangle. Not Rectangle | null.
return r.getArea();
}
}
The expressions for testing must be either <variable> == null
or <variable> != null
.