"""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|Object.equals]].""" see (`value null`) by ("Gavin") tagged("Basic types") shared abstract class Null() of null extends Anything() {} "The null value." by ("Gavin") tagged("Basic types") shared object null extends Null() {}