首页 程序笔记 怎样的变量命名,才显得有文化?

怎样的变量命名,才显得有文化?

相信不少程序员都为变量命名这个问题伤透了脑筋。变量名太短了别人看不懂,太长了又显得啰嗦,不长不短又考验词汇量,一不留神就跟已有变量名重复。取得一手好名字确实是一个挑战,也是一门艺术。今天我们就来聊聊,到底要怎样命名,才能显示出水平?

不同的编程语言有不同的具体命名规范,通常包含在语言的风格指南里。本文不打算讨论各种语言的代码风格问题,只讨论跟具体语言无关的命名准则。

为什么需要命名规范

从本质上来说,变量名只是个标识符,用于表示内存中的一个地址或者数据。按理说只要符合编程语言的语法规则,无论怎么命名都不会影响代码的执行结果。那为什么我们还要强调命名规范呢?记得有人说过,代码首先是给人看的,其次才是计算机。代码在执行前,通常要经过作者深思熟虑的编写,甚至同行评审(code review)过后,确保没有明显的问题才会交给计算机执行。计算机只负责编译执行,才不管你的代码写得好不好看,有没有逻辑问题,扩展性如何等等。从这个角度说,良好的命名规范可以提高代码质量,减少软件缺陷。

良好的命名具有自文档的作用,看变量名就知道代表什么含义。无论对于团队成员协作还是自己维护代码,都很有意义。否则就会出现下面这种尴尬的局面:

什么是好的命名

在生活中,漂亮的人名让人赏心悦目,还有着丰富的含义,让人印象深刻。虽然说给变量命名不需要这么高的文学水准,但是也要具备一些基本的要素。个人认为,好的变量名通常具备以下几个特点。

  • 符合代码风格
    比如大小写要求,使用特定的字符表示特殊的含义,等等。这些按照特定语言的规范和团队规范来就行了。

  • 长短适中
    变量名不宜过短,也不宜过长。早些年编辑器不够发达,为了少打几个字母,能省则省,变量名往往很简短,喜欢用各种缩写。要是使用约定俗成的缩写还好,最怕那些用拼音首字母缩写的,看代码就像猜谜语。现在 IDE 如此强大,自动补全功能已经很完善了,完全没必要为了省那几个字母让其他人看得一头雾水。当然,也不是说越长越好,比如

function iCanNotReadTheNumberSoIWriteThisFunctionToTransformStringsToNumber() {}

这有点夸张了。记住一个原则:在足够表达含义的前提下尽量简短。

  • 有意义的单词
    变量名最好是一个有意义的单词,用来表示特定的含义,比如动作、属性、数据等。当然,这也不是绝对的。比如在for循环里用的i变量,已经约定俗成了,属于作用域范围很小的局部变量,用完即丢。这种情况可以使用简洁的命名。

  • 有具体的含义
    除了要有意义,还需要含义尽量具体。比如dataitemlist等,虽然也能用,但是含义太泛了,不够具体。更好的名字是userProfileorderItembookList等,一眼就能看出所代表的业务模型。

  • 词性准确
    属性、方法、类等命名所采用的词性也有讲究。方法(函数)通常代表了一个动作或者状态判断,所以应该用动词、系表结构、介词短语或者动宾结构。比如renderisPrototypeOftoStringgetOrders等。说到这里可能有人觉得有点装X了,是不是要把英语老师请过来?其实也不必过分解读,只要记住一个原则就行了,那就是方法代表了一个操作。这样你就不会用一个名词当做方法名。属性名通常使用名词,形容词,动词过去式等。类名基本用名词,代表了一种业务模型。

  • 纯英文
    这点没办法,谁让发明编程的人是说英语的呢。虽然从编程语法上来说,有时候也能用非英文做标识符,但是最好尽量避免这种不伦不类的做法。比如有人喜欢用拼音,甚至拼音和英语混着用。个别情况下可以用拼音,那是实在找不到对应的英文单词了。大部分情况下,用纯英文单词显得比较专业,以及,比较有文化(逼格)。还有就是,不要用中式英语!我见过太多的isModifyisDelete这种表达方式了,看得我尴尬癌都犯了。这种写法,内部几个人的项目也就罢了,如果是开源项目,拿出去都丢人啊!

