Chapter 6: (Expressions,) Functions, and If/Else First we had animations – They “ran”/played the same way every time. – Neat, but a bit boring Then we had events – The user can directly control what happens. – But, per event, what happens is the exact same thing (set of instructions) every time What if you want your world to react based on other characteristics? – What if you want your plane to burst into flame if it tries to fly into the ground? Before we get to if statements, we need functions – to allow us to calculate when or how things should happen
Chapter 6.1 Expressions and Functions
Pick the best description of the purpose of methods and functions in Alice MethodsFunctions APerform actions in the world Return a value B Perform actions in the world C Change the state of the world numerically D Perform actions in the world
A.Rotate in place, because the move method is called incorrectly B.Roll along, but not in a realistic fashion C.Roll along in a realistic fashion What does the code below do? It makes the ball… (assume the ball is 1 meter wide)
Can a function have parameters? A.No, the goal of a function is to compute/return a value B.No, a function should always compute/return the same value, so it cannot be varied by a parameter to the function C.Yes, a function can compute/return a value that can be varied based on the parameters to the function
Chapter 6: (Expressions,) Functions, and If/Else What if you want your world to react based on other characteristics? – What if you want your plane to burst into flame if it tries to fly into the ground? Before we get to if statements, we need functions – to allow us to calculate when or how things should happen
H Hard-Coded: Not realistic Ball’s size important Use Expression to Represent math Hide Messy Expression In Function
Use Expression to Represent math
Sanity Check: A.Yes, it makes sense that the big ball “turns” less than the small ball B.No, we’ve messed something up, the small ball should “turn” less than the big ball C.I don’t believe you – you did the math wrong, the way it’s written the big ball WILL turn more!
First: Writing Expressions Whose Values Control Action Let’s make sure we know the difference between expressions and instructions
How many of the underlined “items” result in values? A)1B) 2C)3D) 4E) Don’t Know
An expression cannot stand alone Expressions are a part of an instruction tile – Not an instruction all on their own – They evaluate to a number like 2. What kind of instruction is “2”? – They GUIDE how an instruction tile behaves Just like expressions in English – Parenthetical expressions are PART of an English sentence (not something you say by itself) – The fruit fly, for example, can breed up to ten times in one hour* – I was out all night and, consequently, didn’t finish my homework * AND: It’s Purple!
Transactive Discourse: No monologue-ing! Ask for FeedbackParaphraseJustify Do you agree with and understand me? So, what you said was… Why do you say that?
Use Expression to Represent math Hide Messy Expression In Function Mathematical Expressions: Use them and Hide them away in Functions
You just need to be able to translate from “math” format (written) to Alice code Order of operations is taken care of – Alice fully parenthesizes 2 + 5* 4 / (4 - 2)
In Alice: Often you will create expressions with unnecessary parentheses: It’s OK Demo (Part 1): Creating that value in Alice – Suppose we want to move a hare forward by 2 + 5* 4 / (4 - 2). Start off creating a move forward tile for the hare, and set the amount (initially) to 2 meters. – Click on the arrow next to the 2 meters parameter, and (in the drop down menu) Select math Select 2 + then say other and enter 5
In Alice: Often you will create expressions with unnecessary parentheses: It’s OK Demo (con’t): Creating that value in Alice – Click on the arrow RIGHT next to the 5, select math * other and enter 4 – Click on the arrow after this parenthesis select math / other 4 – Click on the arrow RIGHT next to the last 4, select math - 2
Alice specifics: Where is the center? When one object “move to” another object, it’s center moves “on top” of the other object’s center – But centers vary by object
Alice specifics: Where is the center? Bee Center: Exact middle of height, width, depth Tulip Center: At base of stem
Read and Understand Expressions: The code below should make a bee fly to perch PERFECTLY on the top of a tulip If our tulip is 0.3 meters high and our fly is (very big) at 0.1 meters tall (high), how far UP will the bee move in the second instruction? A)0.2 meters B) 0.3 meters C)0.35 metersD) It’s not possible to tell E) I don’t know
In Discussion Someone Says: This code will always cause the bee to move up 0.35 meters, no matter how you design your tulip and bee objects A.I agree. The expression must always evaluate to 0.35 because that’s the way we designed it B.I disagree. The expression will evaluate to different values based on the heights of our tulip and bee objects C.It depends. We can’t tell if that’s true or not
Why is this useful? Multiple Sized Tulip Demo We have a world with multiple tulips in it, they are of varying sizes. We want to USE THE SAME CODE (e.g. not have to write it multiple times) to have the bee fly to the top of any flower – We’ll do it once per flower Write a bee-class method – Parameter is what flower to fly to the top of Call that method three times
Write expression to move to stand with feet on ground Standing perfectly, Feet on ground Feedback Paraphrase Justify
Putting it all together To control some actions REALISTICALLY we need to calculate values based on objects in the world We write EXPRESSIONS to represent the calculation required Messy expressions can be hidden inside FUNCTIONS (sometimes needing parameters) 1 2 3
Expression -> Function Demo: Previously, we built up a kind of complex expression that returns a numerical value Create a function to hide away complexity – World level function – Returns Number – Copy old expression to clipboard and drag back into function
Problem: How to make a RandomGuy walk up the side of a pyramid. Important 3-D facts: – Pyramid’s center is in middle of base – Height is the straight up and down height – Width/2 forms a triangle with height Where the hypotenuse is the distance up the side of the pyramid a 2 + b 2 = c 2 height*height + width*width Length up side =
Problem: How to make a RandomGuy walk up the side of a pyramid. Important 3-D facts: – Pyramid’s center is in middle of base – Height is the straight up and down height – Width/2 forms a triangle with height Where the hypotenuse is the distance up the side of the pyramid a 2 + b 2 = c 2 a b c
Demo Notes: (note I have started the guy in the correct place) 1) Try to walk up pyramid using pyramid’s height 2) Build expression to use as parameter to randomGuy.move forward – Start with World function “square root of” pick a default value (like 1) – Replace 1 with our expression left to right a bit at a time: pyramid’s height*pyramid’s height* (pyramid’s width / 2) * (pyramid’s width /2 ) 3) Create a function to hide the complexity – Call it sideLength – It returns a number – Build the expression the exact same way, but replacing the 1 default in the return instruction/tile PLAY: It works!
The function we wrote
What is the BEST description of why we would write a function? A.There’s a set of complex actions that can be logically grouped together B.There’s a complex calculation that produces a value needed to control the action C.You need to calculate distances related to objects locations in 3-D space D.I don’t know Feedback Paraphrase Justify
Challenge Question: Methods have parameters, functions can too The function “sideLength" is controlled by both the width and height of the pyramid. Why weren't those parameters to the function? A.Beth messed up – they should have been parameters to the function, that was a bad design B.We did pass parameters to the sideLength function – for example these: C.We didn’t need to pass those values because sideLength is a function of the pyramid class D.I don’t know Feedback Paraphrase Justify