• 变量及函数命名经验


    前言

    对于实际上手写代码的各位程序员而言,一个好的变量和函数命名标准是必不可少的,但现实情况是没有一种命名标准可以获得所有程序员的赞同。也正因如此,不同的人根据自身经验的不同会有自己独特的命名风格。

    虽然没有具体通用的命名标准,但却有一些共性规则是获得大部分人认可的。下文会介绍本人长期总结的一些变量及函数命名的共性规则、并附带本人自身的命名风格(个人习惯)。

    此文的编程语言以Python为例(可以少打很多变量类型,手动滑稽),也适用于C/C++、C#、Java、JavaScript、等其它编程语言。

    此文适合没有自己独特命名风格的新手程序员阅读,当然,拥有独特命名风格的程序员也可以阅读进行借鉴,同时也希望各位可以给予一些可靠的建议。

    共性规则

    直观易解读

    命名最好采用英文单词及其组合,便于记忆和阅读。切忌使用汉语拼音来命名。
    命名的用词应当准确,英文单词不要太偏僻,组合不要太复杂。

    示例:

    # 正确示例
    maxValue
    minValue
    
    # 错误示例
    qiCheShuLiang  # 汉语拼音,应改为carNum
    preeminentAlgorithm  # 单词偏僻,应改为goodMethod
    carRunWheelStaticFrictionForce  # 组合复杂,应改为carSFriction或carSFrn,并添加适当的注释
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    单词简写

    命名时,若组合名过长,则其中的英文单词可以简写,并适当添加注释。

    示例:

    # Number简写为Num
    # Value简写为Val
    
    carNum
    maxVal
    carSFrn  # 简写过多,含义不直观,需要添加注释,汽车轮子的静摩擦力
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    长度适中

    命名长度应当符合min_length && max_information原则,即更短的长度且包含更多的信息。

    一般来说,长名字能更好地表达含义,所以命名长达十几个字符不足为怪。但命名并不是越长越好,因为不好理解,例如变量名maxVal就比maxValueUntilOverflow要好得多。单字符的命名也很常见,例如i, j, k, m, n, x, y, z等,它们通常可用作循环便利或函数内的局部变量。

    若名字过长,可适当缩减,解决方案有2个,第1个是挑选关键词,第2个便是上文提到的单词简写。

    驼峰命名

    驼峰命名指每个单词遵循驼峰大小写规律,开头单词首字母小写,后续单词的首字母大写,用来区分不同的单词。

    示例:

    maxValue
    roomDeskNum
    
    • 1
    • 2

    下划线命名

    下划线命名是不同于驼峰命名的方法,每个单词之间由下划线连接,通常用于所以字母都是小写或都是大写的情况。推荐C/C++的常量都用大写字母。

    同理,可以用连词符代替下划线,即连词符命名,效果和下划线命名类似。

    推荐使用下划线命名,因为连词符有时会因此含义冲突,从而大部分人喜欢使用下划线命名。

    示例:

    # 下划线命名(推荐)
    first_name
    MAX_VALUE
    
    # 连词符命名
    first-name
    MAX-VALUE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    配对命名

    用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

    示例:

    # 变量
    minValue
    maxValue
    # 函数
    SetValue()
    GetValue()           
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    避免仅靠大小写区分的标识符

    错误示例:

    # 变量x与X容易混淆
    x = 5
    X = 10
    # 函数get与GET容易混淆
    def get(x):
    def GET(x):
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    避免完全相同的标识符

    程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。

    尽量避免命名出现数字编号

    尽量避免命名出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这样可以使代码逻辑提升,避免混乱。同时也是为了防止程序员偷懒,不肯为命名动脑筋(因为用数字编号最省事)。

    防止冲突

    为了防止自己编写的库中的一些标识符和其它软件库有冲突,可以为各标识符加上能反映库性质的前缀。

    示例:
    OpenGL中所有库函数均以gl开头,所有常量(或宏定义)均以GL开头。
    OpenCV中所有的库函数均以cv开头。

    风格保持一致

    同一项目的所有脚本应当保持一致的风格,方便后续解读和修改。

    个人习惯

    添加注释

    命名含义不直观或有混淆时,需要添加注释。
    一般在定义变量时进行注释。使用过程中,重要位置或混淆位置也可适当添加注释。

    示例:

    maxValue  # 最大值
    minValue  # 最小值
    
    • 1
    • 2

    变量和函数

    方案1(推荐):变量名和函数名都遵循驼峰命名
    这样命名比较统一。变量名的前缀为名词,函数名的前缀为动词,这样可以让变量和函数区分开来。

    但不绝对,转换类函数的前缀可以为名词,如xml2json(),同时也可以不遵循驼峰命名,因为2个单词被2(To)隔开了。

    方案2:变量名和函数名都遵循下划线命名
    这样命名也比较统一。Python代码推荐此种方式命名变量和函数,因为Python代码会提示变量名和函数名使用小写字母。

    方案3:变量名遵循驼峰命名,函数名遵循下划线命名
    这样命名不统一,但较好区别变量和函数。

    总结
    区别变量和函数可以通过括号判断,后面没有括号的是变量,有括号的是函数,这样既方便又准确,因此没必要仅通过名字区分变量和函数,所以使用上述几种方案均可,都不会影响到变量和函数的区分。Python推荐下划线命名法。

    示例:

    # 变量
    carNum
    # 函数
    getCarNum()
    xml2json()  # 转换类函数的前缀可以是名词,
    
    • 1
    • 2
    • 3
    • 4
    • 5

    文件和文件夹命名

    文件和文件夹命名推荐使用下划线+小写字母命名法,每个单词之间由下划线连接,所有单词都是小写字母。值得一提的是文件夹名称一般由1个单词组成,若需细分可以创建子文件夹,若文件夹名称由多个单词组成,可使用下划线命名法。

    补充:若不喜欢使用下划线命名法,也可使用连词符命名法,效果和下划线类似。

    示例:

    /img/icon  # 子文件夹
    /img_icon  # 下划线文件夹
    create_list.py  # 脚本文件
    car_new.jpg  # 图像文件
    
    • 1
    • 2
    • 3
    • 4

    类名与成员

    (此处以C++为例)

    类名首字母大写+驼峰命名,变量和函数首字母小写+驼峰命名。对于成员数据和成员函数,首字母小写+驼峰命名。若函数名的单词数量较多,也可以使用小字母+下划线命名法。

    示例1:

    // 类名
    class Node;
    class LeafNode;
    
    • 1
    • 2
    • 3

    示例2:

    // 类名
    class Point
    {
    private:
    	// 成员数据
    	int xPos;
    	int yPos;
    
    public:
    	// 成员函数
        void setPoint(int x, int y)
        {
            xPos = x;
            yPos = y;
        }
        void printPoint()
        {
            cout<< "x = " << xPos << endl;
            cout<< "y = " << yPos << endl;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    特殊变量

    常量
    常量全用大写的字母,用下划线分割单词。

    示例:

    const int MAX = 100;
    const int MAX_LENGTH = 100;
    
    • 1
    • 2

    静态变量
    静态变量加前缀s_(表示static)。

    示例:

    void Init(){
    	static int s_initValue; // 静态变量
    	}
    
    • 1
    • 2
    • 3

    全局变量
    如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。

    示例:

    // 全局变量
    int g_peopleNum;
    int g_carNum;
    
    • 1
    • 2
    • 3
  • 相关阅读:
    基于 Gin 的 HTTP 代理 demo
    《闲着刷题》(1)--牛客python入门题
    SpringMVC执行流程
    【面试题 - spring】二
    【安装教程】vscode安装教程(超详细)
    服务器防漏扫,主机加固方案来解决
    智能手机主动安全防护系统设计与实现
    JavaScript基础07——变量拓展-数组
    DeepMind 推出 OPRO 技术,可用于优化 ChatGPT 提示
    spring的学习【1】
  • 原文地址:https://blog.csdn.net/NSJim/article/details/125029064