以我多年的搬砖经验,见过一些在命名方面比较讲究的框架和库,比如微软的 .Net Framework,C# 的命名,用词准确、精炼,看起来就很舒服。还有就是 Vue.js,API 命名也相当优雅。那几个钩子函数,createdmounteddestroyedactivatederrorCaptured等等,简洁而不失准确,词义相当到位。而相比之下,React 就稍差了。什么componentDidMountcomponentWillMountshouldComponentUpdate……这一看就没什么文化嘛,表义有余而精炼不足。

保命环节

好了,装X到此结束。以上纯属个人观点,请各位看官酌情而喷。本文只是从编码规范方面谈谈自己的看法,不涉及任何技术层面的东西。有人会说,真正的高手还在乎这些吗?操起键盘就是干,完成需求就好了,代码写那么漂亮有什么用?

有些人觉得代码写得越晦涩难懂,越能显示出水平。对此我只能说,打扰了!个人认为,只要代码还需要人阅读(哪怕只有自己一个人),就应该对可读性有点追求,把代码当成一件艺术品来看待。

其实看到这里,很多人心里有点犯难了。上面说得是有点道理,可是我英语很菜,词汇量完全不够用啊,怎么办?此处应该有英语培训广告……(金主记得来找我)

别害怕,编程都能学会,还怕几个英语单词?词汇量不够,不是有有道词典吗?再不济用百度也行吧。总之,英语不好不能拿来当借口哟。

4

站心网

相信不少程序员都为变量命名这个问题伤透了脑筋。变量名太短了别人看不懂,太长了又显得啰嗦,不长不短又考..

为您推荐

2025年做网站还能赚钱吗?

在2025年,互联网的格局虽然不断演变,但建立网站仍然蕴藏着赚钱的潜力。关键在于如何巧妙地定位,以及如何充分利用最新的技术和趋势。首先,我们需要明确网站的类型和盈利模式。内容型网站,如果运营者擅长某一领域..

DISC测试,让你轻松读懂领导

我们常说“性格决定命运”,企业家的性格决定着企业的命运,而身处企业中的我们,如何和不同性格的老板相处,则直接关系到我们的职场命运。企业家作为掌舵者,他的行为自然决定了整条大船如何行进。行为来自于习惯,..

一个简单的大转盘抽奖程序(附.NetCore Demo源码)

最近闲下来在做一些demo,现在讲一下做的一个简单的大转盘抽奖demo,前端lottery,layui,后端.net core,sqlsugar,数据库用的mysql1.前端实现:前端用的是基于开源的lottery,其中有些改动的,使得前端可以自适应pc端..

网站统计中的访问信息收集的前端实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascri..

EntityFramework(EF) 控制并发和事务防止超卖

在使用 Entity Framework (EF) 时,实现加减库存并避免超卖的关键是正确地控制并发和事务。以下是实现方法:解决超卖的关键点事务管理:使用事务确保加减库存和库存校验是一个原子操作。悲观锁:通过数据库层面的锁..

使用SuperWebSocket实现Web消息推送

在大部分Web系统中,我们可能遇到需要向客户端推送消息的需求。SuperWebSocket第三方库能让我们轻松的完成任务。SuperWebSocket第三方库可以从网上下载,不过通过Visual Studio Nuget安装更快。引用SuperWebSocket相..

MySQL查看、修改字符集及Collation

