GPinzone

Operator precedence using multiple AND and OR

11 posts in this topic

#1 ·  Posted (edited)

I checked the documentation page here: https://www.autoitscript.com/autoit3/docs/intro/lang_operators.htm

The precedence list seems to imply "And" and "Or" have equal precedence, but usually "And" has higher precedence than "Or."

Opt('MustDeclareVars', 1)

Local $x = True, $y = True, $z = False

If $x Or $y And $z Then
    MsgBox(0, "", "True")
Else
    MsgBox(0, "", "False")
EndIf

If interpreted as $x Or ( $y And $z ) it should be "True Or ( True And False )" resulting in a True but it comes out as False probably because it does the "Or" operation first. Why does AutoIt have different precedence for "And" and "Or" logical operators than other popular languages? Obviously, this affects short circuiting, too.

Edited by GPinzone

Gerard J. Pinzonegpinzone AT yahoo.com

Share this post


Link to post
Share on other sites



Operator precedence is interpreted from left to right, which is the same in all languages. That line is interpreted as

It will be true if ($x or $y is true) and $z is true

So unless both halves on either side of the And is true, $x Or $y on one side and And $z on the other, it's going to be false.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

Believe "And" and "Or" don't have preference over each other, also in the helpfile documented like that, hence the left to right.  

Jos


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

Believe "And" and "Or" don't have preference over each other, also in the helpfile documented like that, hence the left to right.  

Jos

That's the problem, not the solution.


Gerard J. Pinzonegpinzone AT yahoo.com

Share this post


Link to post
Share on other sites

The solution is always to use parenthesis to force the semantic you want and ease future code maintainance.


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

It's not a "problem" it's a fact of how AutoIt works, you need to learn how it works, and work with it that way.

And and Or have equal precedence in AutoIt, just as * and / have equal precedence. In other languages they don't, but you're not using other languages, you're using AutoIt.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

It's not a "problem" it's a fact of how AutoIt works, you need to learn how it works, and work with it that way.

And and Or have equal precedence in AutoIt, just as * and / have equal precedence. In other languages they don't, but you're not using other languages, you're using AutoIt.

What is the advantage to implement it different from every major language? Have you thought about swapping rows and columns for arrays to be more like Fortran rather than every other modern programming language on the planet? No reason. Just for fun. Just document it. That absolves everything.


Gerard J. Pinzonegpinzone AT yahoo.com

Share this post


Link to post
Share on other sites

That's the problem, not the solution.

Lovely way of communication which reminds me of somebody.
Make a proposal for change in our ticket system when you insist.

Jos


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

Probably what the op means is the order of the operations without using brackets. Similar to 4 + 5 * 6.

See https://en.wikipedia.org/wiki/Order_of_operations


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

This is what it is at this moment and think we can close this discussion now. Any other emotions are really irrelevant. 

Quote helpfile:

When more than one operator is used in an expression the order in which things happen is controlled by operator precedence. The precedence used in AutoIt is given below. Where two operators have the same precedence the expression is evaluated left to right.

From highest precedence to lowest:

    Not
    ^
    * /
    + -
    &
    < > <= >= = <> ==
    And Or

Jos


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now