The type of the null value. Any union type of form Null|T is considered an optional type, whose values include null. Any type of this form may be written as T? for convenience.

The if (exists ... ) construct, or, alternatively, assert (exists ...), may be used to narrow an optional type to a definite type, that is, a subtype of Object:

String? firstArg = process.arguments.first;
if (exists firstArg) {
    print("hello " + firstArg);

The else operator evaluates its second operand if and only if its first operand is null:

String name = process.arguments.first else "world";

The then operator evaluates its second operand when its first operand evaluates to true, and produces null otherwise:

Float? diff = x>=y then x-y;

The ?. operator may be used to evaluate an attribute or invoke a method of an optional type, evaluating to null when the receiver is missing:

value [firstName, lastName] =
        let (fullName = process.arguments.first?.trimmed,
             bits = fullName?.split()?.sequence() else []) 
                [bits[0], bits[1]];
assert (exists firstName, exists lastName);

No equivalence relation is defined for Null. In particular, neither null==null nor null===null are considered meaningful. Therefore, Null is neither Identifiable, nor does it define value equality.

By: Gavin
See also null