Nested if Statements
You can have another if statement inside the if-block of an if statement and so on - this is called a nested if statement.
A Condition Inside a Condition
A nested if statement is an if statement placed inside the if-block of another if statement. The outside statement is the outer conditional, and the statement inside its block is the inner conditional. The inner condition is therefore reached through the structure created by the outer condition.
A nested conditional is a conditional statement that appears in one of the branches of another conditional statement.
Tracing the Outer and Inner Tests
To trace a nested if statement, begin with the outer condition. If the outer condition leads into its if-block, the inner if statement becomes part of the next decision. If the outer condition does not lead into that block, the inner if statement is not reached. This is the central control-flow relationship: the inner conditional is contained within the outer conditional's branch.
Two Decisions in Sequence
Consider a generated nested structure with an outer condition called A and an inner condition called B. Trace which condition is considered next when A leads into its if-block.
First decision: The outer condition A is considered first.
Enter the block: When A leads into its if-block, control reaches the nested if statement.
Second decision: The inner condition B is then considered within the outer block.
Follow the inner branch: The result associated with B is selected within the structure of the outer branch.
The inner condition is not an independent first step. It is reached through the outer condition's if-block.
What do you think happens?
A nested structure has outer condition A and inner condition B. If A does not lead into its if-block, what happens to B?
Reveal answer
Answer: B is not reached through that nested structure.
The inner if statement is located inside the outer if-block, so it is reached only through that containing branch.
Reading the Containment Structure
Indentation makes the structure of nested conditionals apparent. The statements belonging to the outer if-block are visually grouped, and the inner if statement is positioned within that group. When reading a nested conditional, ask two questions: which condition contains the other, and which branch must be entered before the inner condition can be reached?
Nested Versus Separate Conditions
A nested conditional places the second condition inside a branch of the first conditional. Separate conditionals do not create that same containment relationship. Consequently, when tracing a nested structure, the second condition is tied to reaching the first condition's relevant branch; in separate conditionals, the second statement is not positioned inside the first if-block.
| Structure | Position of the second condition | Tracing question |
|---|---|---|
| Nested conditional | Inside the first conditional's if-block | Was the containing branch reached? |
| Separate conditionals | Outside the first conditional's if-block | What is the position of the second statement? |
Readability and Simplification
Indentation can reveal the structure, but nested conditionals can become difficult to read very quickly. For that reason, it is generally a good idea to avoid nested conditionals when possible. Logical operators often provide a way to simplify nested conditional statements by expressing the conditions with a single conditional.
Treating the inner condition as independent of the outer condition.
The inner conditional appears inside the outer conditional's if-block, so its position depends on that containment.
Fix:
Trace the outer condition first, then decide whether control reaches the inner condition.Ignoring indentation when identifying the structure.
Indentation makes the nested structure apparent.
Fix:
Use the indentation and block boundaries to identify which conditional contains the other.Adding nesting without considering readability.
Nested conditionals become difficult to read very quickly.
Fix:
Consider whether logical operators can express the decision with a single conditional.
Practice the Trace
Create a trace for a generated nested structure with an outer condition named A and an inner condition named B. Write the order in which the conditions are considered, then explain what must happen before B can be reached. Finally, describe how the structure would differ if B were written as a separate conditional instead of inside A's if-block.
Hints
- Start with the condition that contains the other conditional.
- Identify the branch that contains the inner if statement.
- Compare containment in the nested structure with the position of the second statement in the separate structure.
- Nested if statements place one conditional inside the if-block of another conditional. The outer condition is traced first, and the inner condition is reached through the containing branch. Indentation reveals this containment, but several levels of nesting can quickly reduce readability. When possible, logical operators may provide a way to express the decision with a single conditional.
Key Takeaways
- A nested if statement is an if statement inside the if-block of another if statement.
- The outer condition is traced before the inner condition.
- The inner condition is reached through the outer conditional's containing branch.
- Indentation helps reveal the containment structure.
- Nested conditionals can become difficult to read, so logical operators may sometimes simplify them.