【笔记】Clean Code(持续更新)

1.有意义的命名

1.1 名副其实

变量选择要体现本意的名称,能让人更容易理解和修改代码。

例如:

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

int elapsedTimeInDays;
int daysSinceCreation;
int fileAgeInDays;

好的命名习惯可以让代码块变得易读,无关于简洁度,而是可以减少代码的模糊度。

比如下面这段代码。

public List<int []> getThem(){
    List<int []> list1 = new ArrayList<>();
    for(int[] x :  theList){
        if (x[0] == 4){
            list1.add(x);
        }
    }
    return list1 ;
}

在看这段代码时有很多问题不理解,如theList是什么类型的东西,theList下标0条目的意义是什么?值4的意义是什么?我怎么使用返回列表?

假设这是一款扫雷游戏,盘面是theList的单元格列表,那就将其名称改为gameBoard。盘面上每个单元格都用一个简单数组表示,0下标条目是状态栏,而状态值4代表为“已标记”。现在我们可以把代码改为有意义的名称。

public List<int []> getFlaggedCells(){
    List<int []> flaggedCells = new ArrayList<int []>();
    for(int[] cell : gameboard){
        if (cell[STATUS_VALUE] == FLAGGED){
            flaggedCells.add(cell);
        }
    }
    return flaggedCells;
}

也可以把cell封装为一个类,在判断FLAGGED时,调用判断方法来掩盖这个数字。

1.2 避免误导

我们必须避免留下掩盖代码本意的错误线索,避免使用与本意相悖的词。比如accountList来指称一组账号,除非它真的是List类型。如果说他包含的一组账号并不是List类型,就会引起错误的判断。所以,用accountGroup或bunchOfAccounts,甚至直接用accounts都会好一些。

另外需要提防使用不同之处较小的名称,如XYZControllerForEfficientHandlingOfStrings和另一处的XYZControllerForEfficientStorageOfStrings,辨别需要花费多少时间呢?

1.3 做有意义的区分

对于一些变量,只是在其后面添加数字用以区分并不规范,只是滥竽充数,这只能让编译器满意,以数字系列命名(a1,a2,a3,a4...)是依义命名的对立面,完全没有提供正确的信息:没有提供导向作者意图的线索。

public static void copyChars(char a1[],char a2[]){
    for(int i=0; i<a1.length; i++){
        a2[i] = a1[i] ;
    }
}

如果参数名改为source和destination,这个函数就会像样很多。

转载于:https://www.cnblogs.com/LexMoon/p/cleancode.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值