|
|
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
Задумался об аналогиях. В некоторых DBMS на уровне типов данных не различается состояние пустой строки и строки равной NULL. На уровне операций. Т.е. конкатенации и поиски строк и прочие операции ведут себя идентично. А в Java коде мы ставим много проверок на аргумент == null. Задумался о враппере для строк где эта особенность учитывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:14:55 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
можно, конечно, посткомпиляцией обернуть все небезопасные обращения к переменным типа String. Но NPE на строках, по-моему не такая уже большая проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:42:52 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
Blazkowiczобернуть все небезопасные обращения к переменным типа String. Вот это реально проблема. Лопатить весь код. Мне кажется лучше создать новый тип данных. Что-то вроде SafeString или NullableString. Не наследник. Не контейнер а просто вообще новый тип. И заимплементить потихоньку эту Varchar-like логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:45:32 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
Если не секрет, в каких именно dbms? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:48:02 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonВот это реально проблема. Лопатить весь код. про "посткомпиляцию" ты зачем-то ловко из моего коментария выкинул. Конечно же не руками делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:50:21 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
ivanraЕсли не секрет, в каких именно dbms? В Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 16:55:59 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonЗадумался о враппере для строк где эта особенность учитывается. Враппер - избыточно. Здесь достаточно одной функции, например: StringUtils.defaultString . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 17:07:13 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonivanraЕсли не секрет, в каких именно dbms?В Oracle. конкатенация - да, а про поиски строк неверное утверждение, я поэтому и спросил. Ни разу не встречал чтобы выдавался один и тот же результат на условия Код: sql 1. 2. Насчет явы - а почему бы не использовать StringBuilder? Там конструктор с null и пустой строкой дают одинаковое содержимое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 17:08:36 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonне различается состояние пустой строки и строки равной NULL Формально они идентичны. Иногда это используется на практике: Validating Null and Empty Strings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 17:15:22 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
BlazkowiczmaytonВот это реально проблема. Лопатить весь код. про "посткомпиляцию" ты зачем-то ловко из моего коментария выкинул. Конечно же не руками делать. Извини. Что-то в это время я торможу как слоупок. Да и не спец я в посткомпилляциях. Может кинешь ссылку на юзкейс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 17:17:38 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonВ некоторых DBMS на уровне типов данных не различается состояние пустой строки и строки равной NULL. На уровне операций. Т.е. конкатенации и поиски строк и прочие операции ведут себя идентичночто гармонично уравновешивается троичной логикой и необходимостью отдельно обрабатывать "null" и "все остальные данные". P.S. А разве простое someConstant.equals(someVar) не закрывает значимую/существенную часть NPE-причин в случае строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2013, 19:35:02 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
UsmanИногда это используется на практике: Validating Null and Empty Strings Красивый код из примера по ссылке: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 10:25:27 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
J.SergeКрасивый код из примера по ссылке: Код: java 1. 2. 3. 4. 5. Даа... фак мой мозг от JSF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 10:37:37 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
не, меня умиляет описание этого кода: авторBy default, the doAnotherThing method is called even when the user enters no data, because the testString element has been initialized with the value of an empty string. Можно подумать, если testString проинициализировать null'ом, то вызовется doSomething... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 13:21:34 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
Я полез в дебри. В нашем продакшен коде очень много паттернов типа Код: java 1. 2. 3. И строки это просто частный случай. Много операций использующих логику проверок и сравнения с null. Кружусь в медленном вальсе. Медитирую. Пью кофе и грызу конфетки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:02:32 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
StringUtils на все случаи жизни. Либо defaultString для сравнений, либо isBlank/isNotBlank для условий. зачем усложнять? Готовый код не надо перелопачивать, просто далее используй только новый, и корректируй старый по мере попадания на глаза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:31:19 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
mayton Код: java 1. 2. 3. Инкапсуляция ни к черту. Это и есть та самая Anemic Model на которую так плюётся Фаулер. Почему всё это не находится внутри объектов someObject и subObject? Почему текущему классы приходится обращаться к Property ещё через две ссылки? Некий внешний класс проводит манипуляции\проверки состояния каких-то объектов, вместо того чтобы делигировать им эту логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:38:27 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, так работает мозг, сначала проверка someObject!=null, потом вспоминает что еще можно проверить, и руки сами дописывают остальное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:48:24 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
javapeckerBlazkowicz, так работает мозг, сначала проверка someObject!=null, потом вспоминает что еще можно проверить, и руки сами дописывают остальное Я бы не называл это "работает мозг". Это называется что вижу, то пою. NPE? Та, пофиг. Не будем фиксить первопричину. Просто добавим проверку на null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:51:54 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonЯ полез в дебри. В нашем продакшен коде очень много паттернов типа Код: java 1. 2. 3. И строки это просто частный случай. Много операций использующих логику проверок и сравнения с null. Кружусь в медленном вальсе. Медитирую. Пью кофе и грызу конфетки. Поэтому я написал выше что строки это очень частный случай. Проблемы null значений он не решит. Я стараюсь минимизировать проверки на null и, если возникает NPE, фиксить его в одном месте там где появляется null значение. А не во всех местах куда оно распространяется в итоге. А так, рекомендации стандартные NullObject pattern @NotNull (Oval, IntelliJ IDEA и многие другие) Языки с интегрированым NotNull, например Kotlin. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:54:59 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonЗадумался об аналогиях. В некоторых DBMS на уровне типов данных не различается состояние пустой строки и строки равной NULL. На уровне операций. Т.е. конкатенации и поиски строк и прочие операции ведут себя идентично. А в Java коде мы ставим много проверок на аргумент == null. Задумался о враппере для строк где эта особенность учитывается. Зачем? В java на клиенте во-первых, совсем другие правила для работы с NULL, чем в базе данных, во-вторых java null - это совсем другой null, нежели NULL в базе данных и SQL. Они никак не связаны друг с другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 14:55:02 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИнкапсуляция ни к черту. Это и есть та самая Anemic Model на которую так плюётся Фаулер. Почему всё это не находится внутри объектов someObject и subObject? Почему текущему классы приходится обращаться к Property ещё через две ссылки? Некий внешний класс проводит манипуляции\проверки состояния каких-то объектов, вместо того чтобы делигировать им эту логику. Я унаследовал этот код от предшественников. И задача вобщем-то не стоит как "Почему-бы не". Просто нет времени и возможности рефакторить фундамент. А начать сначала с каких-то разумных упрощений по мере возможности - это да. А появление null-аргументов String растёт корнями из ORM, DAO и прочих слоёв которые сопрягаются с БД. Что поделаешь. NULL для БД - это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 15:08:13 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
maytonЯ унаследовал этот код от предшественников. И задача вобщем-то не стоит как "Почему-бы не". А как тогда задача стоит? maytonПросто нет времени и возможности рефакторить фундамент. А начать сначала с каких-то разумных упрощений по мере возможности - это да. Не нужно рефакторить. Выкидываем проверку на null, где она не нужна. Добавляем NotNull для выявления источника null значения. Исправляем на NullObject либо выкидываем Exception\делаем валидацию на месте появляения null, а не на месте использования. maytonА появление null-аргументов String растёт корнями из ORM, DAO и прочих слоёв которые сопрягаются с БД. Что поделаешь. NULL для БД - это нормально. Нет, это не нормально. Во-первых NULL поля в базе тоже стоит свести к минимуму и оставить только там где они действительно нужны. Во-вторых проверки на null значения свойств сущностей зачастую легко инкапсулируются в самих сущностях, и тогда весь остальной код можно от них избавить. Без конкретного примера понять не просто. Покажи реальный похожий код из системы и объясни источник null значений. Тогда можно обсудить как выкинуть лишние проверки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 15:18:36 |
|
||
|
null и пустая строка
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНе нужно рефакторить. Выкидываем проверку на null, где она не нужна. Добавляем NotNull для выявления источника null значения. Исправляем на NullObject либо выкидываем Exception\делаем валидацию на месте появляения null, а не на месте использования. Я место появления знаю. 99% это объекты DAO. Переходники MyBatis. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2013, 15:50:07 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38294465&tid=2129068]: |
0ms |
get settings: |
20ms |
get forum list: |
32ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
81ms |
get topic data: |
25ms |
get forum data: |
7ms |
get page messages: |
126ms |
get tp. blocked users: |
2ms |
| others: | 345ms |
| total: | 654ms |

| 0 / 0 |
