-
Notifications
You must be signed in to change notification settings - Fork 19
CodeExcellentCode
kcp edited this page Jul 13, 2020
·
2 revisions
目录 start
目录 end|2020-04-27 23:42|
代码整洁之道
- 《7 QUESTIONS TO ASK YOURSELF ABOUT YOUR CODE》 -- Bozhidar Bozhanov
-
代码是正确的吗?
- 是不是实现了规格说明书中的需求?如果没有的规格说明书,你自己是不是付出了足够的努力来找出软件期待的行为, 并且把它测试了一遍? --- 最好是自动的,至少也得有手工的测试。
-
代码是完整的吗?
- 不管你的需求文档中写没写, 你的代码是不是仔细考虑了边界条件? 很多边界条件都是技术相关的:连接断开,内存不足,硬盘已满等等。
-
代码是安全的吗?
- 它是不是遵循了安全的最佳实践,是否验证了输入数据,防止了数据注入? 它是否经过了对已知攻击的安全测试? 安全当然不仅仅是代码, 但是代码的确可以引入不少安全漏洞。
-
代码是可读、可维护的吗?
- 其他人是不是可以轻松地理解你写的代码? 有没有适当的注释来描述一小部分代码在一个大场景中的位置?有没有把代码拆分成小的,可以读的单元。
-
代码是可以扩展的吗?
- 代码是否允许添加新的功能而不破坏老的代码? 是不是参数化的,或者可以配置的? 有没有使用恰当的设计模式来支持扩展?
-
代码是不是高效的?
- 在高负荷下能否工作正常? 是否避免了一次性读入大量数据到内存中,是否适当地使用了异步的处理?
-
有没有一些让你可以自豪的地方?
- 你觉得你的代码会让你很自豪,还是说你想把它藏起来不让别人看到?
- 大部分的代码都是平凡的,不是光芒四射的,但是你的代码是不是展示了一些比较好的实践?你是否愿意把他放到GitHub上去?
其实这些问题不仅仅要在提交代码之前思考,在Code Review的时候也完全可以借鉴。 高质量的软件依赖很多因素,程序员可以说是最重要的一环。我觉得经常问问自己这些问题并且采取行动,你最终会变得与众不同。
如果在代码中,存在下面的情况之一者,则说明代码需要清除腐败。
- 代码中存在许多大型的类和复杂的函数
- 函数的名称很晦涩或者会误导人。如果函数名称没有良好地反应函数的用途,那么会造成惊人的副作用。
- 没有任何结构:应该在哪里找某个功能非常不清晰。
- 内容重复:有许多相互独立的代码在做着同一件事情。
- 高耦合性:复杂的模块相互连接和依赖关系,将意味着某个地方的小小改动就会影响整个代码,甚至会影响看起来不相关的模块。
- 当数据流过系统时,它将在各个表示方法之间转化。
- API变得模糊不清。由于考虑不周,增加了新功能,曾经整洁的接口现在在范围上变得宽泛。
- API在不同代码版本中快速地变换。
- 公共API中泄露了部分私有实现,以便可以进行别的快速的修改。
- 代码中到处都是权宜之计:治标不治本的修改。它们隐藏了真正的问题。系统的外围尽是这种修改,结果导致缺陷隐藏在系统的核心。
- 有些函数的参数太多。这些函数有许多并不使用的参数,而只是将他们传递给下一级函数调用。
- 你发现代码太可怕了,以至于你都不想去修改它。你不知道它是会改善的,还是会轻微地破坏它,或是它更糟糕。
- 添加新功能时没有提供任何支持文档:现有的文档过时了。
- 你发现有的注释说:“不要动这段代码......”
- 有意义,短而精悍
- 类用名词,方法用动词,还要特别注意语境
- 普通变量:首单词小写,其后使用驼峰法命名
- 常量:全部大写
- 命名有意义,简单直接明了就不需要注释了
- 短小,只做一件事,if while for try catch中只写一句话(调用一个函数),并且减少嵌套
- 如果非要用 switch 语句就要尽量简化他
- 函数参数越少越好,最好没有
- 函数参数最好不要使用输出类型
- 分隔指令(动作,会改变数据)与查询(只做一件事)
- 使用异常代替返回特定的错误码
- 把try catch 抽离封装到函数内
- 避免重复
- 注释越少越好,注释往往得不到维护,代码变动了,注释却没有变,这时候的注释就是错误的引导了(坏注释)
- 注释都是程序猿的自言自语,不要说废话
- 避免 坏注释,多余的注释
- 赋值,一般的类、方法的缩进格式我已经了解
- 注意:函数的参数,最好是这种格式 fun(int a, int b, ){} 逗号后要加空格
- 一行字符在20-120之间,不过我一般是达到不使用滑动条看代码即可
- 函数的排布,最好是越底层越在下面的行数上
- 避免null:避免函数返回值是null以及函数入参是null
- 尽量避免可控异常(throws)的出现,因为破坏了封装
-
【 Algorithm 】
-
【 Blog 】
-
【 C 】
-
【 Database 】
-
【 Distributed 】
-
【 FrontEnd 】
- 【 FrontEnd/Frame 】
- 【 FrontEnd/Node 】
- Font
- Hexo
- JavaScript
- LearnPS
- ResponseCode
- SVG
- ViewSolution
- extjs学习笔记
-
【 Functional 】
-
【 Go 】
-
【 Groovy 】
-
【 Java 】
- 【 Java/AdvancedLearning 】
- 【 JavaBasic 】
- 【 JavaCache 】
- 【 JavaCollection 】
- 【 JavaConcurrency 】
- 【 JavaMap 】
- Annotation
- ClassFile
- Collection
- Concurrency
- Deploy
- Exception
- ExtendsAndInterface
- Generics
- IO
- JDBC
- JDKAndJRE
- JMX
- JVM
- Java11
- Java7
- Java8
- JavaNetwork
- JavaReleaseVersion
- JavaWeb
- JvmPerformance
- MQ
- MultipleLanguage
- Proxy
- Reflection
- Serialize
- SyntaxAndType
- Thread
- WebPerformance
- 【 Java/Android 】
- 【 Java/Ecosystem 】
- 【 Java/MSA 】
- 【 Java/Spring 】
- 【 Java/TemplateEngine 】
- 【 Java/Test 】
- 【 Java/Tool 】
- 【 Java/thread 】
- AlibabaJavaStandard
- DesignPattern
- HashMap解析
- Java-NIO
- Java虚拟机
- Log
- MIS
- Quartz
- RESTful
- WebSocket学习笔记
- ZooKeeper学习笔记
- android学习笔记
- 【 Java/AdvancedLearning 】
-
【 Kotlin 】
-
【 Linux 】
- 【 Linux/Alpine 】
- 【 Linux/Arch 】
- 【 Linux/Base 】
- 【 Linux/Centos 】
- 【 Linux/Container 】
- 【 Linux/Debian 】
- 【 Linux/Tool 】
- JavaDevInit
- Linux系统学习
-
【 MyBlog 】
-
【 Python 】
- 【 Python/Tool 】
- Python
- PythonConcurrent
- PythonGUI
- PythonGame
- PythonNet
- PythonOffices
- PythonWeb
- Python基础
- Python核心学习
-
【 Reactive 】
-
【 Rust 】
-
【 Scala 】
-
【 Script 】
-
【 Skills 】
- 【 Skills/Application 】
- 【 Skills/CS 】
- 【 Skills/Cache 】
- 【 Skills/Councurrency 】
- 【 Skills/DevOps 】
- 【 Skills/Document 】
- 【 Skills/Ecology 】
- 【 Skills/Network 】
- 【 Skills/Search 】
- 【 Skills/SoftwareEngineering 】
- 【 Skills/Spider 】
- 【 Skills/Test 】
- 【 Skills/Vcs 】
- 【 Skills/Work 】
- AppManual
- CelebrityQuotes
- Miscellaneous
- Platform
- Problem
- Protobuf
- RegularExpression
- SoftwareDesignEngineer
- Website
-
【 Windows 】