Null
Functions for handling values that could be null.
If you also need to cover undefined, check out Nullable instead.
t
type t<'a> = Js.Null.t<'a> = Value('a) | NullA type representing a value that can be either 'a or null.
asNullable
let asNullable: t<'a> => Core__Nullable.t<'a>Converts a Null.t into a Nullable.t.
Examples
RESCRIPTlet nullValue = Null.make("Hello")
let asNullable = nullValue->Null.asNullable // Nullable.t<string>
null
let null: t<'a>make
let make: 'a => t<'a>Creates a new Null.t from the provided value.
This means the compiler will enforce null checks for the new value.
Examples
RESCRIPTlet myStr = "Hello"
let asNullValue = myStr->Null.make // The compiler now thinks this can be `string` or `null`.
equal
let equal: (t<'a>, t<'b>, ('a, 'b) => bool) => boolcompare
let compare: (
t<'a>,
t<'b>,
('a, 'b) => Core__Ordering.t,
) => Core__Ordering.ttoOption
let toOption: t<'a> => option<'a>Converts a nullable value into an option, so it can be pattern matched on.
Will convert null to None, and a present value to Some(value).
Examples
RESCRIPTlet nullStr = Null.make("Hello")
switch nullStr->Null.toOption {
| Some(str) => Console.log2("Got string:", str)
| None => Console.log("Didn't have a value.")
}
fromOption
let fromOption: option<'a> => t<'a>Turns an option into a Null.t. None will be converted to null.
Examples
RESCRIPTlet optString: option<string> = None
let asNull = optString->Null.fromOption // Null.t<string>
Console.log(asNull == Null.null) // Logs `true` to the console.
getOr
let getOr: (t<'a>, 'a) => 'agetOr(value, default) returns value if not null, otherwise return
default.
Examples
RESCRIPTNull.getOr(Null.null, "Banana") // Banana
Null.getOr(Null.make("Apple"), "Banana") // Apple
let greet = (firstName: option<string>) =>
"Greetings " ++ firstName->Option.getOr("Anonymous")
Null.make("Jane")->Null.toOption->greet // "Greetings Jane"
Null.null->Null.toOption->greet // "Greetings Anonymous"
getWithDefault
Deprecated
Use getOr instead
let getWithDefault: (t<'a>, 'a) => 'agetExn
let getExn: t<'a> => 'agetExn(value) raises an exception if null, otherwise returns the value.
RESCRIPTNull.getExn(Null.make(3)) // 3
Null.getExn(Null.null) /* Raises an Error */
Exceptions
Raises
Invalid_argumentifvalueisnull,
getUnsafe
let getUnsafe: t<'a> => 'agetUnsafe(value) returns value.
Examples
RESCRIPTNull.getUnsafe(Null.make(3)) == 3
Null.getUnsafe(Null.null) // Raises an error
Important
This is an unsafe operation, it assumes
valueis notnull.
forEach
let forEach: (t<'a>, 'a => unit) => unitforEach(value, f) call f on value. if value is not null, then if calls
f, otherwise returns unit.
Examples
RESCRIPTNull.forEach(Null.make("thing"), x => Console.log(x)) // logs "thing"
Null.forEach(Null.null, x => Console.log(x)) // logs nothing
map
let map: (t<'a>, 'a => 'b) => t<'b>map(value, f) returns f(value) if value is not null, otherwise returns
value unchanged.
Examples
RESCRIPTNull.map(Null.make(3), x => x * x) // Null.make(9)
Null.map(Null.null, x => x * x) // null
mapOr
let mapOr: (t<'a>, 'b, 'a => 'b) => 'bmapOr(value, default, f) returns f(value) if value is not null,
otherwise returns default.
Examples
RESCRIPTlet someValue = Null.make(3)
someValue->Null.mapOr(0, x => x + 5) // 8
let noneValue = Null.null
noneValue->Null.mapOr(0, x => x + 5) // 0
mapWithDefault
Deprecated
Use mapOr instead
let mapWithDefault: (t<'a>, 'b, 'a => 'b) => 'bflatMap
let flatMap: (t<'a>, 'a => t<'b>) => t<'b>flatMap(value, f) returns f(value) if value is not null, otherwise
returns value unchanged.
Examples
RESCRIPTlet addIfAboveOne = value =>
if (value > 1) {
Null.make(value + 1)
} else {
Null.null
}
Null.flatMap(Null.make(2), addIfAboveOne) // Null.make(3)
Null.flatMap(Null.make(-4), addIfAboveOne) // null
Null.flatMap(Null.null, addIfAboveOne) // null