前言在使用MySQL的过程中,可能会出现初始设计使用的字符集或Collation不符合当前需求的情况。如使用utf8的表(MySQL中的utf8即utf8mb3)要支持emoji,而utf8mb3不支持emoji(emoji需要4个字节,而utf8mb3最长只支持..

2025年编程语言需求排行榜

随着技术的不断进步和市场需求的变化,2025年,哪些编程语言将成为企业的首选?在全球,由于技术短缺、人口变化以及对新技能的需求,编程语言的选择和需求也在迅速变化。本文将为您揭示未来最受企业青睐的编程语言,..

.NET C# 使用Hook钩子实现全局监听键盘和鼠标

C# 是一种面向对象的编程语言,具有丰富的类库和工具支持,适用于各种类型的应用程序开发。Windows 提供了一种称为"钩子"(Hook)的机制,允许拦截并处理系统级别的事件,如键盘按键和鼠标移动。通过结合 C# 和 Hook..

帝国CMS8.0即将发布2025年1月18号闪亮登场

一、新增支持PostgreSQL数据库和国产数据库:(支持国产数据库如:国产华为高斯(openGauss)、国产金仓数据库(kingbase)等)1、为了适配其它数据库,所有数据表查询限制数量单独函数返回,并保存在各数据库操作类文件里..

ABP.Net Core使用教程(一)启动模版项目

只需要简单的3步:1,到官网下载模版项目 https://aspnetboilerplate.com/Templates2,用VS2017打开,将Web.Host设置为启动项3,在程序包管理器控制台(Nuget控制台)里设定默认项目为EntityFrameworkCore,执行命令..

.net 通过 HttpClient 下载文件同时报告进度的方法

通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度看起来很简单,于是直接给代码private static async Task ..

C#中的线程安全的集合ConcurrentQueue使用示例

在多线程编程中,如何安全地在不同线程之间共享数据是一个非常重要的问题。C# 为我们提供了一些专门设计的线程安全集合,其中之一就是 ConcurrentQueue<T>。它是一种先进先出(FIFO)的数据结构,专门为多线程环境设..

GreenSock: 高性能的 HTML5 动画库

在现代网页开发中,动画已经成为提升用户体验的关键元素。无论是滚动效果、页面切换、按钮点击还是复杂的交互动画,良好的动画效果不仅能吸引用户,还能使界面更加生动、易用。GreenSock(GSAP,GreenSock Animation..

mysql随机获取一条或者多条数据

语句一:select * from users order by rand() LIMIT 1MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切..

CPU、GPU 和 TPU 之间有什么区别?

什么是 CPU、GPU 和 TPU?它们都是用于计算任务的处理器芯片。可以把你的大脑想象成一台计算机,能够完成诸如阅读书籍或解决数学问题的任务。每一项活动都类似于一个计算任务。例如,当你用手机拍照、发送短信或打开..

从程序媛角度去看项目管理

需求管理下图描述的是程序员从接到需求到开发环节的过程:一般我们首先会收到产品的PRD或交互稿,被询问今天什么时间点是否有空,进行需求评审。时光匆匆,回想起刚毕业那时,我望着冗长的PRD,直接跳过背景、目的等..

冒泡排序和选择排序对比

1、冒泡排序:冒泡排序这种方法的基本思想是,将待排序(未排序序列)的记录看作是竖着排列的“气泡”,键值较小(数值较大)的记录比较轻,从而要往上浮。在冒泡排序算法中要对这个“气泡”序列处理若干遍。所谓一..

鸿蒙系统HarmonyOS支持Docker吗?

华为鸿蒙系统(HarmonyOS)本身并不是直接为容器化设计的操作系统,因此在原生支持上并没有内置对 Docker 的直接支持。不过,可以通过以下方式实现某些 Docker 的功能:1. 鸿蒙系统的定位鸿蒙系统主要针对 IoT(物联..

5个高性能 .NET Core 图片处理库推荐

在使用 .NET Core 开发中,图片处理是一个常见需求,如图像缩放、裁剪、格式转换和添加水印等。以下是一些推荐的 .NET Core 图片处理库,它们功能强大且支持多种图像处理功能:1. ImageSharp简介:ImageSharp 是一个..

发表回复

返回顶部