SlideShare a Scribd company logo
1 of 38
Download to read offline
刘欢@技术工程部 2016045
JavaScript Ruby
PHP
HTML5
Python
Who we are
Scala
怎样的代码是优雅的?
功能正确 健壮 易维护
简单明了 美观
……
• 正确的完成
• 统一与规范
• DRY KISS YAGNI
Done	is	be=er	than	perfect
•  逻辑正确
a. 输入输出
b. 边界正确
c. 异常正确
•  业务正确
a. 小需求重复确认
b. 较大项目需求评审
•  可重复验证
a. 单元测试:覆盖量
b. 集成测试:充足的测试用例
•  项目管理
a. 按时交付:时间管理 -> 分解任务
b. 保质交付:风险管理 -> 尽早暴露问题
Keep	clear
Keep	clear
Keep	clear
Keep	clear
满足要求的前提下,保持逻辑清晰易读!
• 正确的完成
• 统一与规范
• DRY	KISS	YAGNI
风格
统一风格
在风格上与大家统一,在代码真正的逻辑实现上挥洒个性
“大括号”问题多
代码规范的作用
• 提高合作效率
• 长期的规范可以养成良好的编码习惯
• 更加严谨的思维能力
命名
命名
命名
•  风格统一
•  包命名:namespace
•  类命名:是一类什么
•  方法命名:干什么
•  变量命名:是一个什么
•  资源文件命名:什么用途、如何生成、有效期
•  一些约定: 参照下面google的java开发规范文档
google-java-style
中文翻译出处:h=p://www.hawstein.com/posts/google-java-style.html
原版出处:h=ps://google.github.io/styleguide/javaguide.html
搞定了命名?开始写码!
•  变量:
a. 避免magic number:http://coolshell.cn/articles/4576.html
b. 最小作用域:括号、局部、对象成员、类成员、常量
•  方法:
a. 最小可见性
b. 主方法描述逻辑层次,调用方法描述实现
c. 短小简单:方法命名中有 and、or、if … x
d. 参数少:过多的参数需要抽象成类
e. public方法要检验入参
•  类:
a. 面向对象
b. 类成员的最小可见性:private、protected、public
c. 设计原则:SOLID
变量作用域
变量作用域
变量作用域
May	the	log	with	you
•  日志的作用:记录现场(过程、状态、数据)
•  必要性:回溯
•  分等级:
a. debug:过程
b. info:状态
c. warn:允许的错误
d. error:必须关注的错误
•  无需解释(高性能要求的环境下例外)
log
“注释”的trick
不要在标新立异的地方写注释!
“注释”的trick
“注释”的trick
尽量不要在代码块中写多个多行注释!
Talk	is	cheap	
show	me	the	code
注释
•  统一风格
•  不依赖于注释:无需解释
•  解释为什么
•  说明复杂的步骤
注释不写什么
•  变量说明
•  删除的代码
•  跟代码无关的注释
•  业务说明注释 -> 文档(API)
•  todo -> 开发文档
• 正确的完成
• 统一与规范
• DRY	KISS	YAGNI
DRY	=	Don’t	Repeat	Yourself
•  容忍重复、拒绝重复
•  没有重复逻辑的代码更易于维护和bug修复
•  方法、代码块 功能明确
•  不要提前抽象
KISS	=	Keep	It	Sample	and	Stupid
•  尽量简单,一目了然
•  简单的逻辑bug少
•  简单的代码易维护
YAGNI	=	You	Aren’t	Gonna	Need	It
•  专注核心模块
•  满足可以看得到的情况
•  不要过度设计
重构
•  真的需要吗?
•  代码真的都懂了吗?
•  业务细节也都清楚吗?
•  给出详细计划文档,相关熟悉的人都来评审
•  做好心理准备:跑得越久的代码,重构是个长
期的体力脑力活儿。
•  还是确定要重构?
•  上吧!
推荐阅读
•  h=ps://google.github.io/styleguide/
javaguide.html
•  《代码整洁之道》
•  《重构》
•  《程序员修炼之道》
谢谢

More Related Content

