Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Используете вы Optional ? / 25 сообщений из 164, страница 1 из 7
25.09.2015, 01:17
    #39060790
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
в java 8 запихнули Optional из гуавы. Расскажите плиз пользуетесь ли вы этой новой фичей?

я просто пока не понял как она помогает очистить код от проверок на null и сделать его красивее.
...
Рейтинг: 0 / 0
25.09.2015, 12:13
    #39061127
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
questioner,

Вот тут посмотрите 15.6

http://www.artima.com/pins1ed/case-classes-and-pattern-matching.html
...
Рейтинг: 0 / 0
25.09.2015, 20:23
    #39061633
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
А где там говорится что код станет красивее? Он станет уродливее, но зато будет точнее видно где подразумевается ноль :)
...
Рейтинг: 0 / 0
25.09.2015, 20:59
    #39061672
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Насколько я понял, это позволяет отловить NULL значения и обработать их, как нужно программисту. В принципе, удобно, но не факт, что красиво.
...
Рейтинг: 0 / 0
25.09.2015, 21:04
    #39061680
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
private,

Суть не в красивостях, а в избавлении от отслеживания значений и проверки на null. Есть ещё всякие штуки вроде getOrElse
...
Рейтинг: 0 / 0
25.09.2015, 21:08
    #39061682
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Вот ещё статья какая-то

