Testing a condition before a calculation keeps invalid input from reaching the risky line.

precondition A precondition is a fact that must be true before the next operation is safe.
guarded calculation The guarded branch performs the calculation only when the input passes the check.

Precondition Check

divisor
PreconditionCheck.java
Replay: real traced execution (multi-file project)
public class PreconditionCheck {
    public static void main(String[] args) {
        int divisor = 5;
        boolean valid = divisor != 0;

        if (valid) {
            int quotient = 40 / divisor;
            System.out.println("valid=" + valid + " quotient=" + quotient);
        } else {
            System.out.println("valid=" + valid + " quotient=skipped");
        }
    }
}
public class PreconditionCheck {
    public static void main(String[] args) {
        int divisor = 0;
        boolean valid = divisor != 0;

        if (valid) {
            int quotient = 40 / divisor;
            System.out.println("valid=" + valid + " quotient=" + quotient);
        } else {
            System.out.println("valid=" + valid + " quotient=skipped");
        }
    }
}
public class PreconditionCheck {
    public static void main(String[] args) {
        int divisor = 8;
        boolean valid = divisor != 0;

        if (valid) {
            int quotient = 40 / divisor;
            System.out.println("valid=" + valid + " quotient=" + quotient);
        } else {
            System.out.println("valid=" + valid + " quotient=skipped");
        }
    }
}
  1. divisor ← 5, valid ← true

    1public class PreconditionCheck {2    public static void main(String[] args) {3        int divisor→ 5 = 5;  //@divisor=0, 84        boolean valid→ true = divisor5 != 0;
  2. quotient ← 8

    6if (validtrue) {7    int quotient→ 8 = 40 / divisor5;8    System.out.println("valid=" + validtrue + " quotient=" + quotient8);9} else {
    outputvalid=true quotient=8
  1. divisor ← 0, valid ← false

    1public class PreconditionCheck {2    public static void main(String[] args) {3        int divisor→ 0 = 0;4        boolean valid→ false = divisor0 != 0;
  2. else

    8    System.out.println("valid=" + valid + " quotient=" + quotient);9} else {10    System.out.println("valid=" + validfalse + " quotient=skipped");11}
    outputvalid=false quotient=skipped
  1. divisor ← 8, valid ← true

    1public class PreconditionCheck {2    public static void main(String[] args) {3        int divisor→ 8 = 8;4        boolean valid→ true = divisor8 != 0;
  2. quotient ← 5

    6if (validtrue) {7    int quotient→ 5 = 40 / divisor8;8    System.out.println("valid=" + validtrue + " quotient=" + quotient5);9} else {
    outputvalid=true quotient=5