代码大全2笔记二

目录

 

第五章:程序设计

第六章:可以工作的类

第七章:高质量的子程序:

第八章:防御式编程

第九章:使用变量的一般事项

第十一章:变量名的力量


第五章:程序设计

设计的特征:最小的复杂度、易于维护、松散耦合、可扩展性好、可重用性好、高扇入、低扇出、可移植性、精简性、层次性、标准技术。

最小复杂度:代码简单易于理解

易于维护:方便其他人查看,修改。

松散耦合:让程序的各个部分关联性较小,对类进行合理的抽象、封装,这样防止一个地方修改影响其他地方。

可扩展性好:在扩展系统功能时尽可能不需要修改底层,且不影响其他部分。

可重用性:使代码设计的更具有共性;

高扇入:让大量的类使用某个给定的类,是系统更好的利用底层类。

低扇出:

第六章:可以工作的类

使用ADT(抽象数据类型)的益处:

可隐藏实现细节;

改动不会影响到整个程序

让接口能提供更多信息

更容易提高性能

让程序正确性更显而易见

程序具有自我说明性

创建类的原因:

为现实世界中的对象建模;

为抽象的对象建模;

降低复杂度

隔离复杂度;

隐藏实现细节

第七章:高质量的子程序:

为什么要创建子程序:

  1. 降低复杂度:可以将程序的一些复杂的逻辑隐藏起来,
  2. 引入中间、易于抽象:有时候有些复杂的逻辑其实读者并不需要关心,这时候我们将逻辑抽象出来,起一个易于读懂的名字,这样或许会更好。
  3. 避免代码重复:使有些代码被更多地方复用,方便后期写代码;
  4. 简化复杂的布尔判断:一般复杂的布尔判断会加大代码的阅读难度,有时候获取读者只关心这一块是要做什么,不需要知道具体怎么做的,这中可以单独出来,提高可读性;
  5. 改善性能:使用子程序,可以只在一个地方优化代码,更方便查找代码的问题以及优化代码;
  6. 子程序不是越小越好;

子程序名字:

  1. 描述子程序做的所有事情
  2. 避免模糊不清的动词
  3. 长度:清晰度重要性一般大于长度,
  4. 描述返回值,就是最终要得到什么;
  5.  
  6. 准确的对脏词

子程序的参数:

顺序:只做输入、即做输入又做输出、只做输出。

如果几个子程序有一些参数类似,尽量让这些参数顺序一致,

一般不要把子程序的变量作为工作变量,就是在子程序中用这个变量作为值或返回值,这样容易混淆;

参数一般在7个以内,

第八章:防御式编程

1、什么是防御式编程?为什么需要?

        防御式编程不是指不让别人批评你的代码,而是指确保你要承担的责任,保证你的方法不会因为传入错误数据而破坏,看似微小的防范,收益可能大于你的想象,能够让错误更容易发现,修改,并减少对已经编写代码的修改

2、如何使用防御式编程?

        在开发阶段,建议不从产品角度考虑,建议让错误暴露的越明显越好,能更快的排查错误;在产品上线时,防御式编程的代码可能影响性能以及体验,需要适当修改,但是需要根据场景考虑,比如银行设备以及普通网站,不同产品,错误处理方式不一样;

        隔离程序与参数,即对参数进行验证,使之能包容错误造成的损害,并进行适当处理;

3、处理方法:

  1. 检查所有来源外部数据的值
  2. 子程序对参数做检查

3、选择合适的方案输出错误

4、面对错误的处理具体方式:

  1. 返回中立值:根据错误数据返回一个正确的值
  2. 返回与之前相同的值
  3. 用一个接近的合法值
  4. 返回错误码、根据错误返回不同的提示、直接抛出异常;
  5. 严重时关闭程序

5、关于异常

        避免在构造和析构函数中使用异常;考虑创建一个集中的方式处理异常,能够为一些与异常有关的信息提供集中的存储;把项目中对异常的使用标准化,考虑创建抛出异常的基类,这样就能把记录日志、报告错误等操作集中起来并标准化;不滥用异常,应该在异常和其他错误处理手段进行权衡,如果某些错误能局部处理,那就局部处理它;

第九章:使用变量的一般事项

变量的初始化:

1、在声明变量的时候初始化。

2、理想情况下,在靠近第一次使用变量的位置声明和定义改变量。

3、在可能的情况下使用final或者const。

4、重复使用的变量注意初始化

作用域

1、使变量的引用局部化,减小变量的作用域:

2、在循环开始之前再去初始化该循环里使用的变量,而不是在该循环所属的子程序的开始处初始化这些变量。

3、直到变量即将被使用时再为其赋值。

4、把相关语句放在一起,可能的情况下提取成单独的子程序。

5、开始时采用最严格的可见性(比如设为private),然后根据需要扩展变量的作用域。

6、“方便性”和“智力可管理性”两种理念之间的区别,归根结底来源于侧重写程序还是读程序之间的区别。

7、每个变量只应该用于单一用途,且不应该有隐藏含义(比如当x大于5000时代表什么)。

第十一章:变量名的力量

1、一个好名字通常表达的是“what”而不是“how”。一般而言,如果一个名字反映了计算的某些方面而不是问题本身,那么它反映的就是“how”而不是“what”了。

2、较长的名字适用于较长的作用域,较短的名字适用于短的作用域(循环、小的方法等)。

3、计算限定词注意,如Total、Sum、Average、Min、Max、String、Pointer等等,应该放在名字的最后

4、变量名的队长词要准确;

5、典型的布尔变量名:done(表示是否完成), error(表示是否发生错误), found(表示寻找、获得的布尔), success, ok(表示操作的状态)等。布尔变量应该是那些隐含了“真/假”含义的名字,如done和success等。应该使用肯定的布尔变量命名,而不是notFound,notDone等。

避免使用具有相似含义的名字。如果你能够交换两个变量的名字而不会妨碍对程序的理解,那么你就需要为这两个变量重新命名了。

命名规则应该能够区分局部数据、类的数据和全局数据。

应该避免的名称:避免使用令人误解的名字或缩写;避免使用具有相似含义的名字;避免使用不同含义名字却相似的名字;避免名字中使用数字;避免在名字中包含混淆的字符;

猜你喜欢

转载自blog.csdn.net/qq_38234594/article/details/89816120
今日推荐