代码检视(一)

一  意义

     最大的意义:通过代码检视,发现问题,解决问题,并且能够有效地提升自己,最终达到写出优质代码,提高代码质量,成功做好项目。

二   基本要求

(一)  逻辑一定要正确,逻辑错误非常容易引起BUG

(二)  避免一些没必要的代码,能用一句解决的就不要用一句以上的代码解决,冗余代码不仅占用内存,而且影响可读性。

(三)  

三  代码检视

四  提升内容

(一)  有意义命名变量、函数、参数、类、和封包(package)等等,命名的时候一定要使得名字有意义,并且一定要写好注释。

1 增强可读性

2 使维护变得容易

        (二) 简单规则

1 名副其实:变量、函数、或类的名称基本上可以看出这代表着什么,为什么会存在,做什么事,应该怎么用。如果名称需要注释来补充的话,就不太算名副其实了。

eg:

 int d; // 消逝的时间,以天计

                        大家看看这么写,好不好?

这完全没有那种时间消逝的感觉,不看注释根本不知道这个拿来做什么,有什么用。

以下写法:

int elapsedTimeInDays;

int daysSinceCreation;

int daysSinceModification;

我们不需要看注释就能够,明白这代表着什么,对吧?

  再来一段代码:

public List<int[]> getThem()

{

List<int[]> list1 = new ArrayList<int[]>(0);

for(int[] x :  theList)

if( x[0] == 4)

list1.add(x);

return list1;

}

我们都能看懂这段代码,但是我们不知道这段代码究竟他要做什么,搞不懂,也说不明白,看着难受,又有点香菇,大骂这是写的啥?

这并不复杂的一段代码,有很多问题:

(1)函数命名:getThem() 其实瞬间就蒙了,“获取他们” 这个翻译准确不,“他们”是啥?表示不懂;

(2)变量命名:list1 这个是啥?里面装的什么,搞不懂,也是不明白;

(3)x[0]代表什么?4又是什么东东?这些我们都不明白;

(4)这段代码没有一点注释:真心是不懂的;

(5)虽然我们知道 for 循环下面一句是他的执行语句,if 控制语句的下一句就是他的执行语句,但是最好还是加上“{}”,增强可读性;

(6)这段代码我们不知道,怎么使用,返回的结果做何用的我们也不知道

以上这六点,基本上判断这段代码写得不好,可以改进的地方很多。

以下两种改进方法:

(1)

public List<int[]> getFlaggedCells()

{

List<int[]> flaggedCells = new ArrayList<int[]>(0);

for(int[] cell :  gameBoard)

{

if( cell[STATUS_VALUE]  ==  FLAGGED)

{

flaggedCells .add(cell);

}

}

return flaggedCells ;

}

(2)

public List<Cell> getFlaggedCells()

{

List<Cell> flaggedCells = new ArrayList<Cell>(0);

for(Cell cell :  gameBoard)

{

if( cell.isFlagged())

{

flaggedCells .add(cell);

}

}

return flaggedCells ;

}

很明显,这两种改进都比刚才那种好,但是最好的还是改进方法的第二种,我是这么认为的。

2 避免误导

acounntList来指一组账号,这样怎么样?

List对于程序猿来说,是有特殊意义的:除非他真的是个List。用accounts都比这个好。

提防使用不同之处很小的名称:

看的人容易眩晕,或许就是一两个字母的差别,在时间比较紧的情况下,很容易出BUG,即便这个很微小,也是值得注意的,

这就要注意命名命得差异较明显一点

3 做有意义的区分

public static void copyChars(char a1[], char a2[])            ×

public static void copyChars(char source[], char destination[])       √

下面当一个service接口中有以下几个方法的时候:

getActiveAccount();

getActiveAccounts();

getActiveAccountInfo();

这三个方法我们会想,到底调用哪一个,才能得到活动账户的信息,所以就需要有效区分。方便系统维护,版本升级,代码重用。

使用读得出来的名称

比较

class DtaRcrd102

{

private Date genymdhms;

private Date modymshms;

private final String pszqint = "102";

......

}

class Customer

{

private Date generationTimestamp;

private Date modificationTimestamp;

private final String recordId= "102";

......

}

5 使用可搜索的名称

6 类名应当时名称或者名词短语,比如Customer,Account;

7 方法名应当是动词或者动词短语,如deleteAccount

  属性访问器:get

属性修改器:set

断言: is

........................

还有一些我就不列举了,尽量做到,见名知意,规范命名。

         

         



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值