Basic types

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`

- `Anything`
  - `Null`

- `Null`
  - `Anything`

- `Null` of
  - `null`

Initializer
`Null()`