代码整洁之道之王道
如果无法正常显示,请先停止浏览器的去广告插件。
1. 代码整洁之道之王道
丁辉
2. 讲师简介
只有洞察业务本质,才能真正极致整洁
丁辉
中兴无线教练组长
ee.msup.com.cn
3. 代码整洁的背后
• Reasonable
• 正确
• 可维护
• Debug
• 新增功能
• 静态关系
• 动态状态
ee.msup.com.cn
4. 增加可理解性常用手段
• 精确的命名
• 有序的排版
• 较低的CCN
• 清晰分层的逻辑
ee.msup.com.cn
5. 但是。。。
• 这些也很容易成为代码整洁之道的误区和雷区
• 复杂项目中,这些手段对于可理解性增加<=20%
ee.msup.com.cn
6. 人能够维护软件的前提
• 人脑需要控制的复杂度>=软件复杂度>=问题复杂度
抽象&映射
软件复杂度
ee.msup.com.cn
简化/逼近
问题复杂度
7. 一个需求:打印出“hello world”
• void main()
{
std::cout << "Hello world" << std::endl;
}
ee.msup.com.cn
8. • void main()
{
for (int i = 0; i < strlen(“Hello world!\n")
{
putchar("Hello world!\n"[i]);
}
}
ee.msup.com.cn
9. • void alien_say(char * p)
{
while (putchar(*(p += *(p + 1) - *p)));
}
• void main()
{
alien_say(
"BETHO! Altec oh liryom(a loadjudas!) do
}
ee.msup.com.cn
10. 控制复杂度的手段:抽象
• 抽象
• 映射
• 还原
ee.msup.com.cn
11. 控制复杂度的手段:抽象
数三角形的个数
抽象要点是裁剪
ee.msup.com.cn
12. 控制复杂度的手段:映射
映射到库、范式、设计模式、数学领域等
ee.msup.com.cn
13. 映射获得模型
• 模型
• 集合的归属关系的一种:子集
ee.msup.com.cn
14. 控制复杂度的手段:还原
• 补充关键细节
ee.msup.com.cn
15. Poker Engine
• Show Hand
Ø0—High Card
Ø1– One Pair
Ø2-Two Pair
Ø3-Three of a kind
Ø4-Straight
Ø5-Flush
Ø6-Full House
Ø7-Four of a kind
Ø8-Straight Flush
ee.msup.com.cn
The Details
一手牌(hand)由5张牌组成,每张牌
都有自己的花色(suit)和分值
(rank);
根据规则,计算出每手牌的分值(hand
rank),分值最高的那手牌极为获胜者。
16. 规则为什么会是这样,我们知道它背后的依据吗?
ee.msup.com.cn
17. The Reason
• Show Hand
0-High Card--50.11%
1-One Pair--42.25%
2-Two Pair--4.75%
3-Three of a kind-2.11%
4-Straight—0.39%
5-Flush-0.196%
6-Full House—0.140%
7-Four of a kind—0.024%
8-Straight Flush--0.0015%
ee.msup.com.cn
18. 抽象&映射
ee.msup.com.cn
19. 还原
• 增加顺子的计算
• 增加花色判断
ee.msup.com.cn
20. 显式表达本质复杂度
• 序列转换为集合
ee.msup.com.cn
21. • 能够简化或逼近本质复杂度的设计才是简单设计
• 只有简单设计才是代码整洁的王道
ee.msup.com.cn
22. 什么是简单
• 百度百科
反义词:复杂、困难
近义词:容易
解释
结构单纯;头绪少
草率,不细致
对自然规律的理解和追求
对事物的拿捏恰到好处
基本的,不能减少或缩小的
• 简单的事物难以构造,但易于理解
客观描述,反应问题的本质
容易的事物容易构造,但难以理解
更加主观,表明了事物能否在我的能力范围内解决,一般会导致复杂度快速膨胀
ee.msup.com.cn
23. 简单的定义
• 清晰的抽象:
• 聚焦领域,形成抽象层并隐藏细节
表达了本质的概念和概念之间的关系,即那些不变的东西
• 清楚的表达:
• 对概念进行有意义的,简洁而不晦涩的展示与沟通
实现层面的问题,建立在清晰抽象的基础上。
很容易看懂,且很容易扩展
ee.msup.com.cn
24. 简单vs容易
• 容易不简单
• 简单不容易
ee.msup.com.cn
25. 总结
• 把握问题本质的设计
物体运动的表现形式很复杂,但是它的本质:牛顿定律
却很简单。事物本质是简单的,之所以复杂,是因为我们
没有把握事物的本 质。
• 循环
简单设计往往是对复杂设计的再加工,经历了
简单-复杂-简单-复杂-简单的循环过程。
追求简单设计的过程是一个逐渐深入的过程,
最终会深入到问题的本质。
• 需要更多的思考投入
ee.msup.com.cn
26. • 只有做到简单
•
•
•
•
ee.msup.com.cn
才能把握问题本质复杂度
才能实现上简化、接近问题本质复杂度
才能做到容易理解
才能最终实现代码整洁之道
27. 关注msup公众号
获取更多工程效能实践案例