详解一些适用于Node.js的命名约定


Posted in Javascript onDecember 08, 2019

序言

There are only two hard things in Computer Science: cache invalidation and naming things.
-- Phil Karlton

我乔鲁诺·乔巴拿有一个梦想,便是要成为程序员巨星。但如果你看过我写的代码,便知道我还远远够不上“巨星”二字。我的代码中有许多不一致的命名:

  1. 常量的命名时而是全大写的(如WAIT_CONFIRM),时而是全小写的;
  2. 某个项目大部分命名用的是camel case(如TaskController),但由于数据库中的列名用了snake case(如context_id),导致项目中与数据库列有关的代码混用了camel case和snake case(如restricted_hours[new Date(timestamp * 1000).getHours()] = 1;);
  3. 同样是构造复杂对象的函数,它们的前缀可能会是build、create、make,甚至compute中的任何一个;
  4. 明明是一个数组,却用了单数的order作为变量名。

之所以如此混乱,正是因为我没有遵循一套一致的命名规则。每当我在一个项目中蹦出一些新想法时,便会跃跃欲试——不,我真的就用上了。我不曾整理过自己的命名规则(天哪我已经写了三年的JavaScript了),以至于无从判断“新想法”是否真的新——也许它是一个已经被我抛弃的规则。

为了不再深陷不一致命名的泥潭,我定下了本篇的命名规则,期望它们为以后的我指点迷津。

变量名

通用规则

  • 变量名使用camel case的命名风格。例如,使用namingConvention,而不是naming_convention;
  • 在尽量遵循规则的基础上随机应变。

变量名的单复数规则

  • 如果一个变量存储的值的类型为数组(即该变量作为Array.isArray方法的参数时结果为真),那么变量的名称就使用复数形式。例如,使用fruits = []而不是fruit = []。
  • 如果一个变量存储的值的类型为集合(即Set这个类型),那么变量的名称应当使用单词unique为前缀。例如,使用uniqueUserIds而不是userIdSet。

布尔变量的命名规则

如果一个变量的值的类型为boolean,那么变量的名称应当以下列单词为前缀:

  • is。当变量表达一个二元状态的时候,例如isFull、isEmpty。在is后面的应当是一个形容词;
  • has。当变量表达历史上是否发生过某个事件的时候,例如hasPaid、hasArrived。在has后面的应当是一个动词,并且采用过去分词;
  • can。当变量表达某种权限的时候,例如canWrite、canExecute。在can后面的应当是一个动词,并且采用现在分词。

数值变量的命名规则

  • 如果变量中存储的是一系列数字中的最大值,那么变量的名称应当以max为前缀,例如maxScore。如果是最小值,则是以min为前缀,例如minScore;
  • 如果变量中存储的是一系列数字的和,那么变量的名称应当以total为前缀,例如totalIncome;
  • 如果变量中存储的是数组的长度,那么变量的名称可以用numberOf为前缀,例如numberOfUsers。

字符串变量的命名规则

  • 如果表达的是人名、品牌名、公司名、数据库中的表名,那么变量的名称可以用单词name结尾,例如customerName、brandName、companyName;
  • 如果表达的是按键或按钮上刻着的文字、纸质表格或电子表单上输入框左侧的简短说明,那么变量的名称可以用单词label结尾,例如buttonLabel;
  • 不允许使用单词content

函数名

  • 函数的名称应当由动词和名词组成,例如readFile、writeFile;
  • 如果函数的功能是将参数转换为另一种形式的输出(比如进制转换、币种转换),那么函数的名称应当以单词to为前缀,例如toDollar、toHexadecimal;
  • 如果函数的功能是检验参数并返回一个布尔值,那么函数的名称应当以单词check为前缀,例如checkIsDirectory、checkIsExecutable;
  • 如果函数的功能是“计数”,那么函数的名称应当以单词count为前缀,并且其中被计数的对象应当为复数形式,例如countPaidOrders。

构造型函数的命名规则

  • 如果表达的是从无到有地创造一个对象,那么函数名可以用create作为前缀,例如createObject;
  • 如果表达的是将一些输入原封不动地放在一起(可能输入之间添加了其它东西)创造出一个对象,那么函数名可以用make作为前缀,例如makeFloor。进一步地,如果函数不改变输入的相对顺序,那么函数名可以用concat,例如concatString;
  • 如果函数会将根据输入创造出具有不止一个层级的对象,那么函数名可以用build作为前缀,例如buildBinarySearchTree。

修改型函数的命名规则

  • 如果函数负责更新数据库中的记录,那么函数名应当以单词update为前缀;
  • 如果函数修改的是一些可枚举的状态,那么函数名应当以单词change为前缀。

类名

  • 类的名称应当采用capital case的命名风格,例如DatabaseConnection;
  • 类的名称应当以一个名词结尾;
  • 如果类的存在是为了使用某种设计模式,那么类名应当可以反映在设计模式中所处的位置,例如在State模式中,代表具体状态的类的名称可以是InitialState、UnpaidState。

参考资料

The art of naming variables
Google JavaScript Style Guide
Letter case

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 阴影插件代码分享
Jan 09 Javascript
javascript中的void运算符语法及使用介绍
Mar 10 Javascript
jquery 倒计时效果实现秒杀思路
Sep 11 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
Aug 26 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
Jun 17 Javascript
Ant Design的可编辑Tree的实现操作
Oct 31 Javascript
Vue多选列表组件深入详解
Mar 02 Vue.js
微信域名检测接口调用演示步骤(含PHP、Python)
Dec 08 #Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 #Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 #Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 #Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 #Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 #Javascript
JQuery样式与属性设置方法分析
Dec 07 #jQuery
You might like
codeigniter数据库操作函数汇总
2014/06/12 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
JavaScript中的面向对象介绍
2012/06/30 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
js实现筛选功能
2020/11/24 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python 类的特殊成员解析
2018/06/20 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
Java如何格式化日期
2012/08/07 面试题
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
大国崛起英国观后感
2015/06/02 职场文书
90条交通安全宣传标语
2019/10/12 职场文书