对调用方来说一个函数的可读性主要体现在下面几个方面:
- 函数名称
- 函数参数
- 函数注释,文档
函数的 bool
类型参数会大大降低函数的可读性:
int main(int argc, char* argv[]) {
ParseCommandLineFlags(&argc, &argv, false); // what the last argument means?
}
// bad fix
int main(int argc, char* argv[]) {
ParseCommandLineFlags(&argc, &argv, false /* preserve flags */);
}
// better fix
int main(int argc, char* argv[]) {
ParseCommandLineFlags(&argc, &argv, /*remove_flags=*/false); // clang tidy friendly
}
// better fix
int main(int argc, char* argv[]) {
const bool remove_flags = false;
ParseCommandLineFlags(&argc, &argv, remove_flags);
}
一般来说较好的解决方案是避免使用 bool
类型参数,使用枚举类型来替代。枚举类型可读性好,扩展性好,能表示更多的状态选项:
enum ShouldRemoveFlags { kDontRemoveFlags, kRemoveFlags };
void ParseCommandLineFlags(int* argc, char*** argv, ShouldRemoveFlags remove_flags);
int main(int argc, char* argv[]) {
ParseCommandLineFlags(&argc, &argv, kDontRemoveFlags);
}
// use enum class
enum class ShouldRemoveFlags { kNo, kYes };
void ParseCommandLineFlags(int* argc, char*** argv, ShouldRemoveFlags remove_flags);
int main(int argc, char* argv[]) {
ParseCommandLineFlags(&argc, &argv, ShouldRemoveFlags::kNo);
}