合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[TOC] # 有意义的命名 ## 命名原则 ### 1. 名副其实 变量、函数或类的名称应该已经答复了所有大问题。如果还需要注释来补充,就不算名副其实。 > Bad ```java int d; //消释的时间,以日计 ``` > Good ```java int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays; ``` 选择体现本意的名称能让人更容易理解和修改代码。 > Bad ```java public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x: theList) { if (x[0] == 4) { list1.add(x); } } return list1; } ``` - **theList类型不明** - **theList下标意义不明** - **常量4意义不明** - **不知如何使用返回列表** > Good 比如代表扫雷 获取`已标记`的单元格信息 ```java public List<int[]> getFlaggedCells() { List<int[]> flaggedCells = new ArrayList<int[]>(); for (int[] cell : gameBoard) { if (cell[SYATUS_VALUE] == FLAGGED) { flaggedCells.add(cell); } } return flaggedCells; } ``` > 优化版 ```java public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for (int[] cell : gameBoard) { if (cell.isFlagged()) { flaggedCells.add(cell); } } return flaggedCells; } ``` ### 2. 避免误导 避免使用与本意相悖的词。 ### 3. 做有意义的区分 > Bad - a1 a2 a3 等数字系列命名 - 已经有了Product类,又有了ProductInfo和ProductData... 废话都是冗余。Variable一词永远不应当出现在变量名中。Table一词永远不应当出现在表名中。 > Bad - getActiviveAccount(); - getActiviveAccounts(); - getActiviveAccountInfo(); ### 4. 使用读得出来的名称 ### 5. 使用可搜索的名称 单字母名称和数字常量有个问题,就是很难在一大篇文字中找出来。 `WORK_DAYS_PER_WEEK`要比数字`5`好找的多 ### 6. 避免使用编码 - 匈牙利语标记法 X - 成员前缀 X - 接口和实现 X(前导字母I被滥用) ### 7. 避免思维映射 ### 8. 类名 类名和对象名应该是名词或名词短语。 > Good `Customer`、`WikiPage`、`Account`.etc > Bad `Manager`、`Processor`、`Data`、`Info` ### 9. 方法名 使用动词或动词短语。 `postPayment`、`deletePage`或`Save` ```java Complex fulcrumPoint = Complex.FromRealNumer(23.0); ``` 通常好于 ```java Complex fulcrumPoint = new Complex(23.0); ``` ### 10. 别扮可爱 不要使用俗语或俚语。 ### 11. 每个概念对应有一个词 每个抽象概念选一个词,并且一以贯之。 > Bad `fetch`、`retrieve`和`get`来给在多类中的获取数据命名,不易记忆。 一堆`controller`中又有`manager`还有`driver`,就会令人困惑。 ### 12. 别用双关语 ### 13. 使用解决方案领域名称 使用CS术语、算法名、模式名、数学术语等等 ### 14. 使用源自所涉问题领域的名称 ### 15. 添加有意义的语境 > Bad ```java private void printGuessStatistics(char candidate, int count) { Stirng 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.toStirng(count); verb = "are"; pluralModifier = "s"; } String guessMessage = String.format( "There %s %s %s%", verb, number, candidate, pluralModifier ); print(guessMessage); } ``` > Good ```java public class GuessStatisticsMessage { private String number; private String verb; private String pluraModifier; public String make(char candidate, int count) { createPluralDepentMessageParts(count); return String.format( "There %s %s %s%s", verb, number, candidate, pluraModifier ); } private void createPluralDepentMessageParts(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"; pluraModifier = "s"; } private void thereIsOneLetter() { number = "1"; verb = "is"; pluraModifier = ""; } private void thereAreNoLetters() { number = "no"; verb = "are"; pluraModifier = "s"; } } ``` ### 16. 不要添加没用的语境 # 函数 - 短小 20行封顶最佳 - 只做一件事