Who said anything about panicking the minute we encounter incomplete data? Just do what Rust does and, instead of having all types be able to be null, statically enforce that all variables have an initialized value and have a value have a separate type Option<T>
which can either be Some(T)
or None
, and have the compiler not let you access the value inside unless you write code to handle the None
case. There are standard library helper functions for common operations like null coalescing and, as you say, panicking when you encounter a null, but you have to explicitly tell the compiler you want to do that by calling myOption.unwrap()
What makes this really cool is that you can have an Option<Option<T>> where Some(None)
is not the same as None
, so an iterator that signals end of list by returning None
can have None
elements in it.
Say what you will about the functional programming people but they were spot on with this one. Having an Option monad in place of the ability for null is absolutely the way to go. Iβd say itβs the future but Lisp and APL had this figured out in the 60s