现在的位置: 首页 > 综合 > 正文

编程中使用的命名习惯

2013年10月02日 ⁄ 综合 ⁄ 共 2792字 ⁄ 字号 评论关闭

    名字非常重要,看到名字就知其人,所以在编程中使用简单易懂的名字来命名也是非常重要的事。记得当初编写小程序的时候并不十分重视变量、函数等的名字,也并没有统一以便形成自己的习惯,这个习惯其实需要遵循大家都熟悉的命名规则,不然降低阅读性的同时也能反映出你这个人的水平。所以那就从现在开始,养成好的命名习惯吧。

    查了一下网上关于命名的一些大致相一致的命名规则,想想确实应该这样,那么自己也要遵循这些规则,改变一下。

 一些规则还是要知道的,如下:
  【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。
   标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。
  【规则3-1-2】标识符的长度应当符合“min-length && max-information”原则。
  一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么 名字是否越长约好?不见得! 例如变量名maxval就比maxValueUntilOverflow好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们 通常可用作函数内的局部变量。
  【规则3-1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。
例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。
  【规则3-1-4】程序中不要出现仅靠大小写区分的相似的标识符。
例如: int x, X; // 变量x 与 X 容易混淆
             void foo(int x); 
             void FOO(float x);// 函数foo 与FOO 容易混淆
  【规则3-1-5】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。
  【规则3-1-6】变量的名字应当使用“名词”或者“形容词+名词”。
例如:  float  value;
              float  oldValue;
              float  newValue;
  【规则3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。
例如:  DrawBox(); // 全局函数
              box->Draw(); // 类的成员函数
 【规则3-1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
例如:  int  minValue;
              int  maxValue;
              int  SetValue(…);
              int  GetValue(…);
 【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。

    有个叫匈牙利命名法的,其原则是:变量名=属性+类型+对象描述,也就是加一些“有意义”的前缀,通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。我去,这个有点复杂了吧,感觉不到简单易懂的初衷了。所以真正用的时候还是当个选择,比如,在linux系统中搞这不是很纠结的吗,但是不得不说有些还是很有好处的。比如下面的:

    故,对于变量来说,有选择的采用此方法。当然对于像循环变量这样的局部变量来说还是i,j,k 吧。

总结:
 1. 变量
   要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。使用"名词"或者"形容词+名词"的形式。例如:"nCode", "m_nState","nMaxWidth"等。当然直接来个英文单词也成的。如:BOOL flag; 
 上面列举了类型前缀,还有作用域前缀,这个要记着,如:
    ① 全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount, 即: 变量名=g_+变量类型+变量的英文意思(或缩写)    
    ② 静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst, 即: 变量名=s_+变量类型+变量的英文意思(或缩写)  
    ③ 成员变量用m_开头,如一个长型成员变量定义为m_lCount;  即:变量名=m_+变量类型+变量的英文意思(或缩写)    
    ④ 对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。    
    如:enum    Enum_DAYS    {    
               EMDAYS_MONDAY;    
               EMDAYS_TUESDAY;    
                ……    
           };    
    ⑤ 对struct、union、class变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。  结构名一般用S开头    
    如:struct    Struct_NPoint     {    
                int    nX;    //点的X位置    
                int    nY;    //点的Y位置    
           };    

2. 常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。    
    如:#define    MAX_BUFFER     1024        
    而对const 修饰的变量要求使用"名词"或者"形容词+名词"的形式,全部大写。  
例如:  const int     BUF_SIZE = 512; 

3.  联合    
如:   typedef  union _VARIANT  {
                char unichVal;
                int uninVal;
                float uniftVal;
           } VARIANT;

4. 类名和函数名用大写字母开头的单词组合而成。 
例如:  class Node;     // 类名 
              class LeafNode;    // 类名 
              void  Draw(void);      // 函数名 
              void  SetValue(int value); // 函数名

5. 类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与成员函数的参数同名。 
例如: void Object::SetValue(int width, int height) 
             { 
                 m_width = width; 
                 m_height = height; 
            } 


抱歉!评论已关闭.