Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Вычисление выражений |
Автор: Zloxa 14.2.2012, 11:10 | ||
Всем привет. Не смог сходу придумать по какому критерию загуглить как вычисляются выражения, потому решил задать тупой вопрос. Псевдокод:
Вопросы 1) Могу ли я закладываться на то, что func2 будет всегда выполнится строго после func1? 2) Могу ли я закладываться на то, что func2 не выполнится всегда, если func1 не вернет истину? 3) Можно ли как нибудь принудить обе функции выполняться всегда? |
Автор: Skynin 14.2.2012, 11:29 |
гуглите Приоритеты операций и порядок вычислений Java 1. да. 2. да. правда завернули как-то не по людски. лучше: ".... func2 никогда не выполнится, если func1 вернет ложь?" 3. да. |
Автор: Pawl 14.2.2012, 11:36 | ||
Да, вот так:
|
Автор: jk1 14.2.2012, 12:17 | ||
Нет. И я не очень понимаю зачем так делать. Если уж Ваш метод имеет side effect, который непременно нужен, то лучше бы разделить такой метод на два. Вам же потом понятнее читать будет. |
Автор: Zloxa 14.2.2012, 13:02 |
Делать так не обязательно. Важно знать может ли это быть сделано. Третий вопрос, это как бы уточнение ко второму. |
Автор: Skynin 14.2.2012, 18:57 | ||||
Давно говорю, в ВУЗах не тому учат. Нужно учить гуглить! Все равно книжек никто не читает. http://en.wikipedia.org/wiki/Short-circuit_evaluation Хотя на русском тоже начиная с справочника Шилдта об этом сказано См. Глава 4 Операции "Замыкающие логические операции"
Нельзя, ибо редко нужно такое свойство. А дай в руки такое - поведение кода станет непредсказуемым. Нужно будет где-то смотреть "включено или выключено?" И как уже указали, в Java легко "включить" полное вычисление операндов, используя & или | а не && или ||. Если очень хочется. |
Автор: Zloxa 15.2.2012, 11:23 |
Skynin, не иронии ради, но лишь понимания положения дел для. Спецификация Java плохо описана производителем или же мало представлена в интернете, если за пруфами приходится обращаться к википедии или же технической публицистике, а не к официальной документации? К сожалению, мой опыт чтения книг говорит о том, что далеко не все современные книги следует читать. Многие откровенно вводят в заблуждение. Многие учат порочному, потому ссылке на книгу всегда предпочтительнее ссылка на официальную документацию. Хотя, конечно, да - название "Java 2 Programmer's Reference" и регалии автора, внушают определенное доверие, но, тем не менее это книга, а не документ, и издается она не от имени производителя платформы. По всему видать, я чересчур избалован документацией по oracle database. Редкая специфика в ней не освещена или же освещена не однозначно. |
Автор: Dummy 15.2.2012, 12:22 | ||
Ну зачем же так-то... Вот самая что ни на есть http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#5242 по вашему вопросу. Не скажу, что Java Language Specification - это самое увлекательное чтиво, но в отсутствии деталей её не упрекнёшь. |
Автор: LSD 15.2.2012, 12:31 | ||||
Учитывая что конструкции типа:
встречаются довольно часто, то можно грести немало лулзов отключив Short-circuit evaluation ![]() |
Автор: Zloxa 15.2.2012, 12:54 |
Спасибо!!!! То - что доктор прописал. ![]() Обидно, что я уже был на этой странце, когда разрешил свой первый вопрос. Использовал ctrl+f чтоб поискать на той же странице и ответ на второй, но, видать не правильные паттерны выбрал. ![]() Таки не на всякие прецеденты можно опираться. Я и сам уже много раз подобную конструкцию испольовал, не будучи уверенным в ее правомочности. Вот теперь точки стоят на своих местах. Я пытался выяснить мотивы, какими руководствуется участник предлагая в качестве пруфа такие странные для меня источники. http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.htmlтебе почвы для лулзов. Чисто 4 фан. Прошу как аргумент в гноблении делфистов не использовать(scope у этой директивы локальный, потому действует она лишь в рамках файла исходного кода, в котором она указана либо же до того фрагмента кода, где действие этой директивы отменяется). |
Автор: LSD 15.2.2012, 14:25 | ||||||
Дельфи компилируется в нативный код, где уже не будет ни & ни &&. Однажды скомпилированная библиотека не будет уже менять свое поведение. А вот с байткодом могла бы быть совсем другая ситуация. Хотя справедливости ради код
компилируется в аналог:
|