Страницы

Поиск по вопросам

понедельник, 29 октября 2018 г.

Где имеет смысл использовать Optional?

В следующей статье про Optional такое резюме:
не загрязняйте свой код использованием везде Optional, используйте их осторожно, где это имеет смысл (don't pollute your code with Optional everywhere, use them carefully where it makes sense).
А где имеет смысл использовать Optional? Есть ли чёткое разделение (или хотя бы какие-нибудь рекомендации), когда лучше использовать if-else, а когда Optional?


Ответ

Прежде всего, все разговоры об Optional - это холивар. Однако есть ряд следствий:
Правильное использование Optional упрощает контракт в приложении, когда разработчик библиотеки явно показывает, какие поля могут быть null. А разработчик конечного приложения явно видит, где необходимо сделать проверки, а где можно обойтись без них. Тут важны ключевые слова правильное использование и явно видит. В реальности сама переменная типа Optional<*> может быть null'ом. Работа с Optional ударяет по производительности, так как может потребовать выделение в куче дополнительных объектов - самих классов Optional, лябд. Заодно увеличивается вероятность боксинга примитивных значений. При работе с Optional'ами увеличивается объем кода.
Из всего этого есть важные следствия:
Вопросы об Optional ближе к вопросам о Code Review, о Style Guide. При правильном подходе код будет более чистый, при неправильном - всё станет только хуже. Для JVM класс Optional не оказывает положительного эффекта, однако может оказать отрицательный. Если вам надежность важнее скорости (например, нагрузка не такая большая, а данные серьезные), то Optional может помочь сделать код лучше.
И еще раз - это холивар, четкого и однозначного ответа нет.

Комментариев нет:

Отправить комментарий