Embarrassingly, it took me almost seven years to notice the full meaning of Option/Nullable
type combined with mechanism like pattern matching.
The first layer is pretty obvious — consider such language as C# and its struct type. It is totally safe to use because it does not allow null
. The separate world is nullable struct, here you can use null
but your code is safer anyway because there is distinction between pure struct instance and nullable one. Until you write:
nullable_printer.Value.Print();
You pass null
and boom, you have exception in your hands. The problem in this case is you can access the internals of nullable type.
Skila does not have pattern matching, but similarly it treats Option
as black box — you cannot dereference it, you cannot access any of its member, the one thing you can do is decompose it. Conditionally:
if let printer ?= nullable_printer then printer.Print(); end
The optional declaration is successful only when we don’t have null
. This way working with null
is completely safe because compiler guarantees the logic flow is solid and you don‘t see any NullException
. One thing less to worry, so I call it a progress.