Null coalescing operator

The null coalescing operator is a binary operator that is part of the syntax for a basic conditional expression in several programming languages, such as (in alphabetical order): C# since version 2.0, Dart since version 1.12.0, PHP since version 7.0.0, Perl since version 5.10 as logical defined-or, PowerShell since 7.0.0, and Swift as nil-coalescing operator.

While its behavior differs between implementations, the null coalescing operator generally returns the result of its left-most operand if it exists and is not null, and otherwise returns the right-most operand. This behavior allows a default value to be defined for cases where a more specific value is not available.

In contrast to the ternary conditional if operator used as, but like the binary Elvis operator used as  , the null coalescing operator is a binary operator and thus evaluates its operands at most once, which is significant if the evaluation of   has side-effects.

Bourne-like shells
In Bourne shell (and derivatives), "If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted":

C#
In C#, the null coalescing operator is.

It is most often used to simplify expressions as follows:

For example, if one wishes to implement some C# code to give a page a default title if none is present, one may use the following statement:

instead of the more verbose or

The three forms result in the same value being stored into the variable named.

is referenced only once when using the  operator, and twice in the other two code examples.

The operator can also be used multiple times in the same expression: Once a non-null value is assigned to number, or it reaches the final value (which may or may not be null), the expression is completed.

If, for example, a variable should be changed to another value if its value evaluates to null, since C# 8.0 the  null coalescing assignment operator can be used:

Which is a more concise version of:

In combination with the null-conditional operator  or the null-conditional element access operator   the null coalescing operator can be used to provide a default value if an object or an object's member is null. For example, the following will return the default title if either the  object is null or   is not null but its   property is:

CFML
As of ColdFusion 11, Railo 4.1, CFML supports the null coalescing operator as a variation of the ternary operator,. It is functionally and syntactically equivalent to its C# counterpart, above. Example:

F#
The null value is not normally used in F# for values or variables. However null values can appear for example when F# code is called from C#.

F# does not have a built-in null coalescing operator but one can be defined as required as a custom operator:

This custom operator can then be applied as per C#'s built-in null coalescing operator:

Freemarker
Missing values in Apache FreeMarker will normally cause exceptions. However, both missing and null values can be handled, with an optional default value:

or, to leave the output blank:

Haskell
Types in Haskell can in general not be null. Representation of computations that may or may not return a meaningful result is represented by the generic Maybe type, defined in the standard library as

The null coalescing operator replaces null pointers with a default value. The Haskell equivalent is a way of extracting a value from a Maybe by supplying a default value. This is the function fromMaybe.

Some example usage follows.

JavaScript
JavaScript's nearest operator is, the "nullish coalescing operator", which was added to the standard in ECMAScript's 11th edition. In earlier versions, it could be used via a Babel plugin, and in TypeScript. It evaluates its left-hand operand and, if the result value is not "nullish" ( or  ), takes that value as its result; otherwise, it evaluates the right-hand operand and takes the resulting value as its result.

In the following example,  will be assigned the value of   if the value of   is not   or , otherwise it will be assigned 3.

Before the nullish coalescing operator, programmers would use the logical OR operator. But where  looks specifically for   or , the   operator looks for any falsy value:  ,  ,  ,  ,  , and of course,.

In the following example,  will be assigned the value of   if the value of   is truthy, otherwise it will be assigned 3.

Kotlin
Kotlin uses the  operator. This is an unusual choice of symbol, given that  is typically used for the Elvis operator, not null coalescing, but it was inspired by Groovy (programming language) where null is considered false.

Objective-C
In Obj-C, the nil coalescing operator is. It can be used to provide a default for nil references:

This is the same as writing

Perl
In Perl (starting with version 5.10), the operator is  and the equivalent Perl code is:

The possibly_null_value is evaluated as null or not-null (in Perl terminology, undefined or defined). On the basis of the evaluation, the expression returns either value_if_null when possibly_null_value is null, or possibly_null_value otherwise. In the absence of side-effects this is similar to the way ternary operators (  statements) work in languages that support them. The above Perl code is equivalent to the use of the ternary operator below: This operator's most common usage is to minimize the amount of code used for a simple null check.

Perl additionally has a  assignment operator, where   is largely equivalent to:

This operator differs from Perl's older  and   operators in that it considers definedness, not truth. Thus they behave differently on values that are false but defined, such as 0 or "" (a zero-length string):

PHP
PHP 7.0 introduced a null-coalescing operator with the  syntax. This checks strictly for NULL or a non-existent variable/array index/property. In this respect, it acts similarly to PHP's  pseudo-function:

Version 7.4 of PHP will add the Null Coalescing Assignment Operator with the  syntax:

Python
Python does not have a null coalescing operator. Its functionality can be mimicked using a conditional expression:

There was a proposal to add null-coalescing-type operators in Python 3.8, but that proposal has been deferred.

Related functionality
Python's or operator provides a related, but different behavior. The difference is that or also returns the right hand term if the first term is defined, but has a value that evaluates to False in a boolean context:

A true null coalescing operator would only return "something" in the very last case, and would return the false-ish values (0, False, "", [], dict) in the other examples.

PowerShell
Since PowerShell 7, the  null coalescing operator provides this functionality.

R
Since R version 4.4.0  operator is included in base R (previously it was a feature of some packages like rlang).

Ruby
Ruby does not have a null-coalescing operator, but its  and   operators work the same way except on Booleans. Ruby conditionals have only two false-like values:  and   (where 'false' is not the same as 0). Ruby's  operator evaluates to its first operand when true-like. In comparison, Perl/Python/Javascript, which also have the latter property, have other false-like values (0 and empty string), which make  differ from a null-coalescing operator in many more cases (numbers and strings being two of the most frequently used data types). This is what led Perl/Python/Javascript to add a separate operator while Ruby hasn't.

Rust
While there's no  in Rust, tagged unions are used for the same purpose. For example,  or. Any type implementing the Try trait can be unwrapped.

serves a similar purpose as the null coalescing operator in other languages. Alternatively,  can be used to use the result of a function as a default value.

SQL
In Oracle's PL/SQL, the NVL function provides the same outcome:

In SQL Server/Transact-SQL there is the ISNULL function that follows the same prototype pattern: Attention should be taken to not confuse ISNULL with IS NULL – the latter serves to evaluate whether some contents are defined to be NULL or not.

The ANSI SQL-92 standard includes the COALESCE function implemented in Oracle, SQL Server, PostgreSQL, SQLite and MySQL. The COALESCE function returns the first argument that is not null. If all terms are null, returns null. The difference between ISNULL and COALESCE is that the type returned by ISNULL is the type of the leftmost value while COALESCE returns the type of the first non-null value.

Swift
In Swift, the nil coalescing operator is. It is used to provide a default when unwrapping an optional type:

For example, if one wishes to implement some Swift code to give a page a default title if none is present, one may use the following statement:

instead of the more verbose

VB.NET
In VB.NET the operator/keyword achieves the null coalescing operator effect.

which is a more concise way of using its variation