Optional
Type
NPL does not have null, but in practice it is not always possible to assign meaningful values to everything
immediately. For such cases there is Optional<T>. Optional<T> is a native NPL union type between Some<T> and
None, where T is the type of the wrapped item (which can be of any type).
Optionals are instantiated using optionalOf.
Accessing the value of an Optional<> is accomplished through getOrFail() or getOrElse(), whereas inspecting
whether it contains a value is accomplished through isPresent() (see Methods section below). Additionally, pattern
matching can be done via match.
Note that it is considered best practice to always initialize variables with meaningful values when possible.
Methods
computeIfAbsent
<function> Returns the value of an optional if present, or returns a computed result if empty. The computation is not invoked if the optional is not empty, making this is a lazy alternative to Optional<T>.getOrElse.
Receiver
Optional<T>
Type Arguments
T - the optional's payload
Arguments
default - () -> T - function or closure that returns the value in case the optional is empty
Returns
T - the optional's value if present, or the computed result if empty
Usage
// If the Optional is empty, the value lazily
// computed by the provided function is returned.
optionalOf<Number>().computeIfAbsent(function() -> 42) == 42
// If the Optional is *not* empty,
// the Optional's payload is returned.
optionalOf(21).computeIfAbsent(function() -> 42) == 21
getOrElse
<function>
Returns the value inside the optional if present, or the default value otherwise.
Receiver
Optional<T>
Type Arguments
T
Arguments
default - T - value to return if optional contains no value
Returns
T - the value inside the optional if present, otherwise default
Usage
optionalOf<Number>(42).getOrElse(1) == 42
optionalOf<Number>().getOrElse(1) == 1
getOrFail
<function> Returns the value inside the optional if present, or causes a runtime error otherwise.
Receiver
Optional<T>
Type Arguments
T
Returns
T
Usage
optionalOf<Number>().getOrFail() // Throws a run-time exception
isPresent
<function>
Returns true if a value is present in the optional, and false otherwise.
Receiver
Optional<T>
Type Arguments
T
Returns
Boolean - true if a value is present in the optional, otherwise false
Usage
optionalOf<Number>(42).isPresent() == true
optionalOf<Number>().isPresent() == false
Inherited methods
toText
<function>
Obtain the Text representation of this.
Receiver
T
Type Arguments
T
Returns
Text - the Text representation of this
Usage
Converts an Optional<T> to Text.
optionalOf<Number>(42).toText() == "/lang/core/Some<Number> { result: 42 }"
optionalOf<Number>().toText() == "/lang/core/None { }"