The Elements of Programming Style
《The Elements of Programming Style 》是一本很古老的书。尽管 Fortran 我们不太使用,尽管新奇的语言层出不穷,但这些,30 年的岁月依旧无法掩盖其中的真知灼见。
英文版的 google 一下到处有,云风试着摘译几条。
- 把代码写清楚,别耍小聪明。
- 想干什么,讲的简单点、直接点。
- 只要有可能,使用库函数。
- 避免使用太多的临时变量。
- ”效率“不是牺牲清晰性的理由。
- 让机器去干那些脏活。
- 重复的表达式应该换成函数调用。
- 加上括号、避免歧义。
- 不要使用含糊不清的变量名。
- 把不必要的分支去掉。
- 使用语言的好特性,不要使用那些糟糕的特性。
- 该用逻辑表达式的时候,不要使用过多的条件分支。
- 如果逻辑表达式不好理解,就试着做下变形。
- 选择让程序更简洁的数据表达形式。
- 先用伪代码写,再翻译成你使用的语言。
- 模块化。使用过程和函数。
- 只要你能保证程序的可读性,能不用 goto 就别用 。
- 不要给糟糕的代码打补丁 - 重写就是了。
- 把大的程序分成一小片一小片来写,分块测试。
- 使用递归程序来处理递归定义的数据结构。
- 正确和错误的输入数据都要测试。
- 确保输入不会超出程序的限制。
- 依靠文件结束来终止输入,而不是依赖一个记数。
- 把文件结束作为一个输入状态来处理。
- 识别出错误的输入;如果有可能就修复它。
- 让输入数据很容易构造出来,让输出数据不言自明。
- 使用统一的输入格式。
- 让输入容易校对。
- 如有可能,提供更自由的输入格式。
- 使用输入提示,允许使用默认值。并把它们显示出来。
- 把输入输出放到子程序里。
- 确保所有的变量在使用前都有初始化。
- 不要因为一个 bug 而停止不前。
- 打开编译程序的调试选项。
- 常量结构用数据声明初始化,变量结构用执行代码初始化。
- 小心 off-by-one 错误。
- 当循环中有多个跳出点时要小心。
- 如果什么都不做,那么也要优雅的表现出这个意思。
- 用边界值测试程序。
- 手工检查一些答案。
- 防御式编程 - 为不可能的情况写几句代码。
- 10.0 乘 0.1 很难保证永远是 1.0 。
- 7/8 等于 0 ,而 7.0/8.0 不等于 0 。
- 不要直接判断两个浮点数相等。
- 先做对,再弄快。
- 先使其可靠,再让其更快。
- 先把代码弄干净,再让它变快。
- 别为了获得一丁点“性能”就牺牲掉整洁。
- 让编译器做些简单的优化。
- 不要过分追求重用代码;下次用的时候重新组织一下即可。
- 确保特殊的情况是真的特殊。
- 保持简洁以获得速度。
- 不要死磕代码来加快速度 - 找个更好的算法。
- 用工具分析你的程序。在做“性能”改进前先评测一下。
- 确保注释和代码一致。
- 不要在注释里仅仅重复代码 - 让每处注释都有价值。
- 不要给糟糕的代码做注释 - 应该重写它。
- 给变量都起个有意义的名字。
- 把程序重新整理一下,让阅读代码的人更容易理解。
- 为你的数据布局写一个文档。
- 不要过分注释。
分类:
代码风格&质量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述