bool Job::acceptable(const JobCandidate &applicant) const { bool noFelonyConvictions = findFelonyConvictions(applicant); return noFelonyConvictions && qualified(applicant); }The
noFelonyConvictions
variable documents the code in a readable way, but it gets silly if the code ever changes so that you have to initialize it, or if someone ever wants to know if there are felony convictions. Things become less readable:bool noFelonyConvictions = true; if (applicant.findRecords(FELONY)) { noFelonyConvictions = false; } return applicant.qualified(!noFelonyConvictions);It all makes more sense if you name the variable
felonyConvictions
, which initializes naturally enough to false, can be set to true if one is found, and can be negated to show absence. Also, if you later become interested in the number of convictions, there will be fewer code changes if the variable changes from a bool
to an int
.Whenever you notice yourself putting a "no" into a variable name, get rid of it.