Defensive Programming
Early Returns
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
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;
}
itemCount ← 3
13int main() {14 int itemCount→ 3 = 3; //@itemCount=0, 121516 int cost = shippingCost(itemCount3);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}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
itemCount ← 0
13int main() {14 int itemCount→ 0 = 0;1516 int cost = shippingCost(itemCount0);int shippingCost(int itemCount)
3int shippingCost(int itemCount0) {4 if (itemCount <= 0) {if (itemCount <= 0)
3int shippingCost(int itemCount) {4 if (itemCount0 <= 0) {5 return 0;6 }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
itemCount ← 12
13int main() {14 int itemCount→ 12 = 12;1516 int cost = shippingCost(itemCount12);int shippingCost(int itemCount)
3int shippingCost(int itemCount12) {4 if (itemCount <= 0) {if (itemCount > 10)
6}7if (itemCount12 > 10) {8 return 12;9}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