Viewers also liked (12)

Uso del femenino y masculino
Uso del femenino y masculinoUso del femenino y masculino
Uso del femenino y masculino
 
Carrie Stage One Paper
Carrie Stage One PaperCarrie Stage One Paper
Carrie Stage One Paper
 
Answers that you Might be Seeking about Biometric
Answers that you Might be Seeking about Biometric Answers that you Might be Seeking about Biometric
Answers that you Might be Seeking about Biometric
 
Utilizando scoop.it
Utilizando scoop.itUtilizando scoop.it
Utilizando scoop.it
 
portfolio
portfolioportfolio
portfolio
 
CV of Nikita Ann Tomy
CV of Nikita Ann TomyCV of Nikita Ann Tomy
CV of Nikita Ann Tomy
 
Presentacion mandarina.
Presentacion mandarina.Presentacion mandarina.
Presentacion mandarina.
 
Ebaluazioa
EbaluazioaEbaluazioa
Ebaluazioa
 
Búsqueda avanzada en google
Búsqueda avanzada  en googleBúsqueda avanzada  en google
Búsqueda avanzada en google
 
LinkedInResume
LinkedInResumeLinkedInResume
LinkedInResume
 
Fatma's CV
Fatma's CVFatma's CV
Fatma's CV
 
MyCv
MyCvMyCv
MyCv
 

Similar to 编写优雅的代码(微信)

Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindRick Hwang
 
Simple Rule Agile China 2009
Simple Rule   Agile China 2009Simple Rule   Agile China 2009
Simple Rule Agile China 2009JohnnLi
 
我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術Li Hsuan Hung
 
要质量还是要速度
要质量还是要速度要质量还是要速度
要质量还是要速度Lijie Wang
 
2012 China 软件测试大会
2012 China 软件测试大会2012 China 软件测试大会
2012 China 软件测试大会mayun1688
 
Hiiir 百人團隊導入敏捷實踐經驗
Hiiir 百人團隊導入敏捷實踐經驗Hiiir 百人團隊導入敏捷實踐經驗
Hiiir 百人團隊導入敏捷實踐經驗ChiaHsien Lee
 
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Wen-Tien Chang
 
柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试Trinea Trinea
 
Duck Typing and Multiple Inheritance
Duck Typing and Multiple InheritanceDuck Typing and Multiple Inheritance
Duck Typing and Multiple InheritanceSway Wang
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜LI Daobing
 

Similar to 编写优雅的代码(微信) (15)

BDD in .NET
BDD in .NETBDD in .NET
BDD in .NET
 
RSpec & TDD Tutorial
RSpec & TDD TutorialRSpec & TDD Tutorial
RSpec & TDD Tutorial
 
Wiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected MindWiki in Teamroom - Connected Mind
Wiki in Teamroom - Connected Mind
 
Simple Rule Agile China 2009
Simple Rule   Agile China 2009Simple Rule   Agile China 2009
Simple Rule Agile China 2009
 
Jasmine
JasmineJasmine
Jasmine
 
我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術我要活下來 - Ruby Junior 工程師的存活術
我要活下來 - Ruby Junior 工程師的存活術
 
要质量还是要速度
要质量还是要速度要质量还是要速度
要质量还是要速度
 
2012 China 软件测试大会
2012 China 软件测试大会2012 China 软件测试大会
2012 China 软件测试大会
 
QC Story 觀念介紹
QC Story 觀念介紹QC Story 觀念介紹
QC Story 觀念介紹
 
Hiiir 百人團隊導入敏捷實踐經驗
Hiiir 百人團隊導入敏捷實踐經驗Hiiir 百人團隊導入敏捷實踐經驗
Hiiir 百人團隊導入敏捷實踐經驗
 
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛
 
柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试柴锋 跨平台移动应用的自动化验收测试
柴锋 跨平台移动应用的自动化验收测试
 
Duck Typing and Multiple Inheritance
Duck Typing and Multiple InheritanceDuck Typing and Multiple Inheritance
Duck Typing and Multiple Inheritance
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜
 

编写优雅的代码(微信)