This wiki is a copy of the original Oblivion CS wiki created and maintained by the UESP.net. See CSwiki:Copy Notice for more info.

Difference between revisions of "If"

Jump to navigation Jump to search
1,967 bytes added ,  19:02, 26 May 2008
imported>Wrye
imported>HawkFest
Line 71: Line 71:




Note that "||" is evaluated before "&&", just like "*" is evaluated before "+" in normal algebra.
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 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 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.


If you want the && to be evaluated first, you have to include that part in parentheses. For example:
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''', as standard operator notations will lead you to errors.


<nowiki>if myVar1 == 1 && myVar2 == 1 || myVar2 == 5</nowiki>
This is true when MyVar1 = 1 AND myVar2 is either 1 or 5.
<nowiki>if (myVar1 == 1 && myVar2 == 1) || myVar2 == 5</nowiki>
This is true when either myVar2 is 5 OR both, myVar1 and myVar2 are 1


----
----
Line 92: Line 88:
  If ReferenceVariable != 0
  If ReferenceVariable != 0
     If ReferenceVariable.Getav Health < 30
     If ReferenceVariable.Getav Health < 30


== Comparisons and Expressions ==
== Comparisons and Expressions ==
Anonymous user

Navigation menu