Skip to content

Latest commit

 

History

History
33 lines (32 loc) · 2.97 KB

代码整洁之道(2).md

File metadata and controls

33 lines (32 loc) · 2.97 KB

代码整洁之道-学习2

  1. 第四章(注释) 4. 简单函数的注释完全没有必要,可以从方法名以及返回值命名入手。来清楚表达该函数的作用。可以去看一下,我们现在大部分注释都是这类注释。 5. TO-DO的重要性,如果你在编写某个函数的时候,觉得有些问题没有想清楚,一定要加上 TO-DO注释,告知将来这里会做什么 6. 对于注释掉的代码可以直接删除掉,我们可能会想,应该在将来会用到。但是我们现在有了SVN 等版本控制系统,完全不用担心代码找不回来。所以注释掉的代码,果断删掉。
  2. 第五章(格式)
    1. 实体变量应该是在类的顶部声明,因为它们应该会被多个函数使用。
    2. 本地变量 应该是函数的顶部出现。
    3. 相关函数 若某个函数调用了另外一个函数,则应该把它们放在一起,而且调用者应该尽可能的放在被调用者的上面,符合阅读习惯。
  3. 第六章(对象和数据结构)
    1. 需要明白赋值器、取值器的真正作用,setValue(String value) 与 getValue()如果是为了隐藏你的变量,即便是将你的变量修饰为private,外界仍然是可以通过你的这些赋值器来修改你的变量。 如果意图是隐藏实现过程,则需要通过抽象,来暴露抽象接口来实现。下面来看一段代码 public interface Vehicle{ double getFuelTankCapacityInGallons(); double getGallonsOfGasoline();} public interface Vehicle{double getPercentFuelRemaining()} 后者通过方法隐藏了燃料层具体通讯的细节,而只是告诉调用者百分比油量
    2. 对象与数据结构的区别,对象把数据隐藏在抽象之后,曝露操作数据的函数。数据结构曝露数据,没有提供有意义的函数。 1.
public class Square{ public Point topLeft,public double side} 
public class Circle{public Point center,public double radius}
 public calss Geometry{
public final double PI=3.141592653589793 ; 
public double area(Object shape)throw NoSuchShapeException{
 if(shape instanceof Square){Square s=(Square)shape; return s.side*s.side}
else if(shape instanceof Circle{Circle c=(Circle)shape;
return PI*c.radius*c.radius})}}

这样的方法就造成了一种困境,当上面两个形状类修改的时候,下面的Geometry也必须修改。如果可以通过抽象出Shape这样一个基类或者接口,就可以让Geometry不用关心求面积具体的实现方式了。参考OCP(开放闭合原则) 2. 第七章(错误处理) 1. 别返回null值,会造成上面调用者的处理困难。也容易造成空指针异常

  1. 第十章(类)
    1. 类SRP(单一职责原则)
    2. 保持内聚,类应该只有少量的实体变量,类中的每个方法都应该操作一个或者多个这种变量。
    3. OCP(开闭原则) 对于扩展保持开放,对于修改保持闭合
    4. DIP(依赖倒置原则) 类应当依赖于抽象而不是依赖于具体细节