CleanCode-命名

本文探讨了编程中命名的重要性,强调了命名应体现意思、避免误导、具有区分性、可读性和搜索性。建议使用有意义的区分,避免无意义的前缀,以及在接口和实现类之间做出明确区分。此外,提倡类名和方法名应遵循名词和动词短语的原则,并使用行业标准术语。通过实例展示了如何改进代码,使其更具可读性和维护性。
摘要由CSDN通过智能技术生成

命名

1.命名要体现意思

例如:集合名称、有意义的形参、下标的意义、整数的意义,不要用魔术数,用命名代称。

2.避免误导

不要轻易用容器后缀作为命名,除非真的是该类型。accounts也可以;
不要取特别长由难区分的命名,耽误时间,容易弄错。
不要乱用大小写字母,例如,小写字母l和大写字母O。

3.有意义的区分

不要轻易以数字系列命名,例如:a1[]a2[]
不要用没区别的意思命名,例如:ProductInfoProductData
不要用废话,例如:Variable在变量名中、Table在表名中、用Name而不用NameString,
如果缺少约定,变量moneyAmount与money没区别,xxInfo和xx没区别。
要区分名称,要以读者能鉴别的不同之处来区分。
不要如下:getActiveAccount()getActiveAccounts()getActiveAccountInfo()

4.使用读得出来的、可搜索的名称

不要用自造词

不要轻易用单个字母e或数字7等命名,不好搜索。
单字母名称仅用于短方法中的本地变量,名称长短应与作用域相对应。
若变量或常量可能在代码中多处使用,应采用方便搜索的名称。

5.避免使用无意义的前缀

6.接口和实现类要有区分

7.单字母命名时变量名取大多数人习惯的,比如i、j、k

8.类名、对象名应该是名词或名词短语,不应该是动词。

避免使用 ManagerProcessorDataInfo等类名。

9.方法名应当是动词或动词短语

postPaymentdeletePagesave,属性访问器、修改器和断言应当根据其值命名,并添加get、set和is前缀。

10.取名要规范,不要内涵别的意思

11.每个概念对应一个词

不要 fetchretrieveget 在多个类中的同种方法命名,不要混用 controllermanagerDriver

12.避免同一单词多个意思的理解

比如,多个类中的add在参数列表和返回值在语义上等价,但是不能为了add而强行使用。比如 可能 insertappend 更精确。

13.使用常用的术语、算法名、模式名、数学术语等,

例如 VISITOR模式的 AccountVisitor、Queue的 JobQueue

14.名称来源于要解决的问题域,有应用场景。

15.添加有意义的语境。

可以用良好命名的类、函数或名称空间来放置名称,从而提供语境,或者添加合适的前缀。比如单个的 state,转化为 addrState

16.不要添加没用的语境。

在Address类中,类属性不用什么都加上addr,同样也注意类名是否会多义。

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", verb, number, candidate, pluralModifier);
    System.out.println(guessMessage);
}

函数过长,变量的使用贯穿始终。分解这个函数,可以创建一个类,把三个变量做成该类的成员字段,这样在定义上成为类的一部分。

主函数呈现整体逻辑。

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", verb, number, candidate, pluralModifier);
    }

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

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

    private void thereIsOneLetter() {
        number = "l";
        verb = "s";
        pluralModifier = "";
    }

    private void thereAreNoLetters() {
        number = "no";
        verb = "are";
        pluralModifier = "s";
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值