Выразительный код с Java Optionals

Каждый из нас, кто программировал на языках, которые позволяют ссылаться на null, знает, что произойдет, когда вы попытаетесь получить значение подобной переменной. Независимо от того, будет ли это segfault или появление NullPointerException, это всегда является ошибкой. Tony Hoare описал это поведение как ошибку на один миллиард долларов (https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare). Обычно проблема появляется тогда, когда функция возвращает ссылку на null клиенту, в то время как это совсем не ожидалось разработчиком клиента. Скажем, в коде подобном такому:

User user = userRepository.find("Alice");

Сообразительный программист сразу подумает о том, что должно произойти, когда мы не найдем пользователя с именем «Alice», однако в самой сигнатуре метода find() так ничего и не будет говорить, что подобное поведение возможно. Типичное решение в мире Java в прошлом заключалось бы в том, что метод выбрасывал бы проверяемое исключение, например UserNotFoundException, которое определённо бы говорило разработчику клиента, что подобное поведение возможно, однако никаким образом не улучшало бы выразительность кода. Отлов исключений в коде мешает его пониманию. Также следует заметить, что работа с проверяемыми исключениями больше не в почёте, и люди больше не стремятся писать код, который бы выбрасывал их.
Продолжить чтение “Выразительный код с Java Optionals”