程序中的那些命名

其实无论你用什么语言来编程,都面临一个很现实的问题:命名。编程就像写小说,创造的是一个逻辑的世界,这个世界是由概念,规则,概念之间的相互作用来实现软件所定义的功能。要说写小说,关键的是那些名字,比如“东方不败”,“李莫愁”,“田伯光”,这些名字不是随便起来的,而是和这个世界有着深刻的联系。

其实理论上讲,一个程序可以完全由无现实意义的abcd或者甲乙丙丁编写,因为一个程序实际的功能,是由实体的类型和它们之间的关系来保证的(这里就不论证了,呵呵)。但是,正如某大师所说,程序主要是给人看的,是和人交流的,只是偶尔需要编译和运行。而人的思维对现实的实体的理解最为深刻,因此如果能借助现实来理解程序,那么显然会降低思维成本。这就是用正确的概念思考的意义。

言归正传,怎么起名呢?这或许有点见仁见智,但一些原则还是可以遵循的:

  1. 比喻。计算机里大量的比喻,比如“菜单”,“文件”,“文档”。如果一个计算机实体还没有对应的名词,还可以用一些比喻的手法:比如时钟:clock,锁:lock,池:pool,令牌:token,页:page。
  2. 多用物理(具体)含义而非容器名称,比如一句话叫做sentence而不是string;visitor而不是info;一行属性attributes而不是list。
  3. 用一个具体的名字/引用来指代容器中的某个元素:比如const std::string& userid = attributes[0];
  4. 成员变量名字长些,局部变量名字短些。因为成员变量的名字不能重复,而且使用率低;而局部变量使用频率高。
  5. 努力起名字而不是叫tmp或tmplist或tmpXXX,这就像呵呵,很伤人的。
  6. 概念的粒度要合适,太小了盖不住,会引起文不对题;太大了不具体,信息量低。比如用name就比较user具体而准确些。
  7. 除脚标可以用ijk之外,别的变量不应使用它们;ijk是脚标专享的。
  8. 同一个概念在程序不同的位置的名称不应有显著变化。
  9. 用复数来代表放在容器里的某一类元素。比如std::vector<std::string> users; 
  10. 名字尽可能简洁,尽量省去本来就没有歧义的修饰符。比如当前论域如果只是application,那么就叫name,而不是applicationName。
  11. 名字最好能有幽默感,比如别人叫more,你叫less。别人叫copyright,你叫copyleft。
  12. 如果发现没法命名了,可能你的程序scope太大了,结构化一下?

起名字是程序员的基本修养,在实战中多积累,多挑战自己,锻炼自己。

从一个程序员的命名中,可以看出他的性情。

原文地址:https://www.cnblogs.com/bqzhao/p/3534733.html