SlideShare a Scribd company logo
1 of 31
Download to read offline
编写可阅读的代码
篇
• 代码即架构
• 软件成本 = 发成本 + 维护成本
• 艺术家的喜悦
大纲
1. 是什么让代码变得更好
2. 基础层次的改进
3. 逻辑的改进
4. 代码组织的改进
5. 技艺的精进
是什么让代码变得更好
• 可读性的衡量标准
• 代码越短越好么
• 价值观
Part I
可读性的衡量标准
别人理解所需时间最小化
代码越短越好么
原则上的奥卡姆剃刀
原则上的取舍平衡
VS
价值观
代码可读性是优秀工程师的
追求目标
大纲
1. 是什么让代码变得更好
2. 基础层次的改进
3. 逻辑的改进
4. 代码组织的改进
5. 技艺的精进
基础层次的改进
• 命名的表现力
• 审美
• 注释的用法
Part II
命名的表现力
• 选择专业的词
• 避免泛泛的词汇
• 避免有 义的名字
• 利用名字的约定规范传递含义
DEMO
审 美
• 代码的排版源于杂志
• 用空行把代码 分成逻辑段落
• 在必要时使用合理的对⻬齐
• 选择一个有意义的顺序来保持一致
• 相 函数就近原则
• 规范的一致性有时比正 更重要
对齐 顺序留白 亲密
性
注释的用法
• 能从代码本身推断出的事实
• 粉饰烂代码的拐杖式注释
• 站在读者的立场写注释
• 意料之外、总结、代码瑕疵等
DEMO
大纲
1. 是什么让代码变得更好
2. 基础层次的改进
3. 逻辑的改进
4. 代码组织的改进
5. 技艺的精进
逻辑的改进
• 控制流程的改进
• 表达式的改进
• 变量的改进
Part III
控制流程的改进
• 语句的处理顺序
• 三目运算符精简
• 函数提前返回
• 少嵌套
关键思想 流程越自然越好,使读者不用停下来重读你的代码
DEMO
表达式的改进
• 拆分超⻓长的表达式
• 使用解释变量
• 德摩根定律
• 禁止滥用短路逻辑
关键思想 化繁为简,看一眼表达式就能理解大致的意思
DEMO
变量的改进
• 少无用变量
• 合理 分变量作用域
关键思想 定时重构,避免无用变量累积,最小范围原则
大纲
1. 是什么让代码变得更好
2. 基础层次的改进
3. 逻辑的改进
4. 代码组织的改进
5. 技艺的精进
代码组织的改进
• 代码的抽象与抽取
• 函数的坏味道
• 把自然语言变为代码
• 小即美
Part IV
代码的抽象与提取
职责单一原则
类或模块应有且只有一条加以修改的理由,命名的期间就会审视类的权责
代码的抽象与提取
迪米特法则
最少知识原则(Least Knowledge Principle 简写LKP),一个对象应
当对其他对象有尽可能少的了解,不和陌生人说话
函数的坏味道
• 函数命名是否能解释函数的作用
• 函数的副作用
• 函数参数的膨胀
• 函数布尔参数的副作用
DEMO
小即美
• 消除不必要的函数,避免过度设计
• 让项目保持小,子项目思维
• 大教堂与集市
关键思想 最好读的代码就是不写代码
大纲
1. 是什么让代码变得更好
2. 基础层次的改进
3. 逻辑的改进
4. 代码组织的改进
5. 技艺的精进
技艺的精进
• 编程素 的精进
• 软件工艺的精进
Part V
编程素 的精进
• 谦虚大于聪明
• 建立良好的自我 发意识
• 在行动之前做分析和规
• 不断学习成功项目经验并不断试验
• 阅读文档规范,拒绝百度,跨越英文⻔门槛
• 与专业人士多交流
• 向更高更专业的人看⻬齐
• 跨界思维
• 有目的的坚持与积累
会翻墙!
软件工艺的精进
• 工欲善其事,必先利其器
• 首先为人写程序,其次才是机器
• 深入语言,语法 -> 语义 -> 语用
• 用规范管理 杂度
• 有重构思维,不断迭代
• 管理 杂度思维
荐书
编写可阅读的代码

More Related Content

Similar to 编写可阅读的代码

Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Bill Lin
 
2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD Conference2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD ConferenceGuan-Rong Huang
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发Trinea Trinea
 
成为一个合格的工程师
成为一个合格的工程师成为一个合格的工程师
成为一个合格的工程师huang chengkai
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化XiaoJun Hong
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindRick Hwang
 
前端开发规范
前端开发规范前端开发规范
前端开发规范aNd1coder
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Kirk Chen
 
Simple Rule Agile China 2009
Simple Rule   Agile China 2009Simple Rule   Agile China 2009
Simple Rule Agile China 2009JohnnLi
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天Gelis Wu
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)Gelis Wu
 
VR CONTENT OPTIMIZING UE4
VR CONTENT OPTIMIZING UE4VR CONTENT OPTIMIZING UE4
VR CONTENT OPTIMIZING UE4Wen Lei Li
 
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统yiditushe
 
高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术wensheng wei
 

Similar to 编写可阅读的代码 (20)

Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析Static Code Analysis 靜態程式碼分析
Static Code Analysis 靜態程式碼分析
 
2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD Conference2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD Conference
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发
 
成为一个合格的工程师
成为一个合格的工程师成为一个合格的工程师
成为一个合格的工程师
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected Mind
 
前端开发规范
前端开发规范前端开发规范
前端开发规范
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
 
Simple Rule Agile China 2009
Simple Rule   Agile China 2009Simple Rule   Agile China 2009
Simple Rule Agile China 2009
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
 
VR CONTENT OPTIMIZING UE4
VR CONTENT OPTIMIZING UE4VR CONTENT OPTIMIZING UE4
VR CONTENT OPTIMIZING UE4
 
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
一天交易达十亿次: 由核心J2Ee(Tm) 模式架构成的J2Ee(Tm)系统
 
前端測試
前端測試前端測試
前端測試
 
前端測試
前端測試前端測試
前端測試
 
高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术高级PHP应用程序漏洞审核技术
高级PHP应用程序漏洞审核技术
 

More from LC2009

Thrift 应用与实践
Thrift 应用与实践Thrift 应用与实践
Thrift 应用与实践LC2009
 
从学校到职场
从学校到职场从学校到职场
从学校到职场LC2009
 
HTML5 多媒体入门
HTML5 多媒体入门HTML5 多媒体入门
HTML5 多媒体入门LC2009
 
React vs Flux
React vs FluxReact vs Flux
React vs FluxLC2009
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践LC2009
 
前端单元测试
前端单元测试前端单元测试
前端单元测试LC2009
 

More from LC2009 (6)

Thrift 应用与实践
Thrift 应用与实践Thrift 应用与实践
Thrift 应用与实践
 
从学校到职场
从学校到职场从学校到职场
从学校到职场
 
HTML5 多媒体入门
HTML5 多媒体入门HTML5 多媒体入门
HTML5 多媒体入门
 
React vs Flux
React vs FluxReact vs Flux
React vs Flux
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践
 
前端单元测试
前端单元测试前端单元测试
前端单元测试
 

编写可阅读的代码