Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Тернарная проверка на NULL  [new]
betelgeizex
Member

Откуда:
Сообщений: 60
mayton
betelgeizex
Так можно далеко зайти...
Пример: 'new' - уровень языка, DI container - библиотека.
Давайте откажемтся от DI и будем передавать зависимости руками? По максимуму использовать язык... ))

Я протестую! Я этого не говорил. Аналогии с new/DI вообще неуместны.
Не стоит додумывать и добавлять новые смыслы. Моя позиция была
только по синтаксису логических условий.


Ну, вы указали на общность фразы:

автор
Надо всегда смотреть в стек. Сначала language. Его возможности. По максимуму решить задачу на этом уровне...

Вот я и решил развить мысль.


Я понимаю, что мог не уловить смысла. Но тогда вопрос: в чем синтаксис логических условий принципиально отличается от остальных аспектов языка?
Почему для логических условий надо использовать язык по максимуму (предпочитая его библиотекам), я для прочих задач такой посыл вами не утверждается?
13 мар 19, 14:20    [21831347]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41026
Давайте вернёмся к теме.
13 мар 19, 14:28    [21831361]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
teo609
Member

Откуда: Рязань
Сообщений: 108
mesier
Сори, если вопрос глупый, но что-то не могу допереть..
ac.getPs() ? "P" : "S"

- Здесь getPS() возвращает Boolean, и, как оказалось, может быть NULL, соответственно с бросанием NPE..
А можно как-то одной строкой, не мостряча доп.проверку, например, также тернарным оператором, проверить на NULL, и, если не NULL, то вернуть соответствующие значения?


мне кажется, что null здесь может быть не getPS(), а ас.
Тогда все упрощается (далее по примеру от Kachalov)

ac == null ? "ac is null" : ac.getPs() ? "P" : "S"

потому что даже если getPS возвращает null, то для NPE нет повода, поскольку по этому null доступ не производится.
13 мар 19, 17:33    [21831592]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41026
Скорее всего у него используется Orm-фреймворк который формирует entity корректно
(не null) а различные поля этой entity вполне могут быть null ибо такова есть база данных.
Помним что реляционная алгебра позволяет делать дырки в таблице и это норм. Это не
дефект. И я думаю что его беспокоит именно предикат ac.getPs() == null т.к. она ломает
обычный порядок исполнения тернаной операции и заставляет делать еще одну лишнюю
проверку.
13 мар 19, 17:40    [21831605]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
teo609
Member

Откуда: Рязань
Сообщений: 108
mayton,

я банально перепутал Boolean с boolean, почти не писал на яве.

А к вашему вопросу о логике трех состояний, ссылочный Boolean обусловлен языком, поэтому зачем ставить вопрос о его прикладной логике.
Кстати, поэтому и Optional мне не нравится как средство проверки на null, ведь логика может быть другой. Опциональность значения это по хорошему вопрос дизайна, а наличие null в ссылке может говорить не об этом, а об аварийной ситуации в процессе получения значения.
13 мар 19, 17:51    [21831618]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41026
teo609
mayton,

я банально перепутал Boolean с boolean, почти не писал на яве.

А к вашему вопросу о логике трех состояний, ссылочный Boolean обусловлен языком, поэтому зачем ставить вопрос о его прикладной логике.
Кстати, поэтому и Optional мне не нравится как средство проверки на null, ведь логика может быть другой. Опциональность значения это по хорошему вопрос дизайна, а наличие null в ссылке может говорить не об этом, а об аварийной ситуации в процессе получения значения.

В данном конкретном кейсе Optional не нужен я считаю. Хотя он очень полезен когда вы работаете со Streams.
13 мар 19, 18:03    [21831637]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mesier
Member

Откуда: Новокузнецк ► СПб
Сообщений: 1048
Alexey Tomin
А просто функцию сделать?
<T> T nvl2(Boolean b, T whenTrue, T whenFalse, T whenNull) {
...
}

Ну, да, вариант!
Хорошечно ещё и тем, что можно юнит-тест нарисовать. А то как-то юнит-тест для entity немного странно выглядит.. )))
13 мар 19, 18:12    [21831648]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mesier
Member

Откуда: Новокузнецк ► СПб
Сообщений: 1048
mayton
Скорее всего у него используется Orm-фреймворк который формирует entity корректно
(не null) а различные поля этой entity вполне могут быть null ибо такова есть база данных.
Помним что реляционная алгебра позволяет делать дырки в таблице и это норм. Это не
дефект. И я думаю что его беспокоит именно предикат ac.getPs() == null т.к. она ломает
обычный порядок исполнения тернаной операции и заставляет делать еще одну лишнюю
проверку.

Именно так.
13 мар 19, 18:13    [21831649]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mesier
ac.getPs() ? "P" : "S"

Интересно, что в шарпе это не скомпилируется если null возможен в возврате getPs()
13 мар 19, 18:14    [21831651]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mesier,
Если сущность, то не делай её тупой. Сделай поумнее, добавив метод возврата строки или
as.getPs().asString()
13 мар 19, 18:43    [21831683]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41026
Petro123
mesier,
Если сущность, то не делай её тупой. Сделай поумнее, добавив метод возврата строки или
as.getPs().asString()

Это не совсем решение проблемы автора. Это просто перенос на другой уровень.
Кроме того надо помнить о потере соотвествия между ORM-entity и умной-entity.

Вобщем memento mori. Помни.
13 мар 19, 19:09    [21831711]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton,
Да. Все надо учитывать.
Представь 200 свойств с null и все тут с тернарными и троичной логикой.
Это лапша код будет.
13 мар 19, 19:16    [21831713]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41026
Я не могу себе представить одно бизнес-действие с 200 свойствами.

Как вариант serialzation или метод toString но для него нет проблемы NPE. Она решена
на коробочном уровне.
13 мар 19, 19:20    [21831720]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton,
Я за то чтобы компилятор заругался на потенциальную ошибку.
Т.к. Для оператора? требуется только Да или Нет.
Imho
13 мар 19, 19:48    [21831766]     Ответить | Цитировать Сообщить модератору
 Re: Тернарная проверка на NULL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41026
Согласен. Я-бы проверил исходник автора на SonarQube. Если тот заругается - то автор сам себе виноват. Не читает warnings.
13 мар 19, 19:53    [21831772]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Java Ответить