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

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

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

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

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

http://habrahabr.ru/post/225641/
...
Рейтинг: 0 / 0
Используете вы Optional ?
    #39061808
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Суть не в красивостях, а в избавлении от отслеживания значений и проверки на 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
Используете вы Optional ?
    #39061842
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используете вы Optional ?
    #39062784
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используете вы Optional ?
    #39062814
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используете вы Optional ?
    #39062818
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerв java 8 запихнули Optional из гуавы. Расскажите плиз пользуетесь ли вы этой новой фичей?

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

Т.е. когда нет Optional, но хочется- лучше копипастить проверенные решения, а не изобретать ломучий велосипед.
...
Рейтинг: 0 / 0
Используете вы Optional ?
    #39064858
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateЖава слишком стара чтобы нормально в нее интегрировать функциональное программирование,
к с++ лямбды пришили и мир не перевернулся
...
Рейтинг: 0 / 0
Используете вы Optional ?
    #39065382
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используете вы Optional ?
    #39065713
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Используете вы Optional ?
    #39065748
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov2. Кстати, у Вас бага - вызов "new Optional(null)" приведёт к созданию невалидного объекта.

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


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

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

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


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