Иногда при работе с Java возникает NullPointerException, это происходит потому, что некоторые методы могут возвращать null, а не ожидаемое вами значение и такое поведение не проверяется в использующем такую функцию коде. Значение null часто используется для представления отсутствующего значения.
При этом подобные концепции встречаться и в других языках, более того некоторые языки (например: Groovy) имеют встроенную поддержку конструкций для работы с такими значениями.
Scala пошла другим путем и создала свой тип для представления того, что значение может быть или его может не быть это трейт Option[A].
Option[A] – это контейнер для значения типа A, при этом если значение присутствует, то Option[A] – это экземпляр Some[A] содержащий значение типа A . Если значение отсутствует то Option[A] – это объект None.
Такой подход обязует всех разработчиков использующих док учитывать такую природу значений в своем коде, при этом работа с таким типом контролируется компилятором, что делает невозможным не правильную трактовку значений.