Exit a function early when a condition fails.

guard-return A guard return handles an exceptional or empty case first. The rest of the function can then read like the normal path.

Guard Returns

quantity
guard_return.js
Replay: real traced execution (multi-file project)
const quantity = 2;
function describeOrder(count) {
  if (count <= 0) {
    return "empty";
  }
  return "items=" + count;
}
const summary = describeOrder(quantity);

console.log("quantity=" + quantity);
console.log("summary=" + summary);
const quantity = 0;
function describeOrder(count) {
  if (count <= 0) {
    return "empty";
  }
  return "items=" + count;
}
const summary = describeOrder(quantity);

console.log("quantity=" + quantity);
console.log("summary=" + summary);
const quantity = 5;
function describeOrder(count) {
  if (count <= 0) {
    return "empty";
  }
  return "items=" + count;
}
const summary = describeOrder(quantity);

console.log("quantity=" + quantity);
console.log("summary=" + summary);
  1. quantity ← 2

    1const quantity→ 2 = 2; //@quantity=0, 52function describeOrder(count) {3  if (count <= 0) {4    return "empty";5  }6  return "items=" + count;7}8const summary = describeOrder(quantity2);
  2. //@quantity=0, 5 function describeOrder(count)

    1const quantity = 2; //@quantity=0, 52function describeOrder(count2) {3  if (count <= 0) {4    return "empty";5  }6  return "items=" + count2;7}
  3. summary ← items=2

    6  return "items=" + count;7}8const summary→ items=2 = describeOrder(quantity2);910console.log("quantity=" + quantity2);11console.log("summary=" + summaryitems=2);
    outputquantity=2
    summary=items=2
  1. quantity ← 0

    1const quantity→ 0 = 0;2function describeOrder(count) {3  if (count <= 0) {4    return "empty";5  }6  return "items=" + count;7}8const summary = describeOrder(quantity0);
  2. function describeOrder(count)

    1const quantity = 0;2function describeOrder(count0) {3  if (count <= 0) {
  3. if (count <= 0)

    1const quantity = 0;2function describeOrder(count) {3  if (count0 <= 0) {4    return "empty";5  }
  4. summary ← empty

    6  return "items=" + count;7}8const summary→ empty = describeOrder(quantity0);910console.log("quantity=" + quantity0);11console.log("summary=" + summaryempty);
    outputquantity=0
    summary=empty
  1. quantity ← 5

    1const quantity→ 5 = 5;2function describeOrder(count) {3  if (count <= 0) {4    return "empty";5  }6  return "items=" + count;7}8const summary = describeOrder(quantity5);
  2. function describeOrder(count)

    1const quantity = 5;2function describeOrder(count5) {3  if (count <= 0) {4    return "empty";5  }6  return "items=" + count5;7}
  3. summary ← items=5

    6  return "items=" + count;7}8const summary→ items=5 = describeOrder(quantity5);910console.log("quantity=" + quantity5);11console.log("summary=" + summaryitems=5);
    outputquantity=5
    summary=items=5