Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление выражений 
V
    Опции темы
Zloxa
Дата 14.2.2012, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: нет
Всего: 161



Всем привет.
Не смог сходу придумать по какому критерию загуглить как вычисляются выражения, потому решил задать тупой вопрос.

Псевдокод:
Код

  if (func1() && func2()) {}

Вопросы
1) Могу ли я закладываться на то, что func2 будет всегда выполнится строго после func1?
2) Могу ли я закладываться на то, что func2 не выполнится всегда, если func1 не вернет истину?
3) Можно ли как нибудь принудить обе функции выполняться всегда?



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Skynin
Дата 14.2.2012, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



гуглите
Приоритеты операций и порядок вычислений Java

1. да.
2. да. правда завернули как-то не по людски.  лучше: ".... func2 никогда не выполнится, если func1 вернет ложь?"
3. да.

PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Pawl
Дата 14.2.2012, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(Zloxa @  14.2.2012,  11:10 Найти цитируемый пост)
3) Можно ли как нибудь принудить обе функции выполняться всегда?

Да, вот так:
Код

if (func1() & func2()) {}



--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Zloxa
Дата 14.2.2012, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: нет
Всего: 161



Цитата(Skynin @  14.2.2012,  11:29 Найти цитируемый пост)
 правда завернули как-то не по людски.  лучше: ".... func2 никогда не выполнится, если func1 вернет ложь?"

Привык мыслить в  трехзначной логике.  smile 
Я понимаю, что один топик-один вопрос, но Жаве логический unknown не ведом вовсе?

Цитата(Skynin @  14.2.2012,  11:29 Найти цитируемый пост)
3. да.

Как?(третий вопрос)  smile 
Цитата(Skynin @  14.2.2012,  11:29 Найти цитируемый пост)
гуглите
Приоритеты операций и порядок вычислений Java

Так на официальную доку не выгуглишь ))
Подобрал мантру "Java expression evaluation order"
Выгуглил
Цитата

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.
It is recommended that code not rely crucially on this specification. Code is usually clearer when each expression contains at most one side effect, as its outermost operation, and when code does not depend on exactly which exception arises as a consequence of the left-to-right evaluation of expressions.

Т.е. как бы сначала дают гарантии, но потом отказываются от обязательств  smile 
Статус документа, вроде specification, т.е. закладываться на 1) как бы можно, но, в то же время, - не рекомендуется.

Какую бы мантру подобрать ко второму вопросу? smile

Добавлено @ 12:03
Цитата(Pawl @  14.2.2012,  11:36 Найти цитируемый пост)
Да, вот так:

В моем случае вопрос, наверное следовало бы поставить иначе - можно ли отключить Short-circuit evaluation. Мож там дирректива компилятору какая или еще ченить...


Это сообщение отредактировал(а) Zloxa - 14.2.2012, 12:07


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
jk1
Дата 14.2.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

В моем случае вопрос, наверное следовало бы поставить иначе - можно ли отключить Short-circuit evaluation. Мож там дирректива компилятору какая или еще ченить...


Нет. И я не очень понимаю зачем так делать. Если уж Ваш метод имеет side effect, который непременно нужен, то лучше бы разделить такой метод на два. Вам же потом понятнее читать будет.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Zloxa
Дата 14.2.2012, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: нет
Всего: 161



Цитата(jk1 @  14.2.2012,  12:17 Найти цитируемый пост)
И я не очень понимаю зачем так делать.

Делать так не обязательно. Важно знать может ли это быть сделано. Третий вопрос, это как бы уточнение ко второму.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Skynin
Дата 14.2.2012, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Цитата

Какую бы мантру подобрать ко второму вопросу?

Давно говорю, в ВУЗах не тому учат.
Нужно учить гуглить!

Все равно книжек никто не читает.

http://en.wikipedia.org/wiki/Short-circuit_evaluation

Хотя на русском тоже начиная с справочника Шилдта об этом сказано
См. 
Глава 4 Операции
"Замыкающие логические операции"

Цитата

можно ли отключить Short-circuit evaluation. Мож там дирректива компилятору какая или еще ченить...

Нельзя, ибо редко нужно такое свойство. 

А дай в руки такое - поведение кода станет непредсказуемым. Нужно будет где-то смотреть "включено или выключено?"
И как уже указали, в Java легко "включить" полное вычисление операндов, используя & или | а не && или ||. 
Если очень хочется.




