Guard clause

A Guard Clause (one of the SmalltalkBestPracticePatterns, and equally applicable in a whole bunch of languages) is a chunk of code at the top of a function (or block) that serves a similar purpose to a Precondition.

It typically does one (or any or all) of the following:

  • checks the passed-in parameters, and returns with an error if they're not suitable.
  • checks the state of the object, and bails out if the function call is inappropriate.
  • checks for trivial cases, and gets rid of them quickly.


function getInsuranceDeductible(insurance) {

  if (insurance.covered) {

    if (insurance.majorRepair) {

      return 500

    } else if (insurance.mediumRepair) {

      return 300

    } else {

      return 100

    }

  } else {

    return 0

  }

}





function getInsuranceDeductibleBetter(insurance) {

  if (!insurance.covered) return 0 // Guard clause

  if (insurance.majorRepair) return 500

  if (insurance.mediumRepair) return 300



  return 100

}

For example:


draw() {

  if (! isVisible()) return;

  ...

}



// without Guard Clause

function getPayAmount() {

  let result;

  if (isDead)

    result = deadAmount();

  else {

    if (isSeparated)

      result = separatedAmount();

    else {

      if (isRetired)

        result = retiredAmount();

      else

        result = normalPayAmount();

    }

  }

  return result;

}



// with Guard Clause

function getPayAmount() {

  if (isDead) return deadAmount();

  if (isSeparated) return separatedAmount();

  if (isRetired) return retiredAmount();

  return normalPayAmount();

}

Leave a Comment