匈牙利命名法和驼峰命名法好处

关于变量的命名,这又是一个容易引发程序员论战的话题。如何命名才能更具有可读性、易写性与明义性呢?众说纷纭。

本期“Python为什么”栏目,我们将聚焦于变量命名中的连接方式,来切入这块是非之地,想要回答的问题是——Python 为什么要推荐蛇形命名法?

首先一点,对于单个字符或者单词(例如:a、A、PYTHON、Cat),当它们被用作变量名时,大致有全小写、全大写和首字母大写这几种情况。编程语言中出现这些情况时,它们基本上跟英语的表达习惯是相同的。

但是,编程语言为了令变量名表达出更丰富的含义,通常需要使用多个单词或符号。英语习惯使用空格来间隔开单词,然而这种用法在编程语言中会带来一些麻烦,所以程序员们就创造出了另外的方法:

  • 蛇形命名法(snake case)
  • 驼峰命名法(camel case)
  • 匈牙利命名法(HN case)
  • 帕斯卡命名法(Pascal case)
  • 脊柱命名法(spinal case)
  • 自由命名法(studly caps)
  • 驼峰蛇形命名法

总体而言,这些命名法都是要克服单词间的空格,从而把不同单词串连起来,最终达到创造出一种新的“单词”的效果。

我画了一张思维导图,大略区分了这几种命名法:

匈牙利命名法和驼峰命名法好处

如果按照受众量与知名程度排名,毫无疑问排前两位的是驼峰命名法和蛇形命名法。

我们可以简单比较一下它们的优缺点:

  • 可读性:蛇形命名法用下划线拉大词距,更清楚易读;驼峰命名法的变量名紧凑,节省行宽
  • 易写性:驼峰命名法以大小写为区分,不引入额外的标识符;蛇形命名法统一小写,输入相对方便
  • 明义性:对于某些缩写成的专有名词,例如 HTTP、RGB、DNS等等,一般习惯全用大写表示,但是如果严格遵循这两种命名法的话,须得只留首字母大写或者全小写,这样对原意都会造成一些“破坏”,有时候甚至让人感觉到别扭。如果保留全大写,IDE 可能识别不准,反而会出现波浪提示

由此可见,它们各有优缺点,但哪一方都不具有压倒性。我个人稍微偏好于蛇形命名法,但是在需要用驼峰命名的时候(比如写 Java 时),也能无障碍切换。

需要指出的是,Python 也推荐使用驼峰式命名,那是在类名、Type 变量、异常 exception 名这些情况。而在包名、模块名、方法名和普通变量名等情况,则是推荐用蛇形命名(lower_case_with_underscores)。

那么,为什么 Python 会推荐用蛇形命名法呢?

最大的原因是历史原因。蛇形命名方式起源于 1960 年代,那时它甚至还没有特定的名称。Python 从 C 语言中借鉴过来后,给它起名为“lower_case_with_underscores”,即带下划线的小写命名。

直到 21 世纪初的几年,在 Intel 和 Ruby 社区中,才有人开始以“snake_case”即蛇形命名来称呼它。

现今有不少编程语言在某些场景下会推荐使用蛇形命名法,而 Python 则是其中最早这么做的之一,并且是使用场景最多的语言之一。

维基百科上统计了一份清单,可以看出 Python 对它的偏好:

匈牙利命名法和驼峰命名法好处

其次,还有一个比较重要的原因,那就是 Python 对下划线“_”的独特偏爱。

比如类似于 _xx、__xx、xx_、__xx__ 等等的写法就随处可见,甚至还有孤零零一个下划线 _ 作为变量的特殊情况。这样看来,下划线作为单词间的连接,恰恰是这种传统习惯的一部分。

最后,我还看到过一种解释:因为 Python 是蟒蛇啊,理所当然是用蛇形命名……

对于这三个解释,你们是如何感想的呢?对于蛇形命名法,大家是喜欢还是不喜欢呢?欢迎留言交流。

