造梦西游3代码怎么用 代码怎么用

在软件中随处可见命名:要给变量、函数、参数、类和封包命名,还要给源代码及源代码所在目录命名,甚至还有jar文件、war文件和ear文件命名 。
但是,看似简单的命名,也是让不少程序员头疼的问题 。有一些小伙伴,在进行变量命名的时候,对于自己熟悉的英文,可能还会用英文命名一下,如果需要命名的部分不会用英文表达,或许就直接用拼音了 。
有的童鞋一下想不起来怎么命名,直接用拼音直接用aa,bb等这样没有任何代表意义的字母来命名,可读性非常差,可能自己今天写的,一个星期后回来再看,也忘记其具体代表的含义了 。
因此,许多人在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在C++、Java、Python等主流语言上切换的强迫症来说,换个语言换种命名风格简直不要太混乱 。

造梦西游3代码怎么用  代码怎么用

文章插图

既然有这么多命名要做,不妨做好它 。本期内容中,异步君为大家带来了起个好名字应遵从的几条简单规则,一起来看看吧
— 01 —
名副其实
名副其实说起来简单 。我们想要强调,这事很严肃 。选个好名字要花时间,但省下来的时间比花掉的多 。注意命名,而且一旦发现有更好的名称,就换掉旧的 。这么做,读你代码的人(包括你自己)都会更开心 。
变量、函数或类的名称应该已经答复了所有的大问题 。它该告诉你,它为什么会存在,它做什么事,应该怎么用 。如果名称需要注释来补充,那就不算是名副其实 。
int d;// elapsed time in days
名称d什么也没说明 。它没有引起读者对时间消逝的感觉,更别说以日计了 。我们应该选择指明了计量对象和计量单位的名称:
int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;
选择体现本意的名称能让人更容易理解和修改代码 。下列代码的目的何在?
public List<int[]> getThem() {List<int[]> list1 = new ArrayList<int[]>();for (int[] x : theList)if (x[0] == 4)list1.add(x);return list1;}
为什么难以说明上述代码要做什么事?里面并没有复杂的表达式,空格和缩进中规中矩,只用到三个变量和两个常量,甚至没有涉及任何其他类或多态 ***,只是(或者看起来是)一个数组的列表而已 。
问题不在于代码的简洁度,而在于代码的模糊度:即上下文在代码中未被明确体现的程度 。上述代码要求我们了解类似以下问题的答案:
(1)theList中是什么类型的东西?
(2)theList零下标条目的意义是什么?
(3)值4的意义是什么?
(4)我怎么使用返回的列表?
问题的答案没体现在代码段中,可代码段就是它们该在的地方 。比方说,我们在开发一种扫雷游戏,我们发现,盘面是名为theList的单元格列表,那就将其名称改为gameBoard 。
盘面上每个单元格都用一个简单数组表示 。我们还发现,零下标条目是一种状态值,而该种状态值为4表示“已标记” 。只要改为有意义的名称,代码就会得到相当程度的改进:
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数组表示单元格,而是另写一个类 。该类包括一个名副其实的函数(称为isFlagged),从而掩盖住那个魔术数[1] 。于是得到函数的新版本:
public List<Cell> getFlaggedCells(){List<Cell> flaggedCells = new ArrayList<Cell>();for (Cell cell : gameBoard)if (cell.isFlagged())flaggedCells.add(cell);return flaggedCells;}
只要简单改一下名称,就能轻易知道发生了什么 。这就是选用好名称的力量 。
— 02 —
避免误导
程序员必须避免留下掩藏代码本意的错误线索 。应当避免使用与本意相悖的词,例如,hp、aix和sco都不该用作变量名,因为它们都是Unix平台或类Unix平台的专有名称 。即便你是在编写三角计算程序,hp看起来是一个不错的缩写[2],但那也可能会提供错误信息 。
别用accountList来指称一组账号,除非它真的是List类型 。List一词对程序员有特殊意义 。如果包纳账号的容器并非真是一个List,就会引起错误的判断 。
所以,用accountGroup或bunchOfAccounts,甚至直接用accounts都会好一些 。

推荐阅读