• Use Intention-Revealing Names

    The name should tell you why it exists, what it does, and how it is used.

    e.g.

    Bad code:

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

    Good code:

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

    Better code:

    public List<Cell> getFlaggedCells(){
    List<Cell> flaggedCells = new ArrayList<Cell>();
    for (Cell cell : gameBoard)
    if (cell.isFlagged())
    flaggedCells.add(cell);
    return flaggedCells;
    }

  • Avoid Disinformation
  • Make Meaningful Distinctions

    Bad code:

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

    Good code:

    Change the name a1, a2 to source and destination.

  • Use Pronounceable Names

    这条对于我们中国人来说就不合适了,命名时还是不要用汉语拼音。

  • Use Searchable Names

    The length of a name should correspond to the size of its scope.

  • Avoid Encodings
    • Hungarian Notation

      特定时代的产物,随着一些现代的集成开发环境的引入,已不建议使用了。(参考维基百科词条:匈牙利命名法

    • Member Prefix
    • Interfaces and Implementations

      leave interface unadorned.

      prefer to encoding implementations than interfaces.

      e.g. prefer to use the name ShapeFactoryImp rather than IShapeFactory.

      关于这一点,在上面提到的“匈牙利命名法”维基百科词条最后也有相关说明:

      .NET Framework,微软新的软件开发平台,除了接口类型一般不适用匈牙利命名法。在 .NET 中,习惯在接口类型前放一个 I (例如 Windows Forms 中的 IButtonControl 接口。).NET Framework 指导方针建议程序员不要用匈牙利命名法,但是没有指明不要用系统匈牙利命名法还是匈牙利应用命名法,或者是两者都不要用。

      与此对比,Java 的标准库中连接口类型也不加前缀。

      即 Java 的命名法则与作者的观点一致。

  • Avoid Mental Mapping

    Clarity is king.

  • Class Names

    noun or noun phrase names

  • Method Names

    verb or verb phrase names

  • Don’t Be Cute

    Say what you mean. Mean what you say.

  • Pick One Word per Concept
  • Don’t Pun
  • Use Solution Domain Names

    use computer science terms, algorithm names, pattern names, math terms and so forth.

  • Use Problem Domain Names

    When there is no “programmer-eese” for what you’re doing.

    Separating solutions and problem domain concepts is part of the job of a good programmer and designer. The code has more to do with problem domain concepts should have names drawn from the problem domain.

  • Add Meaningful Context

    Bad code:

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

    Good code:

    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 thereAreNoLetters() {
    number = "no";
    verb = "are";
    pluralModifier = "s";
    } private void thereIsOneLetter() {
    number = "1";
    verb = "is";
    pluralModifier = "";
    } private void thereAreManyLetters(int count) {
    number = Integer.toString(count);
    verb = "are";
    pluralModifier = "s";
    }
    }

  • Don’t Add Gratuitous Context

Clean Code – Chapter 2: Meaningful Names的更多相关文章

  1. Clean Code – Chapter 3: Functions

    Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...

  2. Clean Code–Chapter 7 Error Handling

    Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...

  3. Clean Code – Chapter 4: Comments

    “Don’t comment bad code—rewrite it.”——Brian W.Kernighan and P.J.Plaugher The proper use of comments ...

  4. Clean Code – Chapter 6 Objects and Data Structures

    Data Abstraction Hiding implementation Data/Object Anti-Symmetry Objects hide their data behind abst ...

  5. Clean Code – Chapter 5 Formatting

    The Purpose of Formatting Code formatting is about communication, and communication is the professio ...

  6. “Clean Code” 读书笔记序

    最近开始研读 Robert C.Martin 的 “Clean Code”,为了巩固学习,会把每一章的笔记整理到博客中.而这篇博文作为一个索引和总结,会陆续加入各章的笔记链接,以及全部读完后的心得体会 ...

  7. clean code meaningful names

    ---恢复内容开始--- Meaningful Names: use Intention-Revealing Names //nice,Everyone who reads your code (in ...

  8. [转]Clean Code Principles: Be a Better Programmer

    原文:https://www.webcodegeeks.com/web-development/clean-code-principles-better-programmer/ ----------- ...

  9. 代码整洁之道Clean Code笔记

    @ 目录 第 1 章 Clean Code 整洁代码(3星) ?为什么要整洁的代码 ?什么叫做整洁代码 第 2 章 Meaningful Names 有意义的命名(3星) 第 3 章 Function ...

随机推荐

  1. Matlab求极限

    matlab求极限(可用来验证度量函数或者隶属度函数)可用来验证是否收敛,取值范围等等. 一.问题来源 搜集聚类资料时,又看到了隶属度函数,没错,就是下面这个,期间作者提到m趋于2是,结果趋于1,我想 ...

  2. 错误:[将截断字符串或二进制数据。\r\n语句已终止。]

    错误:[将截断字符串或二进制数据.\r\n语句已终止.] 解决方法是将数据库表这列的长度调大一点

  3. 团体程序设计天梯赛-练习集L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  4. ppshu

    全部书籍已经下载完毕! http://3cvpkfx4gdnkcduj.onion/ https://3cvpkfx4gdnkcduj.onion.cab/ https://3cvpkfx4gdnkc ...

  5. Coder-Strike 2014 - Round 1(A~E)

    题目链接 A. Poster time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputou ...

  6. Android面试宝典(转)

    Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语. C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历. 1. ...

  7. socket编程中write、read和send、recv之间的区别

    http://blog.csdn.net/petershina/article/details/7946615 一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用. 由此网络 ...

  8. 理解TCP/IP协议

    TCP/IP协议是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议. 单从TCP/IP协议这个名称看,好多人误 ...

  9. 关于 mysqladmin

    >mysqladmin 工具的使用格式: mysqladmin [option] command [command option] command ...... option 选项: -c nu ...

  10. ubuntu终端颜色配置

    对于刚接触ubuntu的同学们,打开终端(ctrl+alt+T),会发现里面都是一个颜色,不管是用户名.主机名还是命令都是白色,当然,用 ls 列出文件的时候是会多一种颜色的.即使这样,对开发人员来说 ...