`
mshijie
  • 浏览: 96143 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

《Clean Code》总结 有意义的命名

    博客分类:
  • Java
阅读更多

编写代码时,尽量使用有意义的名称命名类、方法、变量等

1.使用能揭示意图的名称

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

 改变为,就能更能说明名称的意图

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

 又例如

int elapsedTimeInDays;
int d; // elapsed time in days

 前者使用的表明意图的名称比注释更清晰

 

2.避免误导

例如使用accountList时,要小心,这向阅读者传达的信息是,这是一个List,但如果不是列表,而只是一个数组。简单的使用accounts或者accountGroup比较安全

3.使用有意义的区分


在一段代码中清除存在相同类型的两个不同变量
public static void copyChars(char a1[], char a2[]) {}
public static void copyChars(char source[], char destination[]) {}
后者的区分更有意义
又例如类名Product,ProductInfo,ProductData三个类在区分上很不明确,不能直接看出三个类的区别
getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();
这个三个方法名也会给使用者带来麻烦

 

4.使用可发音的命名


一个经典的例子就是genymdhms(generation date, year, month, day, hour, minute, and second),这个方法无法发音,就不方便和他人交流。generateTimeStamp是个更好的名字。
例如

class DtaRcrd102 {
    private Date genymdhms;
    private Date modymdhms;
    private final String pszqint = "102";
    /* ... */
};

 重构为

class Customer {
    private Date generationTimestamp;
    private Date modificationTimestamp;;
    private final String recordId = "102";
    /* ... */
};

 

5.使用能搜索的名称

for (int j=0; j<34; j++) {
    s += (t[j]*4)/5;
}

 其中的产量数字,不能有效搜索到,不方便修改。

int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j=0; j < NUMBER_OF_TASKS; j++) {
    int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
    int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
    sum += realTaskWeeks;
}

 这段更长的代码更方便搜索和修改 

6.避免在名称中编码附加信息

例如,匈牙利命名法,m_或_前缀,IShapeFactory接口前缀I,现在的IDE已经可以更有效的完成前三种的功能,已经没有这样使用的必要了。

 

7.类名使用名词单数形式Customer, WikiPage, Account

 

8.方法名使用动词或动词短语postPayment, deletePage, save

 

9.同一个单词使用同一种命名


例如fetch,retrieve,get三者表示同一个意思,最好统一使用一个

 

10.使用程序编写领域的名词


例如AccountVisitor,JobQueue,UserFacade

 

11.使用问题领域的名词

 

12.添加有意义的上下文

 

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);
}

 重构为

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 );
 }
 
 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 = "1";
  verb = "is";
  pluralModifier = "";
 }
 private void thereAreNoLetters() {
  number = "no";
  verb = "are";
  pluralModifier = "s";
 }
}

 就能给number,verb和pluralModifier提供一个很清晰的上下文

 

13.不要添加没有必要的上下文


例如一个应用程序交Gas Station Deluxe,没有必要在所有东西前面添加GSD。QT的所有类前加Q就是没有必要的。

分享到:
评论

相关推荐

    Writing Clean Code中文版

    - **描述**:“Writing Clean Code中文版 好东西大家分享”暗示本书是编程领域的一份珍贵资源,鼓励读者分享此书以传播有价值的知识。 #### 标签解析 - **标签**:“Writing Clean Code”、“C”、“C语言”、...

    clean_code(中文完整版).rar

    《Clean Code》中文完整版.pdf 这本书是软件开发领域中一本经典的著作,由著名软件工程师Robert C. Martin(Bob大叔)撰写。《Clean Code》强调编写整洁、可读性强的代码,这对于任何软件项目的长期维护和扩展至关...

    CleanCode ppt

    ### CleanCode概述 《CleanCode》是一本关于提高软件开发质量的经典著作,它不仅强调了良好的架构和项目管理的重要性,还特别突出了代码本身的质量对于软件成功的关键作用。书中提出了“整洁代码”的概念,即代码的...

    Writing Clean Code.rar

    1. **命名规范**:使用有意义的变量、函数和类名,避免使用缩写和模糊的命名。 2. **单一职责原则**:每个函数、类或模块应有且仅有一个明确的责任,避免“大泥球”现象。 3. **开闭原则**:对扩展开放,对修改关闭...

    Writing Clean Code(PDF版本)

    书中强调了选择有意义的名称对于理解代码逻辑的重要性。 - **实践建议**: - 使用清晰、描述性强的名称。 - 避免使用缩写,除非它们是广泛认可的标准缩写。 - 一致地使用大小写规则,例如使用`camelCase`或`snake...

    clean_code(中文完整版)

    书籍的英文原名是《Clean Code: A Handbook of Agile Software Craftsmanship》,中文版则译为《代码整洁之道》。全书通过大量的编程实践和案例,强调了代码质量和整洁度之间的直接关系,指出了干净的代码不仅在质量...

    Clean-Code(JAVA必看的一本书非常好)

    《Clean Code》是由著名软件工程师Robert C. Martin(也被称为Uncle Bob)撰写的一本经典著作,这本书在Java开发者中享有极高的声誉,是提升代码质量和编程习惯的必备读物。"Clean Code"这一标签恰好反映了这本书的...

    《Clean Code》读后感

    《Clean Code》是软件开发领域一本非常经典的书籍,由Robert C. Martin(也被称为Uncle Bob)撰写。这本书深入探讨了编写整洁、可读、可维护代码的重要性,旨在提升软件开发人员的职业素养和代码质量。在阅读这本书...

    Clean Code A Handbook of Agile Software Craftsmanship

    《Clean Code》是由著名软件工程师Robert C. Martin(Uncle Bob)所著,是一本关于敏捷软件开发中编写高质量代码的指南。这本书以其深入浅出的写作风格,从实践出发,结合理论,再回归实践,揭示了编写“干净代码”...

    Write Clean Code

    - 使用有意义的名字。 - 避免缩写或过于简化的名字。 - 保持一致性,比如变量名和函数名的命名风格统一。 ##### 2. 断言的使用 - **定义**: 断言是一种用于调试的编程技术,用于验证程序中的假设条件是否成立。 ...

    Clean Code A Handbook of Agile Software Craftsmanship英文版

    整洁的代码遵循良好的命名规则,有明确的函数和类职责,避免过长的方法和过多的参数,同时注重注释与文档的适度使用。 2. **设计原则**:书中讨论了SOLID原则,包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换...

    适用于JavaScript的Clean Code概念.zip

    1. **命名规范**:清晰、有意义的变量、函数和类名是Clean Code的基础。避免使用缩写和模糊的命名,尽量使名字能反映出其用途和作用。 2. **单一职责原则**(SRP):每个函数、方法或类应只做一件事。如果一个函数...

    clean-code-javascript.pdf 代码整洁的 JavaScript

    《代码整洁的JavaScript》一书将软件工程中的“Clean Code”原则应用于JavaScript编程,以帮助开发者编写可读性强、易于重用及重构的代码。本书并不是传统意义上的代码风格指南,而是围绕着一系列软件工程的最佳实践...

    Writing Clean Code

    使用有意义的变量名、函数名,可以使代码自解释,减少理解成本。 3. **简洁性**:简洁的代码意味着去除冗余和不必要的复杂性。通过合理地拆分函数和模块,保持函数小而专注,可以提高代码的可测试性和可维护性。...

    编程精粹(Writing Clean Code)

    - **高级程序员和架构师**:对于已经有一定经验的开发者来说,本书中的高级技术和实践策略同样具有很高的参考价值。 - **项目经理和团队负责人**:通过学习本书,可以更好地理解高质量代码的重要性,并能够制定出更...

    Clean Code Javascript.zip

    1. **有意义的命名**:变量、函数、类等命名应当准确反映其用途,避免使用模糊不清或过于简略的标识符。例如,`userList` 比 `ul` 更具描述性。 2. **函数的单一职责**:每个函数应当只做一件事,并且做好。避免...

    write clean code

    书中的目录结构清晰,从命名约定、编写优质代码的背景知识,到具体的技术章节,如使用断言、对子系统的防护,以及对代码的逐条跟踪等,再到最后的编码态度问题。附录部分还包含编码检查表、内存登录例程以及练习答案...

Global site tag (gtag.js) - Google Analytics