Это сообщение отредактировал(а) Skynin - 14.2.2012, 19:01
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Zloxa
Дата 15.2.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: нет
Всего: 161



Цитата(Skynin @  14.2.2012,  18:57 Найти цитируемый пост)
en.wikipedia.org

Цитата(Skynin @  14.2.2012,  18:57 Найти цитируемый пост)
Шилдт

Skynin, не иронии ради, но лишь понимания положения дел для. Спецификация Java плохо описана производителем или же мало представлена в интернете, если за пруфами приходится обращаться к википедии или же технической публицистике, а не к официальной документации?

Цитата(Skynin @  14.2.2012,  18:57 Найти цитируемый пост)
Все равно книжек никто не читает.

К сожалению, мой опыт чтения книг говорит о том, что далеко не все современные книги следует читать. Многие откровенно вводят в заблуждение. Многие учат порочному, потому ссылке на книгу всегда предпочтительнее ссылка на официальную документацию. Хотя, конечно, да - название "Java 2 Programmer's Reference" и регалии автора, внушают определенное доверие, но, тем не менее это книга, а не документ, и издается она не от имени производителя платформы. По всему видать, я чересчур избалован документацией по oracle database. Редкая специфика в ней не освещена или же освещена не однозначно.


Это сообщение отредактировал(а) Zloxa - 15.2.2012, 11:57


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Dummy
Дата 15.2.2012, 12:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



Цитата(Zloxa @  15.2.2012,  11:23 Найти цитируемый пост)
Спецификация Java плохо описана производителем или же мало представлена в интернете

Ну зачем же так-то... Вот самая что ни на есть официальная документация по вашему вопросу. Не скажу, что Java Language Specification - это самое увлекательное чтиво, но в отсутствии деталей её не упрекнёшь.
PM MAIL   Вверх
LSD
Дата 15.2.2012, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Zloxa @  14.2.2012,  12:59 Найти цитируемый пост)
В моем случае вопрос, наверное следовало бы поставить иначе - можно ли отключить Short-circuit evaluation. Мож там дирректива компилятору какая или еще ченить...

Учитывая что конструкции типа:
Код

public void foo(Object[] objects) {
  if(objects != null && objects.length > 0) {

встречаются довольно часто, то можно грести немало лулзов отключив Short-circuit evaluation smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 15.2.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: нет
Всего: 161



Цитата(Dummy @  15.2.2012,  12:22 Найти цитируемый пост)
Вот

Спасибо!!!! То - что доктор прописал. smile 
Обидно, что я уже был на этой странце, когда разрешил свой первый вопрос. Использовал ctrl+f чтоб поискать на той же странице и ответ на второй, но, видать не правильные паттерны выбрал. smile

Цитата(LSD @  15.2.2012,  12:31 Найти цитируемый пост)
встречаются довольно часто

Таки не на всякие прецеденты можно опираться. Я и сам уже много раз подобную конструкцию испольовал, не будучи уверенным в ее правомочности. Вот теперь точки стоят на своих местах.

Цитата(Dummy @  15.2.2012,  12:22 Найти цитируемый пост)
Ну зачем же так-то... 

Я пытался выяснить мотивы, какими руководствуется участник предлагая в качестве пруфа такие странные для меня источники. 

Цитата(LSD @  15.2.2012,  12:31 Найти цитируемый пост)
немало лулзов

добавлю тебе почвы для лулзов. Чисто 4 фан. Прошу как аргумент в гноблении делфистов не использовать(scope у этой директивы локальный, потому действует она лишь в рамках файла исходного кода, в котором она указана либо же до того фрагмента кода, где действие этой директивы отменяется).

Это сообщение отредактировал(а) Zloxa - 15.2.2012, 13:29


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 15.2.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Zloxa @  15.2.2012,  13:54 Найти цитируемый пост)
добавлю тебе почвы для лулзов. Чисто 4 фан. Прошу как аргумент в гноблении делфистов не использовать(scope у этой директивы локальный, потому действует она лишь в рамках файла исходного кода, в котором она указана либо же до того фрагмента кода, где действие этой директивы отменяется).

Дельфи компилируется в нативный код, где уже не будет ни & ни &&. Однажды скомпилированная библиотека не будет уже менять свое поведение. А вот с байткодом могла бы быть совсем другая ситуация.

Хотя справедливости ради код
Код

if(objects != null && objects.length > 0)

компилируется в аналог:
Код

if(objects != null) {
  if(objects.length > 0) {
    ...



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0990 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.