CS1: Lecture 19 – If Diversions
Dear students,
We’ve seen the computer as a calculator, crunching numbers. We’ve seen the computer as a chef, calling upon recipes of code. We’ve seen the computer as a philosopher, considering truths about our data. Now it’s time to let those truths drive our computer’s actions. We will see the computer as a pilot, navigating wild routes through our code based on conditions.
Diversions
Normally, the flow of control in a program goes from the top of a method to its bottom, one statement after another. The ball gets rolling in main
, and it may temporarily pause its execution to let another method do some work. But in general, it’s one statement after another. Sometimes, however, we want to do some extra work under certain conditions. I call this pattern a diversion, and we structure it like so:
// pre work
if (booleanCondition) {
// diversion work
}
// post work
The key observation here is that the diversion doesn’t always get executed. Only when booleanCondition
is true. Let’s see this pattern in some real contexts:
- cat meowing in Scratch
- cat wrapping in Scratch
- play notes in Scratch
pluralize
- calculating damage with bonus
- bulk discount
- ensuring
http://
on URLs
Bifurcations
In other situations, we actually want to choose between two alternative bits of code. We want to take some action when a condition is true, but some other action when the condition is false, but not both actions. They are mutually exclusive. I call this pattern a bifurcation, and it has this structure:
// pre work
if (booleanCondition) {
// then work
} else {
// else work
}
// post work
Only one of the two blocks will get executed. Let’s also see this pattern in some real contexts:
- cat vs. Jill—in which the cat likes people not named Jill
Sometimes
—which presents a web page that is sometimes red and sometimes blueFlashmod
—which prompts the user to solve a mod problem
TODO
Here’s your TODO list to complete before we meet again:
- Read chapter 4 through section 4.1 in your book. On a quarter sheet, write an example
if
statement that guides the actions of your life. Here’s one for me:Make sure the then-block and else-block contain statements or actions. Unlike a passiveif (fridge.contains("Orange Juice")) { drink("Orange Juice"); hitPoints += 10; } else { go("Festival Foods"); buy("Orange Juice"); }
boolean
expression,if
statements do something. - Homework 3 is assigned!
See you next class!
P.S. It’s time for a haiku!
Do good? Or evil?
Harvey Dent sees heads or tails
When “faced” with a choice
P.P.S. Here’s the code we wrote together in class…
Ifs.java
package lecture1016.cs145;
public class Ifs {
public static void main(String[] args) {
int nMessages = 3;
System.out.printf("You've got %d %s!%n", nMessages, pluralize("message", nMessages));
System.out.println(getDamageHP(9001, 2));
}
public static String pluralize(String singular, int quantity) {
String form = singular;
if (1 != quantity) {
form += "s";
}
return form;
}
public static int getDamageHP(int attack, int defense) {
int hp = Math.max(attack - defense, 0);
if (Math.random() <= 0.05) {
hp += 100;
}
return hp;
}
}
Ifs.java
package lecture1016.cs148;
public class Ifs {
public static void main(String[] args) {
System.out.println(getDamage(1000, 235));
System.out.println(sanitizeUrl("coolmathgames.com"));
}
public static int getDamage(int attack, int defense) {
int damage = Math.max(0, attack - defense);
if (Math.random() >= 0.9) {
damage *= 2;
}
return damage;
}
public static String sanitizeUrl(String url) {
String sanitizedUrl = url;
if (!sanitizedUrl.startsWith("https://")) {
sanitizedUrl = "https://" + sanitizedUrl;
}
return sanitizedUrl;
}
}