|
By that logic, shouldn't and AND & OR operators occur higher in the order of precedence than the =, <>, >, >=, <, & <= operators? - Dan --- Bob Cozzi <cozzi@xxxxxxxxx> wrote: > You also have to consider that the evaluation STOPS when the condition > cannot be met. So if I=0 the ARRAY(I)>10 comparison is never performed. > Hence, it works. > > Bob Cozzi > > -----Original Message----- > From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] > On Behalf Of Dan > Sent: Thursday, March 20, 2003 11:36 AM > To: rpg400-l@xxxxxxxxxxxx > Subject: Operation Precedence questions > > > I have a question about Operation Precedence in RPG-IV. FWIW, v5r2. I have > found the chapter on Expressions in the Reference and, specifically, the > sections titled "Operation Precedence" and "Short Circuit Evaluation". Upon > my brief foray into these topics, it appears to me that the two sections > permit a contradiction to the rules they set forth. > > "Operation Precedence" says: > > The precedence of operations determines the order in which operations are > performed within expressions. High precedence operations are performed > before lower precedence operations. > > The following list indicates the precedence of operations from highest to > lowest: > 1. () > 2. Built-in functions, user-defined functions > 3. unary +, unary -, NOT > 4. ** > 5. *, / > 6. binary +, binary - > 7. =, <>, >, >=, <, <= > 8. AND > 9. OR > > "Short Circuit Evaluation" says: > > Relational operations AND and OR are evaluated from left to right. However, > as soon as the value is known, evaluation of the expression stops and the > value is returned. As a result, not all operands of the expression need to > be evaluated. > > For operation AND, if the first operand is false, then the second operand is > not evaluated. Likewise, for operation OR, if the first operand is true, the > second operand is not evaluated. > > There are two implications of this behaviour. First, an array index can be > both tested and used within the same expression. The expression > I<=%ELEM(ARRAY) AND I>0 AND ARRAY(I)>10 > will never result in an array indexing exception. > > <my comments/questions follow> > > If AND & OR are always the lowest precedence, how can the array index > example above work? > According to the rules of precedence, as I interpret them, all of the > operands: > I<=%ELEM(ARRAY) > I>0 > ARRAY(I)>10 > would be evaluated before the AND relational operators. If 'I' is zero, I > would expect a run-time error on the ARRAY(I)>10 because the > operator has > a higher precedence than the AND operator. > > BTW, I know from experience that this example works. I am questioning > whether the precedence of operations really should be re-arranged to place > AND & OR higher in the list. > > - Dan __________________________________________________ Do you Yahoo!? Yahoo! Platinum - Watch CBS' NCAA March Madness, live on your desktop! http://platinum.yahoo.com
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.