- 
                Notifications
    
You must be signed in to change notification settings  - Fork 20
 
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 】