Switching and Nesting
Switching and Nesting... or ELSE!
Our conditional blocks up to now have been been analogous to light switches—when turned “on,” something occurs, but when turned “off,” that something does not occur. This makes sense given the nature of our conditions—they are binary—either on or off.
However, this is not the only kind of binary switch we can model in a program. Consider a railroad switch as a type of binary, either/or switch.
With this type of switch, rather than choosing to do something or not, you are selecting between two alternate outcomes. One (and only one) of the outcomes will occur! In the railroad switch example, the train, upon approaching the junction, will take either the left or the right track, depending on how the switch is oriented.
Scratch allows for this type of conditional with the
if / else block:
Check the condition. Is it true or false?
If it is true, then do what is enclosed in the
if portion of the block. This is exactly the same as the standard
If it is false, then do what is enclosed in the
else portion of the block. This differs from the standard if block. Instead of doing nothing rather than what is enclosed in the
if block, an alternate set of blocks is executed.
Russian Nesting Dolls
The Russian nesting dolls are an iconic example of Russian culture. However, they also illustrate an important construct in computer programming—nested blocks.
Our newly learned
if / else block is powerful; it allows a program to follow one of two paths upon reaching a condition. In other words, it allows the program to make an either/or decision.
Are you thirsty? Options: [YES] [NO]
However, this is not how humans decide most things. Generally, there are more than two possible outcomes to a decision.
What would you like to drink? Options: [Water] [Soda] [Coffee] [Juice]
It would be nice if our programs could choose from among multiple different paths rather than just two.
A Precursor to the Next Unit
We will examine this concept in much greater detail in Unit 3: Data Representation, but for now we will rely on our intuitions. Although each bit (in this case, each condition) represents a dichotomy between two possible choices, they can be chained together to represent more. Let’s look at how we might “chain”
if / else blocks together to represent the questions/answers above.
The first question: “Are you thirsty?”
Notice that if the
answer is yes, the program asks “What would you like to drink?” If the
answer is no, the program simply continues on. The second question is dependent on the the
answer of the first.
The second question: “What would you like to drink?”
There are four possible answers, so the program handles each to produce four different outputs. However, notice that the
if / else blocks are nested, much like nesting dolls, where one
if / else block is contained entirely within another. This is different than saying, “If it’s water, do this. If it’s soda, do that. If it’s coffee, do x, and if it’s juice, do y.”
Like the nesting dolls, the blocks within an
else portion of a block are not even accessed/executed unless the program “uncovers” them by taking the appropriate branch. So, in our example program, the
answer is not even checked against soda if the
answer was already matched to water. At the point at which the program finds a match for
answer, it is effectively done searching for one.
The algorithm is as follows:
- Check to see if the answer is water.
- If it is, output “Drink 8 glasses a day!” [DONE]
- If it is not, check to see if the answer is soda.
- If it is, output “Bad choice! That stuff is full of sugar.” [DONE]
- If it is not, check to see if the answer is coffee.
- If it is, output “Too much caffeine!” [DONE]
- If it is not, output “Juice is delicious.” [DONE]
If [DONE] is ever reached, then the program is effectively done with executing the nested
if / else blocks.
The blocks tying both questions together:
How is juice matched if it is never explicitly checked for?
How many times is
answer checked in each of the following cases?
- yes, water
- yes, soda
- yes, coffee
- yes, juice
How could the program be modified to check the answers to ensure that they are valid. In other words, if someone answers Sunny D or milk to “What would you like to drink?” the response would be “Sorry, we don’t have that.”