《代码整洁之道》读书笔记三
分隔指令与询问
函数要行做什么事( 例如 user.setName('xxx')
)、要么回答什么事( 例如 user.isVip()
)。一个函数里不要把两件事都干了。
如何写出好函数
- 分解函数
- 修改名称
- 消除重复
注释
好的注释
- 法律信息
- 警示性注释
TODO 注释
虽好,但也要定期查看,删除不再需要的
坏的注释
- 循规式注释。 例如每个函数都要有Javadoc或每个变量都要有注释的规矩全然是愚蠢可笑的。这类注释徒然让代码变得散乱
- 注释掉的代码。 现在已经有源代码控制系统,不要的代码应该立即删掉
- 不明显的联系。 注释及其描述的代码之间的联系应该显而易见。注释的作用是解释未能自行解释的代码。如果注释本身还需要解释,就太遗憾了
-
切断代码间的联系
// bad public class ReportConfig { // // The class name of the reporter listener // private String m_className; // //The properties of the reporter listener // private List<Property> m_properties = new ArrayList<Property>(); public void addProperty(Property property) { m_properties.add(property); } } // good public class ReportConfig { private String m_className; private List<Property> m_properties = new ArrayList<Property>(); public void addProperty(Property property) { m_properties.add(property); } }
格式
垂直距离
- 变量声名。 大多数情况下变量声名应该尽可能靠近其使用的位置。但是在类内,变量声名应该统一放在顶部,因为这样读者可以一眼看出这个类有什么变量。
- 相关函数。 若某个函数调用了另一个函数,就应该把它们放到一起,而且调用者应该尽可能放在被调用者上面。这样程序就有个自然顺序。
-
概念相关。 概念相关的代码应该放到一起。相关性越强,彼此之间的距离就该越短
public class Assert { static public void assertTrue(String message, boolean codition(){} static public void assertTrue(boolean codition(){} static public void assertFalse(String message, boolean codition(){} // ..... }
这些函数有关极强的概念相关性,因为他们拥有共同的命名模式,执行同一基础任务的不同变种。互相调用是第二位的。即便没有互相调用。也应该放在一起。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-10-30 2020/10/30 刘一辰的JAVA随笔