Optionals in Java have been around for some time now, basically since the release of version 8. My other language of choice, C++, has received this feature in version C++17. Since I am currently in the process of writing some C++ code, I was curious how they were implemented there. Optionals are trying to solve a problem that is likely to plague any language. What shall a method or function return if there is no value? Or shall it not return anything but instead start crying like a petulant child and throw an exception?
As an introduction, let me dive a little bit into why we need
optionals (or do we?) and compare two different implementations of
this concept, one being
java.util.Optional and the other C++
std::optional. I chose to compare these two language for several
- I work with Java in my day job, so I have a good idea of how it works there.
- As mentioned, C++ is one of the languages I know quite well too.
- The main reason: both optional implementations are add-on classes rather than language features. More on that later.