Early returns keep special cases close to the top of a function.

guard clause A guard clause returns early when a value does not meet the normal assumptions of the function.

Early Returns

itemCount
early_returns.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

int shippingCost(int itemCount) {
    if (itemCount <= 0) {
        return 0;
    }
    if (itemCount > 10) {
        return 12;
    }
    return 5;
}

int main() {
    int itemCount = 3;

    int cost = shippingCost(itemCount);

    std::cout << "itemCount=" << itemCount << std::endl;
    std::cout << "shippingCost=" << cost << std::endl;
    return 0;
}
#include <iostream>

int shippingCost(int itemCount) {
    if (itemCount <= 0) {
        return 0;
    }
    if (itemCount > 10) {
        return 12;
    }
    return 5;
}

int main() {
    int itemCount = 0;

    int cost = shippingCost(itemCount);

    std::cout << "itemCount=" << itemCount << std::endl;
    std::cout << "shippingCost=" << cost << std::endl;
    return 0;
}
#include <iostream>

int shippingCost(int itemCount) {
    if (itemCount <= 0) {
        return 0;
    }
    if (itemCount > 10) {
        return 12;
    }
    return 5;
}

int main() {
    int itemCount = 12;

    int cost = shippingCost(itemCount);

    std::cout << "itemCount=" << itemCount << std::endl;
    std::cout << "shippingCost=" << cost << std::endl;
    return 0;
}
  1. itemCount ← 3

    13int main() {14    int itemCount→ 3 = 3; //@itemCount=0, 121516    int cost = shippingCost(itemCount3);
  2. int shippingCost(int itemCount)

    3int shippingCost(int itemCount3) {4    if (itemCount <= 0) {5        return 0;6    }7    if (itemCount > 10) {8        return 12;9    }10    return 5;11}
  3. cost ← 5

    16    int cost→ 5 = shippingCost(itemCount3);1718    std::cout << "itemCount=" << itemCount3 << std::endl;19    std::cout << "shippingCost=" << cost5 << std::endl;20    return 0;21}
    outputitemCount=3
    shippingCost=5
  1. itemCount ← 0

    13int main() {14    int itemCount→ 0 = 0;1516    int cost = shippingCost(itemCount0);
  2. int shippingCost(int itemCount)

    3int shippingCost(int itemCount0) {4    if (itemCount <= 0) {
  3. if (itemCount <= 0)

    3int shippingCost(int itemCount) {4    if (itemCount0 <= 0) {5        return 0;6    }
  4. cost ← 0

    16    int cost→ 0 = shippingCost(itemCount0);1718    std::cout << "itemCount=" << itemCount0 << std::endl;19    std::cout << "shippingCost=" << cost0 << std::endl;20    return 0;21}
    outputitemCount=0
    shippingCost=0
  1. itemCount ← 12

    13int main() {14    int itemCount→ 12 = 12;1516    int cost = shippingCost(itemCount12);
  2. int shippingCost(int itemCount)

    3int shippingCost(int itemCount12) {4    if (itemCount <= 0) {
  3. if (itemCount > 10)

    6}7if (itemCount12 > 10) {8    return 12;9}
  4. cost ← 12

    16    int cost→ 12 = shippingCost(itemCount12);1718    std::cout << "itemCount=" << itemCount12 << std::endl;19    std::cout << "shippingCost=" << cost12 << std::endl;20    return 0;21}
    outputitemCount=12
    shippingCost=12