# Readable code summary **Repository Path**: rock117/Readable-code-summary ## Basic Information - **Project Name**: Readable code summary - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Readable code summary 1. 使用类型建模 不用 string, map来表达类型 如 String id -> Id id  By allowing for the naming and organization of concepts (such as Square, Circle, Triangle, and Hexagon)  By providing explicit documentation of the purposes of variables, functions, and programs  By driving code completion in an interactive editing environment # resource: 1. 好的代码是怎样的(标准) 1.1 易读 不费脑力的阅读 符合人的思维习惯 代码简短 拿最基本的函数举例子 1. 函数名字 2. 函数参数 3. 函数体 函数体由抽象的步骤实现,步骤数限制在一定范围内, 每个步骤在逻辑地位是平等的. B. 方式/方法 B1. 包名,类名,方法名,变量名要恰当反应他们对应的职责 B2. 函数不超过100行,太长的代码实现的职责过多,读起来也难以快速理解函数意图 B2. 用最通俗的方式来实现功能,避免奇技淫巧,黑魔法 // sample, 运算符重载,位运算 B3. 制定代码规范,形成契约, 比如不扩散 null(形参,返回值不用null) B4. 纯函数, 可变性维持再最小范围,不扩散可变性 B5. 合理抽象, 将零碎的变量,函数合理抽象,组合为高一级层次上的实体(变量,类,函数) // sample, 运算符重载,位运算 B6. 对可变性进行封装 // sample, 运算符重载,位运算 B7. 消除重复代码,代码量少,维护越容易 // sample, 运算符重载,位运算 B8. 使用组合替代继承 // sample, 运算符重载,位运算 B9. 封装,避免类/模块避免暴露过多的属性,方法 B10. 代码复杂度太高,过多的 流程控制,循环语句 B11. 使用合适的类型 B12. 高内聚,低耦合 B13. 保持对象完整,一经构造,就是合法数据 B18. 魔数 B19. 声明式编程,不关注具体执行细节 B20. 显示声明错误,不添加默认操作 B21. 区分边界. 边界内不需要做非法值判断,从而减少代码复杂度,单元测试难度 B22. 单一入口, 单一出口 http 各个方法最终会通过单一的出口发出请求 拦截器最终有一个入口和出口 B23. 使用类型建模 string, map 少用 如何保证代码质量: 人工手写代码 -> 编译期 -> 代码分析工具 -> 单元测试 -> 自动化测试 -> QA手工测试 -> 客户测试 1. 工具 使用合适的工具,如IDE插件, 代码分析工具, 自动化测试, 单元测试 使用合适的语言 https://fsharpforfunandprofit.com/series/designing-with-types.html https://fsharpforfunandprofit.com/posts/serializating-your-domain-model/ https://fsharpforfunandprofit.com/posts/property-based-testing-2/ https://fsharpforfunandprofit.com/posts/designing-with-types-making-illegal-states-unrepresentable/ https://fsharpforfunandprofit.com/posts/serializating-your-domain-model/ https://blog.csdn.net/yes1983/article/details/86525259 https://juejin.im/post/5e888787e51d4546e14f481a https://www.cnblogs.com/loveling-0239/p/11606645.html 可读性 https://zhuanlan.zhihu.com/p/38619842 https://www.jianshu.com/p/422657e71e3a code sample: 1. file 2. search criteria 3. 根据类型编程 4. 依赖类型