General Control Issues
1. Break complicated tests into partial tests with new boolean variables.
Rather than creating a monstrous test with half a dozen terms, assign intermediate values to terms that allow you to perform a simpler test.
2. Move complicated expressions into boolean functions
If a test is repeated often or distracts from the main flow of the program, move the code for the test into a function and test value of the function.
3. Use decision tables to replace complicated conditions
Sometimes you ahve a complicated test involving serveral variables. It can be helpful to use a decision table to perform the test rather than using ifs or cases.
4. In if statements, convert negatives to positives and flip-flop the code in the if and else clauses.
5. Apply DeMorgan's theorems to simplify boolean tests with negatives.
if (!displayOK || !printerOK)
if (!(displayOK && printerOK))
6. Fully parenthesize logical expressions
Parentheses are cheap, and they aid readability.
1. Write pairs of braces together
2. Use braces to clarify conditions.
Taming Dangerously Deep Nesting
Many researchers recommend avoiding nesting to more than three or four levels.
1. Simplify a nested if by retesting part of the condition.
2. Simplify a nested if by using a break block.
3. Convert a nested if to a set of if-then-elses
4. Convery a nested if to a case statement
5. Factor deeply nested code into its own routine.