如何使用编程规则和指南

编程规则与指南的重要性及正确使用方式

Arne Mertz 在 NDC Tech Town 的演讲中探讨了编程规则和指南的重要性。他指出,正确使用这些规则和指南可以帮助开发者编写更一致、更高质量的代码,但错误的使用方式则可能导致代码难以阅读、甚至以次优或错误的方式解决问题。

规则与指南的区别

Mertz 强调了规则和指南之间的区别:

  • 规则:规则是绝对的,通常在适用时必须遵守,违反规则通常是不被接受的。
  • 指南:指南是最佳实践或合理的默认做法,开发者可能有理由偏离指南,这是可以接受的。

理解这一区别非常重要,因为将指南误认为规则可能导致开发者编写出不符合实际需求的代码,而不是打破指南本身。

规则的便利性与指南的灵活性

Mertz 指出,对于开发者来说,严格规则似乎更为方便。编译器对代码的接受标准非常严格,而规则可以帮助开发者在面对复杂问题时减少思考负担。然而,指南的灵活性意味着在某些情况下,指南可能不再适用,强行遵循指南可能导致代码冗长、难以阅读甚至错误。

具体规则与指南的探讨

1. "不要使用异常" 的规则

Mertz 解释了“不要使用异常”这一规则的来源。该规则源自 Google 的编程风格指南,Google 不使用异常的原因并非认为异常不好,而是因为其代码库中有大量未考虑异常的代码,引入异常可能导致未定义行为,并需要对现有代码进行大量重构。Mertz 指出,这一指南是基于 Google 的特殊需求,并且在 Google 内部也并非所有地方都遵循。

Mertz 认为,异常是 C++ 中报告错误的核心特性,不使用异常通常会导致使用错误返回码和输出参数,这会使代码更难阅读和理解。尽管现代库解决方案(如 std::expected)可以缓解这些问题,但在因 Google 指南而回避异常的项目中,这些解决方案并未得到广泛应用。

2. "每个函数应只有一个返回语句" 的规则

Mertz 还探讨了“每个函数应只有一个返回语句”这一规则。该规则出现在多个编程指南中,如 MISRA C 和 MISRA C++。支持者认为这有助于提高长函数的可读性,但反对者则认为应首先缩短函数。在 C 语言中,提前返回可能意外忽略资源清理,但在 C++ 中使用 RAII 类时,编译器会通过析构函数保证资源清理,因此这一论点不再适用。

Mertz 指出,遵循这一规则通常会导致使用“retVal”变量,该变量通常初始化为无意义的值,并期望在后续被赋予实际返回值。此外,还可能引入用于跟踪执行路径的变量或深度嵌套的控制流,这些模式往往使代码更加复杂,降低可读性。

总结

Mertz 强调,编程规则和指南的正确使用对开发团队至关重要。开发者应理解规则与指南的区别,并根据具体项目的需求灵活应用,以避免不必要的复杂性和错误。同时,应谨慎对待源自特定项目的指南,确保其适用性,而不是盲目模仿。

阅读 10
0 条评论