Nullable types are a feature of some
programming languages which allow a value to be set to the special value NULL instead of the usual possible values of the
data type
In computer science and computer programming, a data type (or simply type) is a set of possible values and a set of allowed operations on it. A data type tells the compiler or interpreter how the programmer intends to use the data. Most progra ...
. In statically typed languages, a nullable type is an
option type, while in dynamically typed languages (where values have types, but variables do not), equivalent behavior is provided by having a single null value.
NULL is frequently used to represent a missing value or invalid value, such as from a function that failed to return or a missing field in a database, as in
NULL in
SQL. In other words NULL is undefined.
Primitive types such as
integers and
Booleans cannot generally be null, but the corresponding nullable types (nullable integer and nullable Boolean, respectively) can also assume the NULL value. This can be represented in ternary logic as FALSE,NULL,TRUE as in
three-valued logic.
Example
An integer variable may represent integers, but 0 (zero) is a special case because 0 in many programming languages can mean "false". Also this doesn't give us any notion of saying that the variable is empty, a need for which occurs in many circumstances. This need can be achieved with a nullable type. In programming languages like
C# 2.0, a nullable integer, for example, can be declared by a question mark (int? x).
In programming languages like
C# 1.0, nullable types can be defined by an external library
as new types (e.g. NullableInteger, NullableBoolean).
A Boolean variable makes the effect more clear. Its values can be either "true" or "false", while a nullable boolean may also contain a representation for "undecided". However, the interpretation or treatment of a logical operation involving such a variable depends on the language.
Compared with null pointers
In contrast, object
pointers can be set to
NULL by default in most common languages, meaning that the pointer or reference points to nowhere, that no object is assigned (the variable does not point to any object).
Nullable references were invented by
C. A. R. Hoare
Sir Charles Antony Richard Hoare (Tony Hoare or C. A. R. Hoare) (born 11 January 1934) is a British computer scientist who has made foundational contributions to programming languages, algorithms, operating systems, formal verification, and c ...
in 1965 as part of the
Algol W language. Hoare later described his invention as a "billion-dollar mistake". This is because object pointers that can be NULL require the user to check the pointer before using it and require specific code to handle the case when the object pointer is NULL.
Java has classes that correspond to scalar values, such as Integer, Boolean and Float. Combined with
autoboxing
In computer science, boxing (a.k.a. wrapping) is the transformation of placing a primitive type within an object so that the value can be used as a reference. Unboxing is the reverse transformation of extracting the primitive value from its wrap ...
(automatic usage-driven conversion between object and value), this effectively allows nullable variables for scalar values.
Compared with option types
Nullable type implementations usually adhere to the
null object pattern.
There is a more general and formal concept that extend the nullable type concept, it comes from
option types, which enforce explicit handling of the exceptional case.
Language support
The following programming languages support nullable types.
Statically typed languages with native null support include:
*
Ballerina
*
C#
*
Dart
Dart or DART may refer to:
* Dart, the equipment in the game of darts
Arts, entertainment and media
* Dart (comics), an Image Comics superhero
* Dart, a character from ''G.I. Joe''
* Dart, a ''Thomas & Friends'' railway engine character
* Dar ...
*
Kotlin
*
Swift
*
Ceylon
Sri Lanka (, ; si, ශ්රී ලංකා, Śrī Laṅkā, translit-std=ISO (); ta, இலங்கை, Ilaṅkai, translit-std=ISO ()), formerly known as Ceylon and officially the Democratic Socialist Republic of Sri Lanka, is an ...
*
SQL
*
SAS
SAS or Sas may refer to:
Arts, entertainment, and media
* ''SAS'' (novel series), a French book series by Gérard de Villiers
* ''Shimmer and Shine'', an American animated children's television series
* Southern All Stars, a Japanese rock ba ...
(Missing values)
Statically typed languages with library null support include:
*
C# (since version 2)
*
Delphi
Delphi (; ), in legend previously called Pytho (Πυθώ), in ancient times was a sacred precinct that served as the seat of Pythia, the major oracle who was consulted about important decisions throughout the ancient classical world. The oracle ...
*
Free Pascal
*
VB.NET
Visual Basic, originally called Visual Basic .NET (VB.NET), is a multi-paradigm, object-oriented programming language, implemented on .NET, Mono, and the .NET Framework. Microsoft launched VB.NET in 2002 as the successor to its original Visua ...
*
Java (since version 8)
*
Scala
*
Oxygene
*
F#
* Statically typed
CLI languages
Dynamically-typed languages with null include:
*
Perl scalar variables default to
undef
and can be set to
undef
.
*
PHP with NULL type and is_null() method, native nullable type in version 7.1
*
Python has the
None
value.
*
Julia has the
nothing
value (which is of type
Nothing
) and the
Union
type idiom.
*
Ruby with nil value and NilClass type.
*
JavaScript has a
null
value
See also
*
Null coalescing operator
*
Semipredicate problem
*
Union type
In computer science, a union is a value that may have any of several representations or formats within the same position in memory; that consists of a variable that may hold such a data structure. Some programming languages support special data t ...
*
Unit type
References
{{nulls
Type theory