4 comments

[ 4.5 ms ] story [ 19.7 ms ] thread
I feel like that's just a weaker attempt at something like Maybe (Haskell) or Option (Rust).
It is not much weaker, but more pragmatic. A typical application has this need to represent a "missing" value quite often and adding a special `?`-based syntax for it totally pays of in practice.

However, it is important to not that `String?` in Kotlin is not a syntactic sugar for `Option<String>`, but a syntactic sugar for `String|null`. The difference between the two might seem minor, but is quite big pragmatically, especially when combined with flow-sensitive typing.

It seems like the author actually likes Java's Optional pattern but needs some syntactic sugar to make the medicine go down.

Because

    int id = args.getOptional().orElseThrow(() -> new Error("id expected"));
isn't that different than the author's Kotlin example.
Somebody finally gets it!

Null is a concept--there is no data here. We need the concept and code needs to be able to act on it. If you rewrite the code to avoid all possible nulls you have done nothing to ensure that everything is operating on sane data, you have simply removed the easy mechanism that flagged cases the developer failed to handle.

In most cases you're better off going boom than operating on wrong data and getting rid of nulls shifts the balance towards the latter.