DOC PREVIEW
UMD CMSC 131 - Lecture Set 4: Evaluation Order

This preview shows page 1-2 out of 6 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

1CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)Lecture Set 4:Evaluation OrderToday:More assignment operatorsPrecedence and short-circuitingCMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)1ExpressionsJava “phrases” that yield valuese.g.xx + 1 - yx == y && z == 0foo.equals (“cat”)Expressions have values (int, boolean, etc.)Expressions can be assigned to variables, appear inside other expressions, etc.CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)2Expressions and Side EffectsSome expressions can also alter the values of variablese.g. x=1x=1 is an expression?Yes!Value is result of evaluation right-hand side of =It also alters the value of xSuch alterations are called side effects2CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)3Are the Following Legal?int x, y;x = y = 1;Yes. Result assigns 1 to x and to yint x = 0, y = 1;boolean b = false;if (b = (x <= y)){ x = y;}Yes. Result assigns true to b and 1 to xCMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)4Other Expressions with Side EffectsJava includes abbreviations for common forms of assignmentExample: increment operations (Basically equivalent to x = x + 1++x “Pre-increment”Increments x, returns the new value of xx++ “Post-increment”Increments x, returns the old value of xSame or Differentx == x++x == ++xComparex++ * y++ ++x * ++y ++x * y++ x++ * ++yalways truenever trueCMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)5Other Assignment OperatorsExample: decrement operations (Basically equivalent to x = x - 1--x “Pre-decrement”Decrements x, returns the new value of xx-- “Post-decrement”Decrements x, returns the old value of xGeneral modification by constantGeneral form: <var> <op with=> <constant>Examplesx += 2 equivalent to x = x+2x -= 2 equivalent to x = x-2x *= 2 equivalent to x = x*2x /= 2 equivalent to x = x/23CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)6PrecedenceExplains how to evaluate expressionsWhat is value of 1 – 2 + 3 * 4?Precedence rules answer this questionHigher-precedence operators evaluated firstExample from math: “Please, Excuse my Dear Aunt Sally” or PEMDASMultiple and divide (higher precedence) before you add and subtract (lower precedence)Java follows “Aunt Sally’s Rules” … but what about other operators?CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)7Java Precedence Rulesparentheses: ( )unary ops: +x -x ++x –-x x++ x-- !xmultiply/divide: * / %add/subtract: + -comparisons: < > <= >=equality: == !=logical and: &&logical or: ||assignments: = += *= /= %= (only these are right to left associative)increasing precedenceCMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)8Examplesx * y + -zEquivalent to (x*y) + (-z)(x <= y && y <= z || w > z)Equivalent to ((x <= y) && (y <= z)) || (w > z)What is value of 1 – 2 + 3 * 4?1 -2 + 3 * 4= (1-2) + (3*4)= (1-2) + 12= -1 + 12= 114CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)9Should You Rely on Precedence?No!The only ones people can remember are “Please Excuse My Dear Aunt Sally”PEMDASBadif (2 * x++ < 5 * z + 3 && -w != x / 2)Better if (2 * (x++) < ((5 * z) + 3)) && ((-w) != (x / 2))CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)10Short-circuitingAs soon as Java knows an answer – it quits evaluating the expression.What does Java print?int x = 0, y = 1;if ((y > 1) && (++x == 0)){--y;}System.out.println (x);0Why?y > 1 is falseThe result of && will be false, regardless of second expressionJava therefore does not evaluate second expression of &&This treatment of &&, || is called short-circuitingSubexpressions evaluated from left to rightEvaluation stops when value of over-all expression is determinedCMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)11ExamplesWhat does Java print?int x = 0, y = 1;if ((y >= 1) && (++x == 0)) {--y;}System.out.println (x);1What does Java print?int x = 0, y = 1;if ( ((y > 1) && (++x == 0))||((y == 1) && (x++ == 0)) ) {--y;}System.out.println (y);System.out.println (x);015CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)12Examples (cont.)What does Java print?int x = 0, y = 0;while (x++ <= 4)y += x;System.out.println (y);15CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)13Programming with Side-EffectsGenerally:Side effects in conditions are hard to understandGood programming practiceConditions should be side-effect-freeSide effects should be in “stand-alone statements”Major Goal: Strive to create the most readable and maintainable code.CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)14Primitive Types and their Hierarchydoublefloatlongintshortbyteint x = 7.2;double y = 6;Changing to something else Further Up this list is acceptablecalled “Widening Conversion”Changing to Something else Further Down this list is not acceptable called “Narrowing Conversion”Explicit casting needed for when you want a downcast6CMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)15Type CastingWhich of the following are legal?int x = 3.5;Illegal: 3.5 is not an intfloat x = 3;Legal: 3 is an int, which is also a floatlong i = 3;Legal: 3 is an int, which is also a longbyte x = 155;Illlegal: 155 is to big to be a byte (> 127)double d = 3.14159F;Legal: 3.14159F is a float, which is also a doubleCMSC 131 Spring 2007Jan Plane (adapted from Bonnie Dorr)16Mixed ExpressionsWhat is result offloat x = 3 / 4;x assigned value 0.0FWhy?3, 4 are intsSo integer / operation is used, yielding 0, before upcasting is performedTo get floating point result, use explicit castingfloat x = (float) 3 / (float) 4;Assigns x the value 0.75FCan also do followingfloat x = (float) 3 / 4;Why?(float) 3 returns a value type float (3.0F)4 is an intIn this case, Java compiler uses widening conversion on “lower” type (here, int) to obtain values in same type before computing


View Full Document

UMD CMSC 131 - Lecture Set 4: Evaluation Order

Documents in this Course
Set #3

Set #3

7 pages

Exam #1

Exam #1

6 pages

Exam #1

Exam #1

6 pages

Notes

Notes

124 pages

Notes

Notes

124 pages

Load more
Download Lecture Set 4: Evaluation Order
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Lecture Set 4: Evaluation Order and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture Set 4: Evaluation Order 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?