The coalesce binary expression evaluates to the first non-nil value. There is an augmented assignment version of it as well.


<a> ? <b>

The expression evaluates to a unless that value is nil, in which case, it evaluates to b.

Although uncommon, nothing prevents b itself from also being nil. Neither expression will be evaluated more than once and if a is non-nil then b will not be evaluated at all.

The type of the coalesce expression is the greatest common denominator between the type of a and the type of b.


<a> ?= <b>

In the augmented assignment version, the result is assigned back to a. This requires that b is type compatible with a or a compilation error will occur.

# Example 1 
print name ? 'NONAME' 

# Example 2 
def foo(factor as decimal?) 
    factor ?= 1 # 'normalize' factor before proceeding with the rest of implementation 

# Example 3 
get name as String
    return _name ? 

# Example 4 
# this: 
name = if(<>nil,, 'NONAME') 
# can evaluate the key expression twice and is less succinct than: 
name = ? 'NONAME'