Difference between revisions of "If"

Jump to navigation Jump to search
205 bytes added ,  18:38, 26 May 2008
imported>HawkFest
imported>HawkFest
Line 73: Line 73:
Note that "||" is evaluated before "&&": '''"||" has precedence over "&&"''', just like "*" is evaluated before "+" in normal algebra. Which also shows an opposite behaviour that needs to be clarified, as it impacts the design of '''boolean expressions''', in terms operators notations for scripting any conditional expressions (IF statements): in arithmetic and algebra, from the earliest use of mathematical notation, multiplication took precedence over addition, and the standard order of operators is: 1-exponents and roots; 2-multiplication and division; 3-addition and subtraction;
Note that "||" is evaluated before "&&": '''"||" has precedence over "&&"''', just like "*" is evaluated before "+" in normal algebra. Which also shows an opposite behaviour that needs to be clarified, as it impacts the design of '''boolean expressions''', in terms operators notations for scripting any conditional expressions (IF statements): in arithmetic and algebra, from the earliest use of mathematical notation, multiplication took precedence over addition, and the standard order of operators is: 1-exponents and roots; 2-multiplication and division; 3-addition and subtraction;
* In terms of computing, we're talking about a '''precedence number order''', and operator precedence is usually ordered with the corresponding number order. For expressions where two operators of different precedences compete for the same operand, the operator with the ''higher precedence'' wins.
* In terms of computing, we're talking about a '''precedence number order''', and operator precedence is usually ordered with the corresponding number order. For expressions where two operators of different precedences compete for the same operand, the operator with the ''higher precedence'' wins.
* In Common operator notation involving "normal" alegebra or boolean algebra, "*" is always evaluated before "+", it has a higher precedence number than the "+" operator. For example, 3×4+5 = ((3×4)+5), not (3×(4+5))  
* '''functions have precedence over comparision and arithmetic operators, which themselves always have precedence over logical operators ("||" and "&&").'''
* However, this is not the case here: '''OR ("||") has a higher precedence than AND ("&&")''':<pre>if myVar1 == 1 && myVar2 == 1 || myVar2 == 5</pre>is equivalent to<pre>if myVar1 == 1 && (myVar2 == 1 || myVar2 == 5)</pre>This is true when MyVar1 = 1 AND myVar2 is either 1 or 5.<BR><BR>If you want the "&&" comparision operator to be evaluated first, you have to include that part in parentheses. In this case: <pre>if (myVar1 == 1 && myVar2 == 1) || myVar2 == 5</pre>is true when either myVar2 is 5 OR both, myVar1 and myVar2 are 1.
* In Common operator notation involving "normal" alegebra or boolean algebra, "*" ("&&") is always evaluated before "+" ("||"), it has a higher precedence number than the "+" operator. For example, 3×4+5 = ((3×4)+5), not (3×(4+5)). However, this is not the case with Oblivion's scripting language, since '''OR ("||") has a higher precedence than AND ("&&")''':<pre>if myVar1 == 1 && myVar2 == 1 || myVar2 == 5</pre>is equivalent to<pre>if myVar1 == 1 && (myVar2 == 1 || myVar2 == 5)</pre>This is true when MyVar1 = 1 AND myVar2 is either 1 or 5.<BR><BR>If you want the "&&" comparision operator to be evaluated first, you have to include that part in parentheses. In this case: <pre>if (myVar1 == 1 && myVar2 == 1) || myVar2 == 5</pre>is true when either myVar2 is 5 OR both, myVar1 and myVar2 are 1.


The later also explains why one has to be very careful in positioning conditions in a [http://cs.elderscrolls.com/constwiki/index.php?title=Category:Conditions#The_Condition_List condition list] of an editor item: for the CS/OB's engine, OR has order preference, ''has precedence'' over AND. For example, the condition items (A AND B OR C AND D) are evaluated as (A AND (B OR C) AND D), and not (( A AND B) OR (C AND D)), as opposed to common operator notation for most languages. In general, we call this an ''inversed'' or ''negative'' notation. '''Always keep the later in mind when [http://en.wikipedia.org/wiki/Boolean_algebra_%28logic%29#Basic_operations applying boolean algebra] for evaluating some given expression when scripting''', as standard operator notations will lead you to errors.
The later also explains why one has to be very careful in positioning conditions in a [http://cs.elderscrolls.com/constwiki/index.php?title=Category:Conditions#The_Condition_List condition list] of an editor item: for the CS/OB's engine, OR has order preference, ''has precedence'' over AND. For example, the condition items (A AND B OR C AND D) are evaluated as (A AND (B OR C) AND D), and not (( A AND B) OR (C AND D)), as opposed to common operator notation for most languages. In general, we call this an ''inversed'' or ''negative'' notation. '''Always keep the later in mind when [http://en.wikipedia.org/wiki/Boolean_algebra_%28logic%29#Basic_operations applying boolean algebra] for evaluating some given expression when scripting''', as standard operator notations will lead you to errors.
Anonymous user

Navigation menu