写在最后:本文属于“Python为什么”系列(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python 的迷人魅力。部分话题会推出视频版,请在 B 站收看,观看地址:https://space.bilibili.com/97566624/video

匈牙利命名法和驼峰命名法好处

公众号【Python猫】, 本号连载优质的系列文章,有Python为什么系列、喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写作、优质英文推荐与翻译等等,欢迎关注哦。

本文【匈牙利命名法和驼峰命名法好处】由作者: 自旋锁 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4555.html

(0)
上一篇 2023-03-15 08:53:10
下一篇 2023-03-15 09:02:47

相关推荐

  • mysql存储过程游标的使用_mysql声明游标语句

    从0开始教学如何写好MySQL8的存储过程,以及一些最佳实践和注意事项。 创建存储过程 使用CREATE PROCEDURE语句创建存储过程。该语句包括存储过程名称、参数(如果有)、以及存储过程主体(即存储过程代码块)。 示例: CREATE PROCEDURE procedure_name (IN parameter1 datatype1, IN para…

    2023-03-11
    400
  • scanf函数的用法及注意事项

    1. scanf函数的一般形式: scanf(格式控制,地址表列): “格式控制”的含义同printf函数。“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。 2. scanf函数中的格式声明 与printf函数中的格式声明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。 例3.5中的scanf函数是比较简单的。可以把sc…

    2023-03-08
    800
  • java定时器cron表达式自己生成,java定时器表达式

    Quartz Cron表达式主要用于JAVA Spring定时任务中,用法如下: # 每月的最后1天 @Scheduled(cron = “0 0 18 28–31 * ?”) public void doAtLastDayOfMonth() { final Calendar calendar = Calendar.getInstan…

    2023-03-19
    000
  • php用什么打开 php在哪里运行

    在平时我们可能会碰到过php文件,可是很多用户不知道php文件是什么文件?也不知道怎么打开php文件?为了满足一些用户的好奇心,小编现在就给大家讲解php文件以及如何打开php文件的方法。 1、PHP文件是什么? PHP(Hypertext Preprocessor)超文本预处理器,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,…

    2023-03-14
    300
  • ded包怎么安装 linux系统deb安装包如何安装

    dpkg全程为"Debian Package"。其是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包。 我们经常可以在网络上见到以deb形式打包的软件包,就需要使用dpkg命令来安装。如网易云音乐linux版,WPSlinux版等 dpkg常用参数介绍: 参数及其说明 -i    安装指定deb包 -…

    2023-03-20
    000
  • 数字信号处理PDF第五版 数字信号处理电子版

    时域离散信号 生活中常见的信号为模拟信号,模拟信号等间隔采样得到时域离散信号,时域离散信号便于计算机处理。 一、时域离散信号的三种表示方法 1、集合符号: 2、公式:例 3、图形:例 4、单位脉冲序列的位移加权和: 例: 二、常用典型序列 1、单位脉冲序列 2、单位阶跃信号 3、矩形序列 4、实指数序列 5、正弦序列 6、复指数序列 7、周期序列 注:N为最…

    2023-03-14
    200
  • tcp连接的建立需要经过几次握手

    作者:morganhuang,腾讯 IEG 后台开发工程师 说到 TCP 协议,相信大家都比较熟悉了,对于 TCP 协议总能说个一二三来,但是 TCP 协议又是一个非常复杂的协议,其中有不少细节点让人头疼点。本文就是来说说这些头疼点的,浅谈一些 TCP 的疑难杂症。那么从哪说起呢?当然是从三次握手和四次挥手说起啦,可能大家都知道 TCP 是三次交互完成连接的…

    2023-03-11
    700
  • matlab递归函数怎么写 编写一个递归函数

    前言 本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。 在开始之前还是简单介绍下本次更新的 GScript v0.0.9 所包含的内容: 支持可变参数 优化 append 函数语义 优化编译错误信息 最后一个就是支持递归调用 先看第一个可变参数: //forma…

    2023-03-14
    200
  • ps移花接木换脸教程 ps如何把稚嫩的脸变成熟的脸

    大家都说世间有了PS,从此再也无真相。 那今天菲菲我,就带领大家一起学习一下PS里面的换脸技术。 1.首先我们打开PS,打开我们今天需要的素材。 素材大家自己找也可以,PS换脸属于一个小型合成,所以找素材的时候大家记得角度要统一,不能一个正脸一个侧脸。 我们今天要做的是把憨豆先生的脸移花接木到本山大叔的脸上。 2.在左侧工具箱中找到套索工具,把憨豆先生的脸框…

    2023-03-16
    100
  • logistic回归or值的含义 logistic回归的结果解读

    影响关系研究是所有研究中最为常见的。我们都知道当Y是定量数据时,线性回归可以用来分析影响关系。如果现在想对某件事情发生的概率进行预估,比如一件衣服的是否有人想购买?这里的Y是“是否愿意购买”,属于分类数据,所以不能使用回归分析。 如果Y为定类数据,研究影响关系,正确做法是选择Logistic回归分析。 概念 Logistic回归分析也用于研究影响关系,即X对…

    2023-03-20
    000

发表回复

登录后才能评论
返回顶部
错说博客上线啦!