《Clean Code代码整洁之道》第二章 有意义的命名(上)

软件中随处可见命名 ,我们给变量、函数、参数、类和封包命名。我们给源代码及源代码所在的目录命名,既然有这么多命名要做,不妨做好它。
名副其实,选个好名字要花时间,但省下来的事件比花掉的多。
如果名称需要注释,那就不算是名副其实。
例如:
int d;//消逝的时间,以日计
名称d什么也没说明。我们应该选择指明了计量对象和计量单位的名称:
int elapsedTimeInDays;
int daySinceCreation;等等
还有一个问题是代码的模糊度:即上下文在代码中未被明确体现的程度。

避免误导

程序员必须避免留下掩藏代码本意的错误线索。应当避免使用与本意相悖的词。
例如:unix平台的专有名称:hp、aix和sco都不该用做变量名
提防使用不同之处较小的名称。例如: XYZControllerForEfficientHandlingOfString和另一处的XYZControllerForEfficientStorageOfStrings,区分这两个词需要花多久?这两个词外形实在太相似了
以同样的方式拼写出同样的概念才是信息。拼写前后不一致就是误导。
一个可怕的例子:用小写字母l和大写字母O作为变量名,尤其在组合使用的时候:
int a = l;
if(O==l)
a=Ol;
else
l=01;

做有意义的区分

如果程序员只是为满足编译器或解释器的需要而写代码,就会制造麻烦。
因为同一作用范围内两样不同的东西不能重名,你可能会随手改掉其中的一个名称,然后导致编译器出错。
以数字系列命名(a1、a2...aN)是依义命名的对立面。这样的名称纯属误导——完全没有提供正确的信息;没有提供导向作者意图的线索。
废话则是另一种含义的区分,就像 a、an、the一样 是意义含混的废话
不过,只要能体现出有意义的区分,使用a和the这样的前缀就没错。例如:你可能把a用在域内变量,而把the用于函数参数。但如果你已经有一个名为zork的变量,又想调用一个名为theZork的变量,麻烦就来了。
还有下面几个规则:

  • 使用读的出来的名称
  • 使用可搜索的名称
  • 避免使用编码
    单词和数字常量有个问题,就是很难在一大篇文字中找出,找一个比较长的单词容易,但是你找个数字7就很麻烦。

没有必要给变量前加前缀

人们经常会无视前缀,只看到名称中有意义的部分。

避免思维映射

不应当让读者在脑海中把你的名称翻译为他们熟知的名称,例如单字母变量名,在作用域较小、也没有名称冲突时,循环计数器自然有可能被命名为i或j或k(但千万别用字母l),这个是习惯上的用法。但是大多数情况下,这个不是个好选择,读者必须在脑中将它映射为真实概念。
聪明程序员和专业程序员之间的区别在于,专业程序员了解,明确是王道,专业程序员善用其能,编写其他人能理解的代码。
-41

你可能感兴趣的:(《Clean Code代码整洁之道》第二章 有意义的命名(上))