当前位置:首页 > 培训认证 > 计算机图书

二零一五年第11本:代码整洁之道Clean Code

优良自学吧提供二零一五年第11本:代码整洁之道Clean Code,2015年第11本:代码整洁之道Clean Code前一段时间一直在看英文小说,在读到《Before I fall》这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧。 从5月9日开始看《代码整洁之道》,5月14日完成第一遍的阅读(略掉

2015年第11本:代码整洁之道Clean Code

前一段时间一直在看英文小说,在读到《Before I fall》这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧。

return new cgTransformation(srcRect, destRect, false, true, true);

后面的三个bool变量每次看了都让人抓狂,只需简单加几个局部变量,不用写一行注释,代码可以更清楚。

bool horzFlip = false;
bool vertFlip = true;
bool keepAspectRatio = true;
return new cgTransformation(srcRect, destRect, horzFlip, vertFlip, keepAspectRatio);

不过作者还说了:函数的参数不要超过3个,这条应该很有争议。

4.2 无病呻吟的javadoc式的注释可以去掉。

如果不是生成供第三方使用的类库,许多函数的这类注释都可以删掉。许多这类注释为了注释而注释,很多只是简单地把函数名称翻译成了中文!

我也从我们的项目中随便找了几行,这样的例子太多了:

/// <summary>
/// 从服务端获取客户端程序的当前版本
/// </summary>
/// <returns></returns>
public string GetCurrentClientVersion()
{
…
}

  

第五章:格式

5.1 每个函数体之间都用空白行隔开

Visual Studio中自带的格式化工具能够完成不少工作,但相当有限。我发现在Visual Studio的插件CodeMaid可以很好地完成这项工作。

5.2 每条代码行的长度不要超过200个字符

我从项目中找了几行代码,在这段代码之前还有三层花括号,长达168个字符,得把滚动条拉到最右边才看清它,想理解它得来回拖动几次滚动条。

if (seismicMapController.SeismicView.Pipeline.SeismicReader.GetTraceMetaData(i - 1).GetField(204).ToString() == cdpNum) 
{ 
    this.seismicMapController.SurveySectionProperty.ViewPosition = new cgPoint(i-1, this.seismicMapController.SurveySectionProperty.ViewPosition.y); 
    break; 
}

  

第六章:对象和数据结构

6.1 对象和数据结构的反对称性

过程式代码难以添加新的数据结构,因为它要修改所有相关函数。

面向对象的代码难以添加新函数,因为它要修改所有受影响的类。

6.2 Demeter得墨忒耳定律

方法不应调用由任何函数返回的对象的方法。也就是说,只与朋友谈话,不与陌生人谈话。

想遵守这个定律并不太容易,有时为了封装内部细节,就要写出许多重复的代码。

第七章:错误处理

7.1 写一个处理常规流程的函数,把带有大量try-catch的语句单独形成一个函数

7.2 别返回null,别传递null

实在不好办,就在类中写一些类似Point.Empty, Well.Empty的特殊对象。

 

第八章:边界

可以建立一些单元测试来学习和理解第三方代码,书中称之为“学习性测试(learning tests)”。

有一个好处,当第三方类库出了新版本后,这些代码可以很容易地测试程序包的行为是否发生了改变。

 

第九章:单元测试

9.1 不仅要写单元测试,还要写许多单元测试,测试驱动开发TDD值得学习

不要以为写单元测试耽误了进度,长远考虑它节省了大量的调试时间,实际是大大提高了效率。好项目的单元测试不是十多个,而是上百个。

9.2 测试代码和产品代码一样重要!仍要写得清晰、简洁、可读。

我们的项目中对单元测试没有硬性要求,一开始还在维护着几个单元测试,几年后发现这些仅有的测试代码也都腐坏了。

第十章:类

10.1 类要短小,还要更短小。

我翻开了项目中的一个超过3000行的类,实在不敢修改其中的一个变量!

实际上Visual Studio 中的#region和#end region语句在鼓励人们写出复杂的类。如果函数和文件都很小,这些语句都是多余的。

image

10.2 保持内聚性,就会得到更短小的类。(如果发现几个变量经常在一起被几个函数访问,就需要拆分为类了)

10.3 首先要想办法使成员变量保持私有private,放松封装总是下策。

  

第十一章:系统

构造和使用是非常不一样的过程。AOP我理解不了,但工厂模式还是经常用到的。

 

第十二章:迭进

Kent Beck的关于简单设计的四条规则:

1)运行所有测试;

2)不可重复;

3)表达了程序员的意图;

4)尽可能减少类和方法的数量。

 

第十三章:并发编程

略。

第十四至十六章

这几章是关于迭进修改代码的示例,可惜是JAVA代码,真应该好好在开发环境中打开这些代码,跟着书中的思路一步步重构下去。实际上最应该多花些时间认真读读这三章,看看大师如何打磨这些代码的。

第十七章

汇总了书中的各条原则,可以在代码审查时对照它一条一条地进行检查。

 

IMG_0257

IMG_0258

IMG_0259

IMG_0260

IMG_0261


(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢

编辑推荐

最近更新