代码好坏的评估分为四个层次,可用,可读,可维护,可扩展。这篇文章就从可读这个角度看一看如何编写出高质量的代码。
代码大全中很详细的阐述了如何给变量取一个好的名称,但开发中咱们可能没法记住那么多条,我选择了部分很关键的条目进行举例阐述。程序员
变量名应该很清晰的描述出该变量表明的事物包括大部分的临时变量,如下举几个例子编程
- 当前日期 好名字:currentDate 坏名字:date - 每页行数 好名字:linesPerPage 坏名字:x1,num
给布尔变量赋予暗含“真/假”含义的名字网络
- 好名字:done,success,error 坏名字:status
给枚举类型赋予所在组的前缀函数
enum today{ today_morning, today_afternoon }
常量命名大写并传递自身含义编码
- 好名字:CYCLE_NEEDED 坏名字:FIVE
团队开发中你代码被阅读的次数远大于编写的次数,为变量取合适的名称是加强可读性的一个关键步骤,工做中要尽力避免随意给变量的命名。code
防护式编程分为两个部分orm
断言接口
断言的做用就是让程序运行时自我检验。开发
int testData=0; assert testData!=1 :"testData is unexpectedly equal to 0"; assert testData==1 :"testData is unexpectedly equal to 1"; 输出 testData is unexpectedly equal to 1 断言为真代表程序正常运行,错误表示出现异常。 用错误来处理预期会发生的错误,用断言来处理毫不应该发生的错误。 能够将断言理解为注解,可是它更主动的对程序进行判断。 断言能够开启和关闭,关闭后编译器直接忽略断言代码,所以不能将执行程序放在断言中。 上面四句出自代码大全,第二句很重要,所谓预期错误就是源于外部的数据,不在程序员本身编码范围内出现的错误。
错误编译器
错误的一大特征就是咱们能够预料,经常使用的处理方式有返回错误码等,异常则是子程序遇到了本身没法处理的错误将它抛出。
本章主要说明何时该建立子程序,又该如何建立子程序
编写子程序可让我代码更精简,更容易理解,但编写时有几个准则须要咱们核对
另外什么时候使用过程也值得咱们注意,当一个子程序的主要用途就是返回它名字指明的返回值就使用
书上说的读起来有点绕,举个例子就知道了 第一段 if(report(formattedReport)==success) then ... 第二段 status = report(formattedReport) if(status==success) then ... 这样把对程序的判断,和函数的调用分开了,使得程序更好阅读
一句话就是用查询表来代替复杂的逻辑判断
直接访问表
int [] dayOfmonth=new int []{31,39,31,30..........}; int month=1; //查询1月份的天数 //表查询 int day=dayOfmonth[month-1]; //逻辑查询 if(month==1){ ... }else if(month){ ... } 能够看到查询表代替了复杂的逻辑判断
阶梯访问表
int [] range=new int []{30,50,70,90}; char [] rank=new char[]{'A','B','C','D'}; int score=98; for(int i=0;i<range.length;i++){ if(score<30){ return rank[i]; } } 咱们不能直接将数字转化为字母,所以根据分数的范围返回评级,采用阶梯表法比较区间的上/下限。
所谓直线型就是将先后依赖的代码组织在一块儿,目的还是使代码能被自上而下的阅读,更容易被理解。
核对准则
若没有依赖关系,那相关语句被组织在一块儿了吗?