最近工作内容比较少,平时工作的时候为了完成进度,很难考虑太多,匆匆就下手开始写代码了,质量很差,一直就想找机会重构以前写的代码。
加上最近也在看《代码简洁之道》,简单的记录一下整理的过程。
看了一大半这本书,印象最深刻有几点:
1.更短的方法,更短的类。看着以前长长的方法我开始抽离,抽离不要一下子做到位,一点点的做,抽离一点运行一下看看运行是否正常,这样就不会最后浪费时间在排bug上。抽离的过程要坚持“内聚”“单一权责”的思想,一个方法就做一件事。类也是一样。
2.规范的命名,具有可读性。以前一直都听说要多写注释,其实我们自己也有体会,谁想去看那些繁琐、啰嗦的注释。认真的去为每个变量和方法取名字,合理的名字会让代码完全不一样。
3.技术和设计上的简洁。这里涉及的东西太多,我没有能力讲清楚,我只是举一些自己遇到的小例子:我看了一些java类的原代码,很多地方都用到了三目运算符,接触一些其他语言就会发现,if else 加上大括号,这种判断确实是非常啰嗦和难看,所以如果可以的话尽量用三目运算替代if else结构。
另一个例子。
String类有startsWith(String prefix)和endsWith(String suffix)方法。看了一下源代码,发现他们都调用了startsWith(String prefix, int toffset)。
下面是这个方法的源代码:
public boolean startsWith(String prefix, int toffset) {
char ta[] = value;
int to = offset + toffset;
char pa[] = prefix.value;
int po = prefix.offset;
int pc = prefix.count;
// Note: toffset might be near -1>>>1.
if ((toffset < 0) || (toffset > count - pc)) {
return false;
}
while (--pc >= 0) {
if (ta[to++] != pa[po++]) {
return false;
}
}
return true;
}
endsWith也调用了startsWith方法,只不过巧妙的用count-suffix.count得出的值做为比较的起点
public boolean endsWith(String suffix) {
return startsWith(suffix, count - suffix.count);
}
换做我们来写很可能会为endsWith写一个专门的方法,这其实也很容易做到,但是也就需要维护一段多余的代码。虽然这是个简单的例子,但是体现的是复用性,不要重复的造轮子。
关于这本书还有很多值得学习的地方,我只是在我的经验范围内谈了一点简单的感受。