Олег Петров@WelcomeToRussia
Tech Lead
Информация
- В рейтинге
- Не участвует
- Откуда
- Уфа, Башкортостан(Башкирия), Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Бэкенд разработчик, Delivery Manager
Ведущий
Java
Kotlin
Микросервисная архитектура
Spring Boot
Java Spring Framework
Допустим нам необходимо получить книгу
getBook(String id)и получить количество страницbook.getTotalPages().Рассмотрим 3 случая
Nullable
Optional
Null-object
Итого при реализации
getBookс
Nullableмы даем возможность ошибиться разработчику при его использованиис
Optionalмы обязываем обработать отсутствие значениес
Null-objectмы снимаем с разработчика дополнительную логику и реализовываем самиНе нужно вам возвращать
nullиз метода, уж поверьте. Не мне так популярным фреймворкам, где это применяют.Это вопрос требований и реализации логики. Где то уместно вывести имя "Unknown" и ничего не делать при "Отправить письмо" , а где то - нет.
Есть разные инструменты работы с nullable объектами, каждый инструмент подходит под свою задачу. О них подробнее напишу в следующей статье.
Nullableподойдет, чтобы пометить поле в объекте.Optionalи null-object подойдут для того, чтобы возвратить значение из метода.Nullableработает только в compile time.Optionalи null-object работают в runtime.Null-object не нужно проверять на то, что он "пустой". С ним работают так же как с обычным классом, но у него поведение "пустоты".
Конечно для каждого класса нужно описать Null-object, но это часть логики. Не во всех задачах подойдет такое решение.
null - есть и коробки, но его появление, как правило становиться неожиданностью, если не использовать аннотации или Optional.
Далее приведу простые примеры реализации null-object, которые дадут понять, что не нужно писать проверки:
строка содержащая что то:
И пустая строка, которая по сути null-object:
И с
someStringиnullObjectStringработать можно не думая о проверке наnull.Более сложный пример с пользовательским классом:
Согласен.
Есть еще способ - это default или null object.
Пример реализации null object можно подглядеть в jackson: https://fasterxml.github.io/jackson-databind/javadoc/2.9/com/fasterxml/jackson/databind/node/NullNode.html
Поле в объекте может быть null и это может быть валидное значение.
Но при этом getter поля может возвратить Optional или Null\Default object.
Например,
или
Не вспомню случая, когда возвратить из метода
nullзначение - это было бы хорошо. Разве что для обратной совместимости или при использовании библиотек, где возвращениеnull- это часть контрактаВсе зависит от реализуемой логики. Явные проверки необходимы, если объект nullable и это ожидаемое поведение. Вы привели только лишь один случай, когда null - это ошибка:
Если
nameне должен бытьnullи это ошибка, то несомнено нужно бросить исключение, но читаемое и понятное.А вот несколько примеров, когда
null- это ожидаемое значениеСтатья всё же не про "Используем конференции для влияния на IT в России". Возникает вопрос в конце статьи, как использовать то?
Понравилась мысль про "снижении степени неопределенности и неизвестности". Это то, чем в принципе занимаются зрелые специалисты в ИТ, по крайней мере, я в это верю.
Часто на конференция делятся кейсами, которые не работают для других. Лучшие практики это все таки результат работы коммьюнити и переработки тонны материалов.
Жаль, что всё по верхам, философия в основном.