|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
в java 8 запихнули Optional из гуавы. Расскажите плиз пользуетесь ли вы этой новой фичей? я просто пока не понял как она помогает очистить код от проверок на null и сделать его красивее. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 01:17 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
questioner, Вот тут посмотрите 15.6 http://www.artima.com/pins1ed/case-classes-and-pattern-matching.html ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 12:13 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
А где там говорится что код станет красивее? Он станет уродливее, но зато будет точнее видно где подразумевается ноль :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 20:23 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Насколько я понял, это позволяет отловить NULL значения и обработать их, как нужно программисту. В принципе, удобно, но не факт, что красиво. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 20:59 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
private, Суть не в красивостях, а в избавлении от отслеживания значений и проверки на null. Есть ещё всякие штуки вроде getOrElse ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 21:04 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
> Суть не в красивостях, а в избавлении от отслеживания значений и проверки на null. Есть ещё всякие штуки вроде getOrElse Я понимаю что за проблему пытаются решить с введением опционал. Но это на мой взгляд плохое решение. Это как челу с перкосом лица на одну сторону сделали пластическую операцию и оно у него перекосилось на другую, типа поправили :). Если решать это то нужно было бы как-то пытаться интегрировать в систему типов явы, но поскольку сохранив обратную совместимость этого по-видимому сделать не удавалось - решили сделать такой костыль, который якобы помогает. Хе-хе, да вот даже в примере по ссылке написано что это "то-же самое" что и с нулл. авторif(person != null) { System.out.println(person) } else { System.out.println("Person not found!"); } То же самое, но с использованием Optional: if (person.isPresent()) { System.out.println(person.get()); } else { System.out.println("Person not found!"); } А это авторPerson personNew = person != null ? person : new Person(); То же самое, но с использованием Optional: Person personNew = person.orElse(new Person()); Ну надо-же, изобрели if / else, теперь эти конструкции можно делать не только с помошью встроенных функций языка, но надо еше и помнить кучу тарабарщины типа `orElse`, `orElseThrow` и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2015, 07:44 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
private, По порядку тогда. http://blog.jhades.org/java-8-how-to-use-optional/ What is wrong with just returning null? The problem is that the caller of the function might not have read the javadoc for the method, and forget about handling the null case. This happens frequently and is one of the main causes of null pointer exceptions, although not the only one. http://blog.jhades.org/java-8-how-to-use-optional/ How does Optional help with functional programming? In chained function calls, Optional provides method ifPresent(), that allows to chain functions that might not return values: Код: java 1. 2.
http://blog.jhades.org/java-8-how-to-use-optional/ What is Optional not trying to solve Optional is not meant to be a mechanism to avoid all types of null pointers. The mandatory input parameters of methods and constructors still have to be tested for example. Like when using null, Optional does not help with conveying the meaning of an absent value. In a similar way that null can mean many different things (value not found, etc.), so can an absent Optional value. The caller of the method will still have to check the javadoc of the method for understanding the meaning of the absent Optional, in order to deal with it properly. Also in a similar way that a checked exception can be caught in an empty block, nothing prevents the caller of calling get() and moving on. Здесь ещё отличный пример использования. Мне вообще не очень понятно как вы хотите пользоваться Stream API без Optional, и не ловить NPE на каждом шаге? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2015, 10:10 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
private... авторif(person != null) { System.out.println(person) } else { System.out.println("Person not found!"); } ... То же самое, но с использованием Optional: if (person.isPresent()) { System.out.println(person.get()); } else { System.out.println("Person not found!"); } Документацию на API нужно читать однако, а то как был дураком так дураком и помрешь. Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2015, 08:29 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
https://dzone.com/articles/java-ptional-whats-point So to recap - in an attempt to get rid of NullPointerExceptions we have a new class that: -Throws NullPointerExceptions -Can itself be null, causing a NullPointerException -Increases heap size -Makes debugging more difficult -Makes serializing objects, say as an XML or JSON for an external client, much more difficult ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2015, 09:13 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
questionerв java 8 запихнули Optional из гуавы. Расскажите плиз пользуетесь ли вы этой новой фичей? я просто пока не понял как она помогает очистить код от проверок на null и сделать его красивее. Вот ещё https://developer.atlassian.com/blog/2015/08/optional-broken/ Иногда пользуюсь, но только до тех пор пока она делает код проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2015, 09:15 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Еще раз повторяю vimbaSystem.out.println(person.orElse("Person not found!")); тоже-самое что и System.out.println(person != null ? person : "Person not found!"); авторДокументацию на API нужно читать однако, а то как был дураком так дураком и помрешь. И в этом ты ошибаешься, то что ты начал читать АПИ вовсе не означает что ты перестал быть дураком. Попробуй напрягать мозги, может поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2015, 16:47 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
> Мне вообще не очень понятно как вы хотите пользоваться Stream API без Optional, и не ловить NPE на каждом шаге? Особо не смотрел еще стрим АПИ, не могу сказать, с первого взгляда не понравилось. В сравнении с Ruby / JavaScript - выглядит сложнее и запутаннее. Это обычные функции, непонятно зачем ради них делать специальный стрим апи. Вспоминается совет одного из создателя Гуавы - по поводу ее использования и функционального стиля - ответ был - не нужно ее использовать, нужно испольовать обычные циклы. Жава слишком стара чтобы нормально в нее интегрировать функциональное программирование, у гуавы это не получилось, и судя по всему у стрим апи тоже не особо получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2015, 16:54 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
private, privateОсобо не смотрел еще стрим АПИ Не смотрел, но осуждаю (с) [quote private]непонятно зачем ради них делать специальный стрим апи.[/private] Совместимости ради privateнужно испольовать обычные циклы. С такими советами вам на форум С++. Лично я ничего плохого в эволюции языка не вижу, тем более, если она проходит в верном направлении. privateу стрим апи тоже не особо получится. По-моему уже получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2015, 22:37 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Blazkowicz, Интересная статья. Могу предложить свою реализацию Optional. Это класс из моей библиотеки underscore-java. Он умеет хранить null внутри себя и .get() не выкидывает Exception. С уважением, Валентин ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2015, 03:29 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
[quot DoSOfRedRiver] privateОсобо не смотрел еще стрим АПИ Не смотрел, но осуждаю (с) privateнепонятно зачем ради них делать специальный стрим апи.[/quot ] Совместимости ради privateнужно испольовать обычные циклы. С такими советами вам на форум С++. Лично я ничего плохого в эволюции языка не вижу, тем более, если она проходит в верном направлении. privateу стрим апи тоже не особо получится. По-моему уже получилось. Абсолютно согласен по каждому пункту. Вчера хотелось написать то же самое, но лениво было флейм разводить. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2015, 09:26 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Valentin KolesnikovBlazkowicz, Интересная статья. Могу предложить свою реализацию Optional. Это класс из моей библиотеки underscore-java. Он умеет хранить null внутри себя и .get() не выкидывает Exception. С уважением, Валентин А чего там особенного то можно придумать? класс простой ведь ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2015, 19:33 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Valentin Kolesnikovquestioner, Вот собственно ссылка . Сложно было правильно составить equals и hashCode. Нет, сложно было сделать столь много ошибок. 1. У Вас лишний boolean (который тривиально вычисляется). С учётом выравнивания- 8 байт лишних. 2. Кстати, у Вас бага - вызов "new Optional(null)" приведёт к созданию невалидного объекта. 3. get вполне может вернуть null. И зачем такое счастье? 4. У стандартного Optional есть константа EMPTY "раз и навсегда". 5. Там ещё и orElse и т.п. - удобные вещи. Т.е. когда нет Optional, но хочется- лучше копипастить проверенные решения, а не изобретать ломучий велосипед. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2015, 08:58 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
privateЖава слишком стара чтобы нормально в нее интегрировать функциональное программирование, к с++ лямбды пришили и мир не перевернулся ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2015, 09:24 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Valentin Kolesnikov, https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html This is a value-based class; use of identity-sensitive operations (including reference equality (==), identity hash code, or synchronization) on instances of Optional may have unpredictable results and should be avoided. Зачем вам оно понадобилось - не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2015, 16:25 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Alexey Tomin, 1. У Вас лишний boolean (который тривиально вычисляется). С учётом выравнивания- 8 байт лишних. boolean даёт возможность хранить null внутри Optional. 2. Кстати, у Вас бага - вызов "new Optional(null)" приведёт к созданию невалидного объекта. Это будет Optional со значением null внутри себя. 3. get вполне может вернуть null. И зачем такое счастье? Мне нужен был get, который может вернуть null для методов в библиотеке. 4. У стандартного Optional есть константа EMPTY "раз и навсегда". Можно добавить такую константу. 5. Там ещё и orElse и т.п. - удобные вещи. Можно добавить такой метод. В guava он называется or(). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 03:12 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Valentin Kolesnikov2. Кстати, у Вас бага - вызов "new Optional(null)" приведёт к созданию невалидного объекта. Это будет Optional со значением null внутри себя. Т.е. у объекта есть три состояния- "значения нет", "значение есть, но оно null" и "значение есть"? Вот уж багогенератор... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 08:10 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Alexey Tomin, Optional хранит внутри себя объект (null допустимое значение) и признак absent (если оно истнино значение бъекта устанавливается в null и доступно для .get()). С уважением, Валентин ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 11:18 |
|
Используете вы Optional ?
|
|||
---|---|---|---|
#18+
Valentin KolesnikovAlexey Tomin, Optional хранит внутри себя объект (null допустимое значение) и признак absent (если оно истнино значение бъекта устанавливается в null и доступно для .get()). С уважением, Валентин Тут одно из двух - либо null является допустимым значением (a.), либо null означает отсутствие значения (b.). a.) Option(null) == Present(null) => Absent.get() должен выбрасывать exception b.) Absent.get() == null => Option(null) должен возвращать Absent В любом случае в вашей реализации я вижу логическую ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2015, 23:30 |
|
|
start [/forum/topic.php?fid=59&msg=39061680&tid=2121883]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 178ms |
0 / 0 |