http://habrahabr.ru/post/225641/
...
Рейтинг: 0 / 0
26.09.2015, 07:44
    #39061808
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
> Суть не в красивостях, а в избавлении от отслеживания значений и проверки на 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` и т.п.
...
Рейтинг: 0 / 0
26.09.2015, 10:10
    #39061842
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
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.
findCustomerWithSSN(ssn).ifPresent(() ->  
    System.out.println("customer exists!"));





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 на каждом шаге?
...
Рейтинг: 0 / 0
28.09.2015, 08:29
    #39062784
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
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.
System.out.println(person.orElse("Person not found!"));
...
Рейтинг: 0 / 0
28.09.2015, 09:13
    #39062814
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
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
...
Рейтинг: 0 / 0
28.09.2015, 09:15
    #39062818
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
questionerв java 8 запихнули Optional из гуавы. Расскажите плиз пользуетесь ли вы этой новой фичей?

я просто пока не понял как она помогает очистить код от проверок на null и сделать его красивее.
Вот ещё
https://developer.atlassian.com/blog/2015/08/optional-broken/

Иногда пользуюсь, но только до тех пор пока она делает код проще.
...
Рейтинг: 0 / 0
28.09.2015, 16:47
    #39063335
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Еще раз повторяю

vimbaSystem.out.println(person.orElse("Person not found!"));

тоже-самое что и

System.out.println(person != null ? person : "Person not found!");

авторДокументацию на API нужно читать однако, а то как был дураком так дураком и помрешь.

И в этом ты ошибаешься, то что ты начал читать АПИ вовсе не означает что ты перестал быть дураком. Попробуй напрягать мозги, может поможет.
...
Рейтинг: 0 / 0
28.09.2015, 16:54
    #39063347
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
> Мне вообще не очень понятно как вы хотите пользоваться Stream API без Optional, и не ловить NPE на каждом шаге?

Особо не смотрел еще стрим АПИ, не могу сказать, с первого взгляда не понравилось. В сравнении с Ruby / JavaScript - выглядит сложнее и запутаннее. Это обычные функции, непонятно зачем ради них делать специальный стрим апи.

Вспоминается совет одного из создателя Гуавы - по поводу ее использования и функционального стиля - ответ был - не нужно ее использовать, нужно испольовать обычные циклы. Жава слишком стара чтобы нормально в нее интегрировать функциональное программирование, у гуавы это не получилось, и судя по всему у стрим апи тоже не особо получится.
...
Рейтинг: 0 / 0
28.09.2015, 22:37
    #39063644
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
private,

privateОсобо не смотрел еще стрим АПИ
Не смотрел, но осуждаю (с)

[quote private]непонятно зачем ради них делать специальный стрим апи.[/private]
Совместимости ради

privateнужно испольовать обычные циклы.
С такими советами вам на форум С++. Лично я ничего плохого в эволюции языка не вижу, тем более, если она проходит в верном направлении.

privateу стрим апи тоже не особо получится.
По-моему уже получилось.
...
Рейтинг: 0 / 0
29.09.2015, 03:29
    #39063688
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Blazkowicz,


Интересная статья. Могу предложить свою реализацию Optional. Это класс из моей библиотеки underscore-java. Он умеет хранить null внутри себя и .get() не выкидывает Exception.

С уважением, Валентин
...
Рейтинг: 0 / 0
29.09.2015, 09:26
    #39063796
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
[quot DoSOfRedRiver]

privateОсобо не смотрел еще стрим АПИ
Не смотрел, но осуждаю (с)

privateнепонятно зачем ради них делать специальный стрим апи.[/quot ]
Совместимости ради

privateнужно испольовать обычные циклы.
С такими советами вам на форум С++. Лично я ничего плохого в эволюции языка не вижу, тем более, если она проходит в верном направлении.

privateу стрим апи тоже не особо получится.
По-моему уже получилось.
Абсолютно согласен по каждому пункту. Вчера хотелось написать то же самое, но лениво было флейм разводить.
...
Рейтинг: 0 / 0
29.09.2015, 19:33
    #39064624
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Valentin KolesnikovBlazkowicz,


Интересная статья. Могу предложить свою реализацию Optional. Это класс из моей библиотеки underscore-java. Он умеет хранить null внутри себя и .get() не выкидывает Exception.

С уважением, Валентин

А чего там особенного то можно придумать? класс простой ведь
...
Рейтинг: 0 / 0
30.09.2015, 04:27
    #39064777
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
questioner,

Вот собственно ссылка .

Сложно было правильно составить equals и hashCode.
...
Рейтинг: 0 / 0
30.09.2015, 08:58
    #39064838
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Valentin Kolesnikovquestioner,

Вот собственно ссылка .

Сложно было правильно составить equals и hashCode.

Нет, сложно было сделать столь много ошибок.
1. У Вас лишний boolean (который тривиально вычисляется). С учётом выравнивания- 8 байт лишних.
2. Кстати, у Вас бага - вызов "new Optional(null)" приведёт к созданию невалидного объекта.
3. get вполне может вернуть null. И зачем такое счастье?
4. У стандартного Optional есть константа EMPTY "раз и навсегда".
5. Там ещё и orElse и т.п. - удобные вещи.

Т.е. когда нет Optional, но хочется- лучше копипастить проверенные решения, а не изобретать ломучий велосипед.
...
Рейтинг: 0 / 0
30.09.2015, 09:24
    #39064858
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
privateЖава слишком стара чтобы нормально в нее интегрировать функциональное программирование,
к с++ лямбды пришили и мир не перевернулся
...
Рейтинг: 0 / 0
30.09.2015, 16:25
    #39065382
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
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.

Зачем вам оно понадобилось - не понятно.
...
Рейтинг: 0 / 0
01.10.2015, 03:12
    #39065713
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
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().
...
Рейтинг: 0 / 0
01.10.2015, 08:10
    #39065748
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Valentin Kolesnikov2. Кстати, у Вас бага - вызов "new Optional(null)" приведёт к созданию невалидного объекта.

Это будет Optional со значением null внутри себя.


Т.е. у объекта есть три состояния- "значения нет", "значение есть, но оно null" и "значение есть"?
Вот уж багогенератор...
...
Рейтинг: 0 / 0
01.10.2015, 11:18
    #39065913
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
Alexey Tomin,

Optional хранит внутри себя объект (null допустимое значение) и признак absent (если оно истнино значение бъекта устанавливается в null и доступно для .get()).

С уважением, Валентин
...
Рейтинг: 0 / 0
01.10.2015, 23:30
    #39066552
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Используете вы Optional ?
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

В любом случае в вашей реализации я вижу логическую ошибку.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Используете вы Optional ? / 25 сообщений из 164, страница 1 из 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]