ornull is a type suffix that flags the variable to be able to contain null. This is required for nesting structs inside themselves to ensure they are fixed size.

ornull makes any type complex and stops you from using any inbuilt functions or passing it to a function that does not expect that exact ornull type.

To use the value of an ornull variable you need to ensure that it is not null and then cast to the correct type.

int ornull n = null
n = 1

if( n != null )
 expect int( n ) // n is now in this scope an int
 n += 2

print( n ) // 3

Being required to cast the value of ornull variables makes it impossible to use it with types that cannot be casted like complex arrays. You can still make complex ornull variables, just be aware that the content type can never be recasted.

You can use ornull types in complex type as well, for example in complex arrays.

array<int ornull> a = [ 1, null ]
a.append( 2 )
a.append( null )

Additionally, ornull is useful for adding optional parameters to functions that need to preserve backwards compatability.

SomeAPIFunction( int ornull n = null ) {}

// both are valid
SomeAPIFunction( 1 )

Default Values#

ornull-ing a type will make a variable always default initia will make a variable always default initialize with null instead of the types respective default value.lize with null instead of the types respective default value.