Defensive Programming
Status Codes
A small status value can explain why a validation step succeeded or failed.
Status Codes
status_codes.cpp
#include <iostream>
#include <string>
enum class PasswordStatus {
ok,
empty,
tooShort
};
PasswordStatus checkPassword(const std::string& password) {
if (password.empty()) {
return PasswordStatus::empty;
}
if (password.size() < 6) {
return PasswordStatus::tooShort;
}
return PasswordStatus::ok;
}
std::string labelFor(PasswordStatus status) {
if (status == PasswordStatus::ok) {
return "ok";
}
if (status == PasswordStatus::empty) {
return "empty";
}
return "tooShort";
}
int main() {
std::string password = ;
PasswordStatus status = checkPassword(password);
std::cout << "passwordLength=" << password.size() << std::endl;
std::cout << "status=" << labelFor(status) << std::endl;
return 0;
}
#include <iostream>
#include <string>
enum class PasswordStatus {
ok,
empty,
tooShort
};
PasswordStatus checkPassword(const std::string& password) {
if (password.empty()) {
return PasswordStatus::empty;
}
if (password.size() < 6) {
return PasswordStatus::tooShort;
}
return PasswordStatus::ok;
}
std::string labelFor(PasswordStatus status) {
if (status == PasswordStatus::ok) {
return "ok";
}
if (status == PasswordStatus::empty) {
return "empty";
}
return "tooShort";
}
int main() {
std::string password = ;
PasswordStatus status = checkPassword(password);
std::cout << "passwordLength=" << password.size() << std::endl;
std::cout << "status=" << labelFor(status) << std::endl;
return 0;
}
#include <iostream>
#include <string>
enum class PasswordStatus {
ok,
empty,
tooShort
};
PasswordStatus checkPassword(const std::string& password) {
if (password.empty()) {
return PasswordStatus::empty;
}
if (password.size() < 6) {
return PasswordStatus::tooShort;
}
return PasswordStatus::ok;
}
std::string labelFor(PasswordStatus status) {
if (status == PasswordStatus::ok) {
return "ok";
}
if (status == PasswordStatus::empty) {
return "empty";
}
return "tooShort";
}
int main() {
std::string password = ;
PasswordStatus status = checkPassword(password);
std::cout << "passwordLength=" << password.size() << std::endl;
std::cout << "status=" << labelFor(status) << std::endl;
return 0;
}
status code
Returning a status keeps normal error reporting explicit and traceable.