变量起名的难,JavaScript也不可避免

计算机领域的至理名言:

Phil Karlton: 计算机科学中只有两个难题:缓存失效和命名。——

Martin Flower:任何人都能写出计算机能够理解的代码,只有好程序员才能写出人能够理解的代码。

首先,看一个变量命名渐入佳境的过程:

/** bad */
const fruit = ['apple', 'banana'];

/** ok */
const fruitArr = ['apple', 'banana'];

/** good */
const fruits = ['apple', 'banana'];

/** great */
const fruitNames = ['apple', 'banana'];

/** prefect */
const fruits = [
  { name: 'apple', color: 'red' },
  { name: 'banana', color: 'yellow' },
];

变量的命名首先要「符合规范」,其次就是得「有意义」。

遵守命名约定

1. 用小驼峰形式命名

2. 常量可以采用全大写的形式,但普通的 const 修饰的变量不应该大写

3. 两个字母的缩略词都大写,大于两个则改小驼峰

IO
AppID

/** bad */
Io
APPID

4. 下划线的使用场景

下划线一般只用于私有变量,占位变量,常量:

this._myPrivateMethod = function () { /* ... */ };

const USER_AGE = 30;

命名有意义

1. 使用有意义的名称

  • 命名要精确表意,不能太宽泛,更不能词不达意
    • 同一个事物可能有多个单词适配,选最合适的
    • 同一个词有多种含义
  • 使用业务术语。应避免从电脑的视角去命名,而是应该从人类认识事物的角度去命名
  • 尽量避免用缩略语
  • 避免使用黑话。我知道你是业内大佬,但我是小菜菜
  • 单词拼对。
getUserPosts

/** bad 含义过于宽泛,不精确 */
getUserData
getUserInfo

/** bad 不要用单个单词的变量,如果只是很小的范围内使用的临时变量则无大碍 */
global.d = new Date()

2. 保证语义完整的同时,尽量用词应精简

findUserByNameOrEmail
setUserLoggedInTrue
/** bad 选词应该尽量精简,但必须保证语义的确定性 */
findUser

getUserFriend
/** bad "FromDatabase" 提供了不必要附加信息,应精简掉 */
getUserFriendFromDatabase

3. 保证命名在上下文中意义明确,不冗余

Class Employee {
  constructor (name) {
    /** 本身就处在 Employee 上下文中,若使用 employeeName 会信息冗余 */
    this.name = name;
  }
}

/** 此处已经脱离了 Employee 上下文 */
const employeeName = new Employee('gavin').name;

4. 保证动词的统一性

常用的动词有:get、setread、create、add、update、reset、delete、remove,尽量保证使用统一的动词:

/** 获取统一用 get */
getQuestion
getUserPosts
getUsers

/** 设置统一用 set */
setQuestion
setUserPosts
setUsers

5. 命名函数或方法

尽量采用动词或判断性词汇:

getFullYear()  // 取值
toString()     // 转换
isArray()      // 判断

6. 命名布尔值(boolean)

布尔值一般用 iscan、hasneed、should 等助动词开头。返回布尔值的函数或方法,为避免函数名和变量名冲突的情况,以 checkget 动词 + is、can、has、need、should 助动词开头

// isShow       是否显示
// checkIsShow  判断是否显示
const isShow = checkIsShow(args);

7. 命名类名(Class)

使用名词:

class Car { }
new User()

8. 命名数字(number)

首选有意义的简短命名,如 width或length或count,若无则采用 numberOfXXX xxxCount 之类的通用命名:

width
length
count
total

maxWidth

numberOfErrors
errorCount

9. 命名字典(Map)

推荐使用 valuesByKey 的方式:

/** values: users, key: id, => valuesByKey => usersByID */
const usersByID = {
   id12345: { name: 'byted', age: 9 },
   // ...
 };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值