据说程序员最怕命名!这个 6300 Star 的手册能帮上忙
【导语】: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 的手册能帮上忙相关推荐
- 程序员最怕的四个字:通宵发布!
俗话说360行,行行出状元.那么在360行中,加班比较严重的要属哪些行业呢?毫无疑问是互联网行业中的程序员名列前茅的.他们工作繁忙,项目压力大,通常都会选择延长工作时间以解决问题,彻夜不眠者也大有人在 ...
- 临近年关,为何越来越多的程序员不愿回家,带你盘点那些程序员最怕的几件事
接近年关,该回家的就回家了,虽然现在科技发达了,程序员已经不再是一个陌生的行业,但在很多地方的农村,对程序员还是有很多的误解,很多程序员过年回趟家就会被折腾的再也不想回去,每次回来都感觉无力吐槽,而最 ...
- 英语,程序员永远的痛???//“不要倒在起跑线上”课程介绍
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址: http://blog.csdn.net/jobchanceleo/archi ...
- DHCP、PXE自动化部署操作系统、DNS正向解析、NFC共享目录服务--(程序员心碎的一天,碎了的自行粘上)
DHCP.PXE自动化部署操作系统.DNS正向解析.NFC共享目录服务--(程序员心碎的一天,碎了的自行粘上 一.实验准备 二.实验要求 三.实验过程 1.配置DHCP (1).修改虚拟网络编辑器 ( ...
- 2022年全球程序员收入报告出炉:字节跳动成国内唯一上榜公司
编|凌敏.核子可乐 源|InfoQ 又一地区强制要求企业公开薪酬数据,律师:未来薪资透明才是常态. 近日,美国数据收集网站 Levels.fyi 发布了 2022 年度程序员薪酬报告,根据职位.地域对 ...
- 哎!又要过年了,程序员最怕问到什么?
每逢佳节被相亲,有人欢喜有人愁. 年关将至,游子回乡是常事也是喜事.可是对于大多数程序员来说,每到春节就迎来被催婚高峰期,"要见的姑娘比亲戚还多." 近日,发布了一组程序员过年大数 ...
- 过年回家,程序员最怕的 5 件事
时间过得真快啊,一月接一月,一年又一年.程序猿工作繁忙,每天游离于代码之间,似乎已经忘记了时间的流淌. 话说又要回去过年了,作者是心有余悸的.已经习惯在大城市生活的一线码农,早已不能融入故乡那种风气的 ...
- Github标星7.9K!程序员专属的命名宝典来了
开源最前线(ID:OpenSourceTop) 猿妹编译 地址:https://github.com/kettanaito/naming-cheatsheet 命名一直是程序员最烦恼的事情之一,一个好 ...
- 每日一皮:据说程序员都喜欢这些东西...
往期推荐 每日一皮:一个名字打败对手的经典案例... 每日一皮:当产品经理试图让程序员冷静下来的时候... 每日一皮:完美的结对编程! 每日一皮:简历上写着熟练掌握-实际往往是这样的... 每日一皮: ...
最新文章
- 飞书面向所有企业和组织免费开放,2020我们一起拥抱线上协作新方式
- 影像组学视频学习笔记(11)-支持向量机(SVM)(理论)、Li‘s have a solution and plan.
- 在C#中,如何将一种编码的字符串转换成另外一种编码。
- python怎么画条形图-如何在Bokeh(Python)中绘制水平条形图
- 【数字信号处理】线性时不变系统 LTI ( 判断某个系统是否是 “ 线性 “ 系统 | 案例四 )
- 3.2 matlab用if语句实现选择结构
- VS中怎样使用Nuget添加MQTTnet依赖
- firefox插件 Tab Utilities 个性化设置备份
- 设置dns_网络速度缓慢怎么办?轻松一键修改DNS设置让网速提升五倍
- Java BigDecimal toBigIntegerExact()方法(带示例)
- 2011浙大878计算机专业基础综合大题答案解析
- RecyclerView子View不刷新(RequestLayout无效),RecyclerView.mEatRequestLayout
- DICOM的窗宽和窗位,斜率和截距
- Django1.9重写用户模型报错has no attribute 'USERNAME_FIELD'
- MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO
- 360浏览器登录新浪微博图标显示为字母及占用CPU过高问题的解决
- java obd_XTOOL X100 PAD3通过OBD给2014 BMW CAS4 Key编程
- 骨传导耳机对听力有危害吗,骨传导耳机会不会伤害耳朵
- 推荐几本javascript与jquery的好书
- WebDAV之葫芦儿·派盘+Xplore