【导语】:naming-cheatsheet 是一个命名备忘录,记录命名的一些常见规范和约定。

简介

在编程工作中,命名是一件让很多开发者都头疼的事情。国外曾经有个一次关于程序员最难任务的投票调查,结果命名占了 49%。

一个好的变量或函数命名,应该能起到自解释的作用,甚至能减少我们代码的注释。

naming-cheatsheet是一个命名备忘录,记录一些常见的规范约定,并提供简单的例子说明。如果能够严格遵守这些规范,相信我们的代码可读性会大大提升,下面就来介绍 naming-cheatsheet 提供的一些建议。

项目地址:

https://github.com/kettanaito/naming-cheatsheet

使用英语

这是最基本的一条规则了,英语是编程中的主要语言,所有编程语言的语法都是用英语编写的,通过英语编写代码,可以大大提高其通用性。对于我们国内开发者来说,一定要避免拼音甚至是直接的中文命名。

/* Bad */
const primerNombre = 'Gustavo'
const amigos = ['Kate', 'John']  /* Good */
const firstName = 'Gustavo'
const friends = ['Kate', 'John']  

命名风格

选择一种命名的风格,并且严格遵守,可以是camelCase,或者snake_case,或者是其他任何的风格,最重要的是要保持一致,不管是个人开发者还是团队,保持一致的命名风格很重要,不要混合使用。

/* Bad */
const page_count = 5
const shouldUpdate = true  /* Good */
const pageCount = 5
const shouldUpdate = true  /* Good as well */
const page_count = 5
const should_update = true  

遵守SID原则

命名应该简短、直观并且具有描述性,遵循SID原则。

  • Short。简短,避免输入太长,但是也应该注意不能简写到失去其原本的意义。
  • Intuitive。直观,并且尽可能接近自然语言。
  • Descriptive。以最有效的方式反映其作用或目的。
/* Bad */
const a = 5 // "a" could mean anything
const isPaginatable = a > 10 // "Paginatable" sounds extremely unnatural
const shouldPaginatize = a > 10 // Made up verbs are so much fun!  /* Good */
const postCount = 5
const hasPagination = postCount > 10
const shouldPaginate = postCount > 10 // alternatively  

避免过度的简写

命名要简短,但是要避免钻牛角尖,命名最重要的是要让人能看懂,过度的缩写如果失去了其原本的意义,降低了代码的可读性,那就不应该这么做,宁愿多写几个字母。

/* Bad */
const onItmClk = () => {}  /* Good */
const onItemClick = () => {}  

避免上下文重复

有时候在一段代码中可能会出现类似意义的变量定义,这个时候要避免命名的重复。

class MenuItem {  /* Method name duplicates the context (which is "MenuItem") */  handleMenuItemClick = (event) => { ... }  /* Reads nicely as `MenuItem.handleClick()` */  handleClick = (event) => { ... }
}  

反映预期结果

变量或函数的命名应该能反映预期的结果。

/* Bad */
const isEnabled = itemCount > 3
return <Button disabled={!isEnabled} />  /* Good */
const isDisabled = itemCount <= 3
return <Button disabled={isDisabled} />  

命名的模式

可以参考以下类似的模式来做命名。

A/HC/LC模式

可以遵循A/HC/LC,即

prefix? + action (A) + high context (HC) + low context? (LC)  
name prefix A HC LC
getUser
get User
getUserMessages
get User Messages
handleClickOutside
handle Click Outside
shouldDisplayMessage should Display Message

上下文的顺序可能会影响变量的含义,例如shouldUpdateComponent意味着将要更新一个组件,换一下顺序变成shouldComponentUpdate,意味着组件将做自我更新。

动作

函数名称的动词部分,是描述函数作用的最终要的部分,如:

  • getXXX,表示获取数据
  • setXXX,表示设值
  • resetXXX,重置数据
  • fetchXXX,请求数据
  • removeXXX,移除数据,表示从某处删除某物
  • deleteXXX,删除数据,表示完全清楚某些事物
  • composeXXX,从现有数据创建新数据
  • handleXXX,处理某个动作

上下文

函数或方法通常是某些事物的动作,结合上下文,能够明确其操作的对象,或者要能反映出函数预期的数据类型。一些特定的情况下允许省略上下文,例如在JavaScript中,filter对Array进行操作很常见,就没必要命名为filterArray了。

/* A pure function operating with primitives */
function filter(predicate, list) {  return list.filter(predicate)
}  /* Function operating exactly on posts */
function getRecentPosts(posts) {  return filter(posts, (post) => post.date === Date.now())
}  

前缀

前缀用来增强变量的含义,如:

  • is,描述特征或状态,通常是boolean类型
  • has,描述是否具有某个状态或值,通常是boolean类型
  • should,反映肯定的条件,加上特定的执行动作
  • min/max,描述边界或界限时使用
  • prev/next,指示前一个或下一个状态

单复数

变量名称是单数还是复数,取决于值的单数还是复数。

/* Bad */
const friends = 'Bob'
const friend = ['Bob', 'Tony', 'Tanya']  /* Good */
const friend = 'Bob'
const friends = ['Bob', 'Tony', 'Tanya']  

- EOF -

开源前哨 日常分享热门、有趣和实用的开源项目。参与维护 10万+ Star 的开源技术资源库,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

