读书笔记3-代码大全
在过去我读书时,我经常喜欢通读全书,跟随着作者的思路和章节,记下自己的笔记,以便日后可以通过笔记回顾书中内容。我特别关注一些核心概念和技术,经常重复阅读相关的章节,以便掌握和深入理解这些概念和技术。
虽然全书的阅读是一个好习惯,但是这样做可能会导致一些问题。首先,过于全面的阅读对于许多程序员来说是不现实的,也许会花费很长的时间但最终无法弄清其中一些核心的概念。其次,有一些章节或内容可能与读者的背景或需求无关。此外,对于重复、复杂的内容,反复阅读可能会变得乏味和无效。
第一步,浏览。首先浏览一遍全书,阅读目录、简介、前言和摘要等内容,了解全书的大致内容和结构,找出自己最感兴趣的章节。
第二步,选择。基于第一步的浏览,选择自己感兴趣的章节,并集中注意力阅读这些章节,了解作者想要传达的核心信息和思想。
第三步,深入学习。通过对重点章节的深入学习,逐渐掌握阅读材料所涉及的核心概念和技术。通过这种方式,我们可以更快地掌握全书的核心内容,减少阅读冗余和浪费时间的情况,并且可以避免阅读过程中的乏味和无效。
总之,只有将阅读过程分层次进行,结合自己的实际需求,才能提高阅读的效率,并真正获得所需要的知识。
一、重构
1.软件演化类型
- 在修改中软件的质量要么提高,要么恶化。
- 软件演化的基本原则就是,演化应当提高程序的内在质量。
2.重构的理由
- 代码重复:DRY,Do not Repeat Yourself;
- 冗长的子程序:很少会用到长度超过一个屏幕的子程序。改善方法是提高其模块性-增加定义完善、命名准确的子程序,让他们各自集中力量做好一件事;
- 循环过长或嵌套过深;
- 内聚性太差的类;
- 拥有太多参数的参数列表;
- 变化导致多个类的相同修改;
- 同时使用的相关数据并未以类的形式组织;
- 过多使用基本数据类型;
- 某个类无所事事;
- 中间人对象无事可做;
- 子程序明明不恰当。只要看到某个子程序命名有问题,就应该立即着手修改。
- 注释被用于解释难懂的代码。不要为拙劣的代码编写文档——应当重写代码;
- 程序中的一些代码似乎是在将来的某个时候才会用到。对未来需求有所准备的代码并不是编写大量空中楼阁式的代码,而是尽可能将满足当前需求的代码清晰明白的表现出来,使未来的程序员理解这些代码到底完成了什么功能,没完成什么功能,以便根据他们的需求进行调整。
3. 数据级的重构
- 用具名常量代替神秘数值;
- 使变量的名字更加清晰且传递更多信息;
- 用函数代替表达式;
- 将基础类型转化为类。如果一个基础类型需要额外的功能或者额外的数据,那么就应该把基础类型转化为类,并添加你所需要的行为;
- 将一组类型码转换为类或者枚举类型;
4.语句级的重构
- 分解布尔表达式
- 将复杂布尔表达式转换为命名准确的布尔函数;
- 在嵌套的if-then-else语句中应该一知道答案就返回,而不是赋值给一个返回值
5.子程序级重构
- 提取子程序或者方法
- 将冗长的子程序转换为类
- 合并相似的子程序,通过参数区分他们的功能
6 类接口的重构
- 将成员函数放到另一个类中
- 将一个类变为两个类。如果一个类中的成员函数完成两种截然不同的功能,将这样的类转换为两个类
- 对于不能修改的类成员去掉其set函数。如果一个成员在对象被创建时设置,之后遍不再允许修改,那么删除其set函数,而是在构造函数中进行初始化。
7 系统级重构
- 使用工厂函数而不是简单的构造函数;
- 用异常代替错误代码,或者反其道而行之,取决于你的错误处理策略,请确保代码使用了标准的错误处理方法。
8. 安全的重构
- 保存初始代码。要保证你还能回到代码的初始状态。
- 重构的步伐请小些。这样才能理解所做修改对程序的全部影响。
- 同一时间只做一项重构。在进入到下一项重构之前,对代码进行重新编译和测试。
- 把要做的事情一步步列出来。写出一份重构列表能够让你在修改时保持思路连贯。
- 设置一个停车场。把你需要在未来进行而现在可以暂且放在一遍的修改工作记录下来。
- 利用编译器警告信息。把编译器的警告级别设置为最严格。
- 重新测试。应该把重新测试作为修改代码工作的补充。
- 检查对代码的修改。如果说第一次运行程序时检查代码是必要的,那么接下来修改代码的过程中,时刻检查代码则更为必要。另外,应该把简单的修改当作复杂的修改对待。
- 根据风险级别来调整重构方法。尤其是对于有一定风险的重构,谨慎才能避免出错。
9.重构策略
- 在增加子程序的时候重构
- 在添加类的时候重构
- 在修补缺陷的时候重构
- 关注于易出错的模块
- 关注高度复杂的模块
- 在维护环境下,改善你手中正在处理的代码。如果你正在维护某部分代码,请确保代码在离开你的时候比来之前更健康
- 开发阶段的重构是提高程序质量的最佳时机。
二、代码调整技术(性能)
1.逻辑
- 在知道答案后停止判断;
- 按照出现频率调整判断顺序,让运行最快和判断为真可能性的判断首先执行;
2.循环
- 将判断外提。如果在循环运行时某个判断结果不会改变,你就可以把这个判断提到循环的外面。
- 合并。就是把两个对同一组元素进行循环的操作合并在一起,减少循环开销。
- 尽可能减少在循环内部做的事情。如果可以在循环外面计算某些语句,而只在循环内部使用计算结果,那么就把该部分语句放在循环外面。
三、管理构建
1.鼓励良好的编码实践几种技术
- 给项目的每一部分分派两个人
- 逐行复查代码
- 要求高级技术人员给代码签名
- 安排一些好的代码示例给别人看
- 强调代码是公共财产
- 奖励好代码
- 一份简单的标准:“我必须能理解并阅读这个项目里的所有代码”
2.编程工具
①源代码工具
- IDE
- diff比较器
- merge工具
- 源代码美化器
- 代码模板
②重
代码生成器
打造自己的编程工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)