УкраїнськаEnglishmRussian
Вхід/Новий
У темі немає нових постів

[BugWrong] Сбой приоритетов операций в JavaLikeCalc


Автор Повідомлення
Повідомлення створено: 22. 01. 2016 [20:06]
dorn
Максим Алексеев
Автор теми
Зареєстрован(а) с: 24.10.2015
Повідомлення: 17
Здравствуйте, Роман.
На Ubuntu 14.04 обновился недавно до версии 0.8.15.
В JavaLikeCalc произошёл сбой приоритетов операций. На строку такого вида:

false && true || false == false

выдаёт false.
Повідомлення створено: 22. 01. 2016 [21:03]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"dorn" wrote:

Здравствуйте, Роман.
На Ubuntu 14.04 обновился недавно до версии 0.8.15.
В JavaLikeCalc произошёл сбой приоритетов операций. На строку такого вида:

false && true || false == false

выдаёт false.

Правильно, поскольку для этих операций не работают приоритеты, а работает последовательная проверка-вычисление операций условий в контексте. Скобки просто ставьте!

Не ошибка!

Learn, learn and learn better than work, work and work.
Повідомлення створено: 24. 01. 2016 [13:36]
IrmIngeneer
Константин \m/
Contributor
Sponsor
Зареєстрован(а) с: 16.09.2010
Повідомлення: 185
"dorn" wrote:


... обновился недавно до версии 0.8.15.
В JavaLikeCalc произошёл сбой приоритетов операций. На строку такого вида:

false && true || false == false

выдаёт false.


В 0.8.14 точно так же.
А в какой не так?
Повідомлення створено: 25. 01. 2016 [08:50]
dorn
Максим Алексеев
Автор теми
Зареєстрован(а) с: 24.10.2015
Повідомлення: 17
Да, может и в 8.14 тоже так было..

В таком случае нужно в документации
http://wiki.oscada.org/Doc/JavaLikeCalc?v=13mz п.1.2
пометить операции && и || одним цветом
Повідомлення створено: 25. 01. 2016 [11:16]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"dorn" wrote:

Да, может и в 8.14 тоже так было..

В таком случае нужно в документации
http://wiki.oscada.org/Doc/JavaLikeCalc?v=13mz п.1.2
пометить операции && и || одним цветом

OK, помечу.
Собственно ранее, в упрощённой реализации, эти приоритеты там и работали. А потом, кода добавилась условная проверка-исполнение последующего подвыражения, приоритеты там работать перестали. Да собственно в том-же С++ именно по этой причине компилятор ругается когда смешиваются операции "||", "&&" и я лично всегда их скобками выделяю.

Что касается условной проверки, то, например, для выражения ниже функция extCheckCall() вообще будет вызываться только в случае v1 = false.
JAVASCRIPT
rez = v1 || extCheckCall();

А для выражений ниже становится возможной динамическая работа в принципе:
JAVASCRIPT
if(nPnt && (rVal=nPnt.extCheckCall())) {SomeDo};


Learn, learn and learn better than work, work and work.



12561