代码整洁之道

最近阅读了《代码整洁之道》这本书,感觉副标题说的不错,细节之中自有天地,整洁成就卓越代码

概要

文不如表,表不如图,奉上一张思维导图:

在这里插入图片描述

下面是我看书的过程中记录的感觉我自己掌握度不够的知识点:(也就算是读后感吧)

函数

每个函数一个抽象层级

要确保函数只做一件事,函数中的语句都要在同一抽象层级上。

举一个违反了这条规矩的例子。

比如里面有getHtml()等位于较高抽象层的概念,也有String pagePathName = PathParser.render(pagePath)等位于中间抽象层的概念,还有.append("\n")等位于相当低的抽象层的概念。

函数参数

最理想的参数数量是零(零参数函数),其次是一(单参数函数),再次是二(双参数函数)

应尽量避免三(三参数函数。有足够特殊的理由才能用三个以上参数(多参数函数)

所以无论如何也不要这么做。

参数不易交付。阅读代码没有参数的更容易理解,因为参数和函数名处在不同的抽象层级,它要求你了解目前并不特别重要的细节。

测试的角度看,参数更叫人为难。要编写能确保参数各种组合运行正常的测试用例,是多么困难的事。

解决方式:

如果方法参数将超过3个,建议放在类中包装起来

格式

垂直格式

很多出色的系统由大多数为200行,最长500行的单个文件构成。

向报纸学习

源文件最顶部应该给出高层次的概念和算法。细节应该往下渐次展开,直至找到源文件中最底层的函数和细节。

横向格式

平均来看,一行是45个字符左右。

代码行应该有多宽,此书作者一向遵循无需拖动滚动条到右边的原则。

但是近年来显示器越来越宽,此书作者个人的上限是120个字符。

错误处理

别返回null值

当使用list的时候尽量不要返回null

可以使用Collections.emptyList()方法,该方法返回一个预定义的不可变列表。

单元测试

整洁的测试

测试函数要呈现构造-操作-检验(BUILD-OPERATE-CHECK)模式。

每个测试都清晰拆分为三个环节。第一个环节构造测试数据,第二个环节操作测试数据,第三个部分检验操作是否得到期望的结果

并发编程

测试线程代码

在不同平台上运行

不同操作系统有着不同的线程策略

在不同的环境中,多线程代码的行为也不一样。

建议: 尽早并经常地在所有目标平台上运行线程代码。

硬编码

可以手工向代码中插入wait()sleep()yield()priority()的调用。

比如,插入对yield()的调用,将改变代码的执行路径,因此可能导致代码在以前未失败过的地方失败。

非线程安全类

有些类天生不是线程安全的。下面是几个例子:

  • 数据库连接
  • java.util中的容器
  • Servlet

注意,有些类拥有一些线程安全的方法。不过,涉及调用多个方法的操作都不是线程安全的

例如:

if (!hashTable.containsKey(someKey)) {
    hashTable.put(someday, new SomeValue());
}

单个方法是线程安全的,不过,另一个线程却可能在containsKey和put调用之间塞进一个值

有几个修正这个问题的手段:

  • 锁定HashTable,确定其他使用者都做了基于客户端的锁定:
synchronized(map) {
    if(!map.conainsKey(key)) {
        map.put(key, value);
    } 
}
  • 用其对象包装HashTable,并使用不同的API—利用ADAPTER模式做基于服务端的锁定:
public class WrappedHashtable<K, V> {
    private Map<K, V> map  = new Hashtable<K, V>();

    public synchronized void putlfAbsent(K key, V value) {
        if (map.containsKey(key)) {
            map.put(key, value); 
        }
    } 
} 
  • 采用线程安全的群集
ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap<Integer, String>();
map.putIfAbsent(key, value); 

在java.util.concurrent中的群集都有putlfAbsent()之类提供这种操作的方法。

总结

整体看下来,《代码整洁之道》是一本还不错的技术书,介绍了各种写出更漂亮代码的原则与实践,我看网上说还可以与**《重构》**配合看,这样基本的原则就都覆盖到了。看了豆瓣上的评分,《代码整洁之道》8.6分,《重构》9.0分。评论上说,《代码整洁之道》总结的优雅代码原则的全面性和丰富性上差了一些。所以,有时间还是要再拜读一下《重构》的。

参考资料

《代码整洁之道(Clean Code)》

https://hustyichi.github.io/2019/02/17/clean-code/

https://www.cnblogs.com/edisonchou/p/edc_clean_code_notes.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mangoBUPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值