代码整洁之道-第2章有意义的命名-读后感

对计算机认知的另一个视角

看这本书之前认为,从java角度看计算机,从下到上分为:汇编等基础语言、各种操作系统、JVM虚拟机、Java代码、网络、分布式(各种并发、缓存、各种架构)。从这本书的开篇就认识到,还可以这样看:代码、模型、需求。前一段时间刚听说了一个DDD领域驱动模型设计,恩,这样一来,好像给这个模型有个一个定位。

第2章 有意义的命名

  1. 前缀是废料,m_dec –> description。
  2. 接口的命名,IShapeFactory –> ShapeFactory,不想让用户知道我提供的是一个接口。
  3. 明确是王道,最好不要使用单个字母。
  4. 类名和对象名应该是名词或是名词短语,如Customer, Account, AddressParser,避免使用动词,如Manager, Data等。
  5. 别用双关语,比如add,在向list中插入时最好用insert或append等。
  6. 最好用计算机科学术语,算法名,模式名,数学术语,比如JobQueue等。这是解决方案领域的名称。
  7. 如果不能用程序员熟悉的术语命名,那么使用涉及的问题领域命名。
  8. 添加有意义的语境:(我的理解是,该组成一个类的要抽出来,大方法尽量拆成清晰的小方法)
private void printGuessStatistics(char candidate, int count){
    String number;
    String verb;
    String pluralModifier;
    if(count == 0){
        number = "no";
        verb = "are";
        pluralModifier = "s";
    }else if(count == 1){
        number = "1";
        verb = "is";
        pluralModifier = "";
    }else{
        number = Integer.toString(count);
        verb = "are";
        pluralModifier = "s";
    }
    String guessMessage = String.format(
        "There %s %s %s%s", verb, number, candidate, pluralModifier
    );
    print(guessMessage);
}

上面这个函数有点长,变量的使用贯穿始终。要分解这个函数,需要创建一个名为GuessStatisticsMessage的类,把三个变量做成该类的成员字段。语境的增强也让算法能够通过分解为更小的函数而变得干净利落。

public class  GuessStatisticsMessage{
    private String number;
    private String verb;
    private String pluralModifier;

    public String make(char candidate, int count){
        createPluralDependentMessageParts(count);
        return String.format(
            "There %s %s %s%s", verb, number, candidate, pluralModifier
        );
    }

    public void createPluralDependentMessageParts(int count){
        if(count == 0){
            thereAreNoLetters();
        }else if(count == 1){
            thereIsOneLetter();
        }else{
            thereAreManyLetters(count);
        }
    }

    public void thereAreNoLetters(int count){
        number = "no";
        verb = "are";
        pluralModifier = "s";
    }

    public void thereIsOneLetter(){
        number = "1";
        verb = "is";
        pluralModifier = "";
    }

    public void thereAreManyLetters(count){
        number = Integer.toString(count);
        verb = "are";
        pluralModifier = "s";
    }
}

关于第8条,我的感悟最深,因为最近我经常写一个大函数,里面好几层if else,感觉特别丑特别Low,看了一下别人的代码都没有这样的,但是我这逻辑又没错,就是不知道哪的原因。后来,我写的一个函数,因为要加一个判断,我没有时间处理,另外一个同事写了,后来我看到时,发现,他给我重构了,一个大方法分解成为好几个小方法,每个都有注释,感觉特别清晰特别舒服,这时我才恍然明白自己low在哪里。。。
所以,看到第8条,这里把一个方法,写成了一个类,属性作为成员变量,里面创建多个方法实现功能,感觉很优美,产生了特别深的认同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值