《代码整洁之道》

时间:2019-06-25 11:31:22   收藏:0   阅读:110

看完《代码整洁之道》之后我受益匪浅,但等到自己实践时却很难按照书中给的建议编写出整洁的代码。一方面是规则太多,记不住,另一方面书上引用了大量示例代码对这些规则进行佐证,在我记不住时亦不方便查阅。于是我把书中的规则摘了出来并加以一定的解释,闲暇时候多过几遍,希望这些规则时刻警示我,成为我的习惯。

想看此书却还没开始的人也可以从这篇笔记出发,对笔记中列出的规则有疑问再翻书找答案,相信会比直接啃书来的快一些。

ps: 未必要严格遵循书中的规则,代码不是八股文。

命名

1.避免误导

2.做有意义的区分

3.使用可搜索的名称

4.命名时避免使用编码

5.类名、方法名

6.每个概念用一个词

7.别用双关语

8.添加有意义的语境

函数

1.越短小越好

2.只做一件事

3.每个函数一个抽象层级

4.switch语句

5.使用描述性的名称

6.函数参数

7.副作用(函数在正常工作任务之外对外部环境所施加的影响)

8.设置(写)和查询(读)分离

9.使用异常代替返回错误码

10.不要写重复代码

11.结构化编程

12.如何写出这样的函数

注释

1.用代码来阐述

2.好注释

3.坏注释

代码格式

1.垂直格式

2.水平格式

对象和数据结构

对象:暴露行为(接口),隐藏数据(私有变量)
数据结构:没有明显的行为(接口),暴露数据。如DTO(Data Transfer Objects)、Entity

1.对象与数据结构的反对称性(参考书中代码清单6-5)

2.Demeter定律(最少知识原则)

异常处理

异常处理很重要,但如果异常处理四处分散在代码中 导致逻辑模糊不清,它就是错的。

1.使用异常而不是返回错误码

2.先写try-catch语句

3.使用unchecked exception(java独有)

4.在catch里尽可能的记录错误信息,记录失败的操作以及失败的类型。

5.根据调用者的需要 定义不同的异常处理类

6.特例模式: 创建一个类来处理特例。

try {
    MealExpendses expenses = expenseRepotDAO.getMeals(employee.getID());
    m_total += expenses.getTotal();// 如果消耗了餐食,计入总额
} catch (MealExpensesNotFound e) {
    m_total += getMealPeDiem();// 如果没消耗,将员工补贴计入总额
}

异常打断了业务逻辑。可以在getMeals()里不抛异常,而是在没消耗餐食的时候返回一个特殊的MealExpense对象(PerdiemMealExpense),复写getTotal()方法。

MealExpendses expenses = expenseRepotDAO.getMeals(employee.getID());
m_total += expenses.getTotal();

publc class PerDiemMealExpenses implements MealExpenses {
    public int getTotal() {
        //return xxx; //返回员工补贴
    }
}

7.别返回null值

8.别传递null值

边界

将第三方代码干净利落地整合进自己的代码中

1.避免公共API返回边界接口,或者将边界接口作为参数传递给API。将边界保留在近亲类中。

2.不要在生产代码中试验新东西,而是编写测试来理解第三方代码。

3.避免我们的代码过多地了解第三方代码中的特定信息。

单元测试

1.TDD(Test-driven development)三定律

2.保持测试整洁

3.每个测试一个断言

4.整洁的测试依赖于FIRST规则

1.类的结构组织(顺序):

2.类应该短小

3.为修改而组织(参考书中代码清单10-9、10-10)

系统

1.将系统的构造与使用分开

emergent design

四条规矩帮助你创建优良的设计

1.运行所有测试

2.消除重复

3.表达意图

4.尽可能少的类和方法

5.以上4条规则优先级依次递减。重要的是测试、消除重复、表达意图。

并发编程

原文:https://www.cnblogs.com/zpaixx/p/11081469.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!