据说程序员最怕命名!这个 6300 Star 的手册能帮上忙相关推荐

  1. 程序员最怕的四个字:通宵发布!

    俗话说360行,行行出状元.那么在360行中,加班比较严重的要属哪些行业呢?毫无疑问是互联网行业中的程序员名列前茅的.他们工作繁忙,项目压力大,通常都会选择延长工作时间以解决问题,彻夜不眠者也大有人在 ...

  2. 临近年关,为何越来越多的程序员不愿回家,带你盘点那些程序员最怕的几件事

    接近年关,该回家的就回家了,虽然现在科技发达了,程序员已经不再是一个陌生的行业,但在很多地方的农村,对程序员还是有很多的误解,很多程序员过年回趟家就会被折腾的再也不想回去,每次回来都感觉无力吐槽,而最 ...

  3. 英语,程序员永远的痛???//“不要倒在起跑线上”课程介绍

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址: http://blog.csdn.net/jobchanceleo/archi ...

  4. DHCP、PXE自动化部署操作系统、DNS正向解析、NFC共享目录服务--(程序员心碎的一天,碎了的自行粘上)

    DHCP.PXE自动化部署操作系统.DNS正向解析.NFC共享目录服务--(程序员心碎的一天,碎了的自行粘上 一.实验准备 二.实验要求 三.实验过程 1.配置DHCP (1).修改虚拟网络编辑器 ( ...

  5. 2022年全球程序员收入报告出炉:字节跳动成国内唯一上榜公司

    编|凌敏.核子可乐 源|InfoQ 又一地区强制要求企业公开薪酬数据,律师:未来薪资透明才是常态. 近日,美国数据收集网站 Levels.fyi 发布了 2022 年度程序员薪酬报告,根据职位.地域对 ...

  6. 哎!又要过年了,程序员最怕问到什么?

    每逢佳节被相亲,有人欢喜有人愁. 年关将至,游子回乡是常事也是喜事.可是对于大多数程序员来说,每到春节就迎来被催婚高峰期,"要见的姑娘比亲戚还多." 近日,发布了一组程序员过年大数 ...

  7. 过年回家,程序员最怕的 5 件事

    时间过得真快啊,一月接一月,一年又一年.程序猿工作繁忙,每天游离于代码之间,似乎已经忘记了时间的流淌. 话说又要回去过年了,作者是心有余悸的.已经习惯在大城市生活的一线码农,早已不能融入故乡那种风气的 ...

  8. Github标星7.9K!程序员专属的命名宝典来了

    开源最前线(ID:OpenSourceTop) 猿妹编译 地址:https://github.com/kettanaito/naming-cheatsheet 命名一直是程序员最烦恼的事情之一,一个好 ...

  9. 每日一皮:据说程序员都喜欢这些东西...

    往期推荐 每日一皮:一个名字打败对手的经典案例... 每日一皮:当产品经理试图让程序员冷静下来的时候... 每日一皮:完美的结对编程! 每日一皮:简历上写着熟练掌握-实际往往是这样的... 每日一皮: ...

最新文章

  1. 飞书面向所有企业和组织免费开放,2020我们一起拥抱线上协作新方式
  2. 影像组学视频学习笔记(11)-支持向量机(SVM)(理论)、Li‘s have a solution and plan.
  3. 在C#中,如何将一种编码的字符串转换成另外一种编码。
  4. python怎么画条形图-如何在Bokeh(Python)中绘制水平条形图
  5. 【数字信号处理】线性时不变系统 LTI ( 判断某个系统是否是 “ 线性 “ 系统 | 案例四 )
  6. 3.2 matlab用if语句实现选择结构
  7. VS中怎样使用Nuget添加MQTTnet依赖
  8. firefox插件 Tab Utilities 个性化设置备份
  9. 设置dns_网络速度缓慢怎么办?轻松一键修改DNS设置让网速提升五倍
  10. Java BigDecimal toBigIntegerExact()方法(带示例)
  11. 2011浙大878计算机专业基础综合大题答案解析
  12. RecyclerView子View不刷新(RequestLayout无效),RecyclerView.mEatRequestLayout
  13. DICOM的窗宽和窗位,斜率和截距
  14. Django1.9重写用户模型报错has no attribute 'USERNAME_FIELD'
  15. MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO
  16. 360浏览器登录新浪微博图标显示为字母及占用CPU过高问题的解决
  17. java obd_XTOOL X100 PAD3通过OBD给2014 BMW CAS4 Key编程
  18. 骨传导耳机对听力有危害吗,骨传导耳机会不会伤害耳朵
  19. 推荐几本javascript与jquery的好书
  20. WebDAV之葫芦儿·派盘+Xplore

热门文章

  1. 桌面图标变成白色怎么办?
  2. 初中计算机使用在线,初中信息技术考试模拟试题(flash+网站基础知识)
  3. FPGA基础学习与方向
  4. IP数据报检验和计算
  5. 自定义布局MyBaseAdapter及其优化
  6. Java六大设计模式原则(一)
  7. TextMate添加Erlang支持
  8. JS 中实现扫码枪使用 [JavaScript,jQuery,一维扫码]
  9. 家用计算机调制解调器,Win7电脑提示“找不到调制解调器”怎么办?
  10. 基于手机SIM卡的一键登录身份验证,你准备好了吗?