程序开发过程中变量命名不仅是一个头疼问题,也是一个对开发者综合素质的磨练,它会直接影响到代码的最终交付质量、代码Review职员心智承受力。若何写出具有创造性、优雅性、易读性的高质量代码,需要开发者在现实工作中不停总结、提炼,在阅读他人代码时不停地吸收,并在一定的编码规范上形成自己的编码气概。在代码一道除了资质和履历更需要一份详实的参考来辅助,这正是本系列文章的起点所在。
变量的命名不局限于JavaScript代码中的属性、方式和工具,也包罗了路由的命名,工程结构的命名,数据库表和字段的命名,样式中Class和ID选择器的命名,HTML米素的选择等。
现在盛行的经典命名规则有:驼峰命名法、匈牙利命名法、下划线命名法、帕斯卡命名法
相关命名的详细规则请另行查阅。前端主要涉及到驼峰命名法,React组件会用到帕斯卡命名法。
然后是变量命名规则:
这里给出一些在开发过程中约定成俗的通用规则,涉及JavaScript, Typescript, 框架组件, 样式及目录。在文章中将使用【强制】来示意必须严格遵守,【推荐】来示意建议,【参考】来给出多种命名方式的一种。
1. 【强制】在JavaScript中使用驼峰命名法来示意变量,不能以下划线或美米符号作为更先和竣事。
// 反例 _name __name name_ $name name$弥补:由于受框架和第三方库及语言限制,不可能完全避免。例如:在RxJs中通常命绅士的时刻是以 变量名 + $ 的形式,在Class中界说私有变量时通常以 _ + 变量名 的方式来示意,在Vue中内部实例方式所有以 $ 更先,在AngularJs中内部方式以 $$ 更先,而lodash直接使用 _ 作为其别名。
2. 【强制】在代码中严禁使用拼音与中英文夹杂的方式,更不允许直接使用中文的方式。除了一些国际通用的中文名称,要视为英文外,其它克制使用。
// 正例 taobao tmall shanghai coupons // 反例 yhq [优惠券]
3. 【强制】类名使用大写驼峰命名法来示意,Typescript中枚举值使用大写驼峰命名法示意。
// 正例 class User {} enum Color {Red = 1, Green, Blue} // 反例 class user {}
4. 【强制】常量名所有大写,单词间使用下划线离隔,力图表达完整清晰,不要嫌名字长。
// 正例 GOOGLE_MAP_TOKEN // 反例 TOKEN
5. 【建议】Typescript中抽象类使用 Abstract 或 Base 开头;异常类使用 Exception 末端。
abstract class BaseDepartment {}
6. 【建议】在TypeScript中,类型使用 Type 作后缀,接口使用 I 作为前缀。
type PropsType = {} interface ILoginProps {}
7. 【建议】 接纳有意义的命名,在项目中坚持使用一种变量命名方式。不要 usr 与 user 混用
// 正例 users getUserByUid() // 反例 registerUsr() copyUserInfo()
8. 【建议】方式名必须准确表达该方式的行为,在多数情况下以动词开头。
// 正例 fetchCoupons() updateToken() createAccount() generateUniqueId() // 反例 getData()
9. 【建议】可以使用单词简写,然则只局限于常用词汇,注重差别词汇的简写有可能冲突。
// 正例 setProps() [props -> property] selectCouponsDlg() [dlg -> dialog] readPkg() [pkg -> package] previewTpl [tpl -> template] // 反例 vehicleDesc [desc -> description] vehicleDesc [desc -> descending] vehicleAesc [aesc -> aescending] fetchUsr() [usr -> user]
10. 【建议】在Vue和Angular中,模板语法中所有组件名使用中线命名法,在React中使用大写驼峰命名法来示意。
// Vue <el-button type="text" @click="toDetail">详情</el-button> <custom-component a-prop="prop" /> // Angular <nz-sider [nzWidth]="200" style="background:#fff"></nz-sider> // React <SelectPicture data={this.images} />
11. 【推荐】统一使用中线命名法来命名目录。
|-- page-header | |-- PageHeader.vue
12. 【参考】在Vue模板语法中组件属性使用连字符命名法,在Vue中使用 *** X则属性使用驼峰命名法,而且文件文以”.jsx”为文件类型。
<Thumbnail withHeadPicture={true} data={this.selectedImages[0]} withDetail={this.enabledDetail} />
13. 【强制】在服务名上使用 Service 后缀
class UserService {}
14. 【建议】在Vue中组件文件名接纳大写驼峰命名方式,React同样云云,在Angular中以使用点和横杠来分开文件名,而且符号名后面追加约定的类型后缀。
// Vue User.vue // Angular app.component.ts hero-list.component.ts validation.directive.ts app.module.ts user-profile.service.ts // React User.jsx
15. 【参考】在React中使用目录名称作为组件名,在目录内容直接使用index作为入口,在Vue中不可以,在Angular中可以将index作为模块的入口,固然也可以直接作为组件的入口,但这样和其整个命名气概有所背离。
// Vue |-- user-info | |-- UserInfo.vue // Angular |-- user-info | |-- user-info.component.ts | |-- index.ts // React |-- user-info | |-- index.jsx
16. 【建议】在工程中文档使用全大写命名
README.md CONTRIBUTORS.md CHANGELOG.md
17. 【建议】在Vue中指令命名使用 filter 作为竣事。所有引用命名使用 ref 作为后缀
formatCouponsFilter inputRef selectRef
18. 【强制】测试文件以 .spec 或者 .test 作为命名的一部分。
selectPicture.spec.js pageHeader.test.js
19. 【建议】复数化变量名称,而不是命名中包罗聚集类型名称。
// 正例 hosts users validUsers hostText hostJson portNumber // 反例 hostList userList hostStr intPort
20. 【建议】在 for 循环中使用 i, j, k 来作为索引,使用 n 示意数目/次数/限制,使用 e 示意异常, 使用 evt 示意事宜工具, 使用 cb 示意回调函数。
for (let i = 0; i < 10; i++) { for (let j = 0; j < 10; j++) { for (let k = 0; k < 10; k++) { // do something } } }
21. 【强制】在解构时使用 const 来声明。
const [ foo, bar ] = { foo: 1, bar: 2 }
22. 【建议】在样式中Class命名可以使用一些常用简写来削减长度。
hd -> head hdr -> header ft -> foot ftr -> footer pg -> page btn -> button txt -> text el -> element opt -> option bd -> border cl -> clearfix p -> padding m -> margin l -> left r -> right t -> top b -> bottom x -> horizontal y -> vertical px -> padding-left, padding-right py -> padding-top, padding-bottom pl -> padding-left m -> margin dlg -> dialog sel -> select img -> image lbl -> label chk -> checkbox tpl -> template tbl -> table hoz -> horizontal vert -> vertical ref -> reference wiz -> wizard oh -> overflow: hidden弥补:有些简写不能单独使用,终须组合才气使用,例如: p, m, x, y等单个词汇。
23. 【建议】在命名时接纳BEM的方式,并适当转变,详细参见后续文章。
.page-header__main .dialog__content .gallery-list--wrap .thumbnail-image--info .action__btn-group
24. 【建议】样式Class命名使用中线毗邻,ID命名接纳下划线毗邻。Class可以同时接纳中线和下划线,但要遵照一定的规则。
.thumbnail-item__image #page_header
25. 【参考】样式Class接纳组合方式,通过外层Class名来限 *** 用局限。
// 正例 <div class="53fc-7255-ba73-6808 page-header"> <div class="7255-ba73-6808-03c4 page-header__wrap common"></div> <div class="ba73-6808-03c4-e0af page-header__wrap tab"></div> </div> // 反例 <div class="06df-8f41-9b57-75ac page-header"> <div class="8f41-9b57-75ac-d952 page-header__wrap page-header--common"></div> <div class="9b57-75ac-d952-2d22 page-header__wrap page-header--tab"></div> </div>弥补:这种方式的目的在于削减长度,通过 "主体 + 分类名词" 的方式,可以解释为 “带分类的主体”,然则有一个问题是全局样式要注重不要使用通用的词汇来界说样式,好比 title, action, header, footer, left, right等,否则会引起样式笼罩。
原文:https://segmentfault.com/a/1190000019887173
1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入
中新网客户端北京12月31日电 2020年已近在眼前,你准备好迎接它了吗?新年伊始,一大批与生活息息相关的新政策法规即将实施。 进口商品买买买更便宜、医药费用负担减轻、部分行政事业性收费降低……一起...
可以在360安全卫士里面找下哇,如果不好找的话,也可以尝试下其他的数据恢复软件,不一定就要使用360数据恢复大师哈建。 如何才能恢复这些数据,建议找到合适的工具来恢复就可以了。下面这个应该很适合 可以...
黑客为什么可以入侵别人电脑(黑客ip入侵电脑教程)(tiechemo.com)一直致力于黑客(HACK)技术、黑客QQ群、信息安全、web安全、渗透运维、黑客工具、找黑客、黑客联系方式、24小时在线网...
QQ被无端禁封 15日下午,大量网民表明自身的QQ账户忽然提醒“因涉嫌业务流程违反规定”被无端禁封,被禁封的网民表明账户一直在自身手机上中一切正常应用,并沒有出現失窃的状况,忽然那样一个提醒...
怎么加入QQ网络黑客 怎祥根据手机号查身份证件后4位(手机号查身份信息) 千牛后台管理怎么拉黑顾客 网络黑客技艺在哪学(从零开始学网络黑客技艺) qq上如何找黑客 全世界最强...
密接去过的场所需要消毒吗 1、密接者去过的地方处理方法:一般是需要消毒的。严格对社区人群聚集的公共场所进行清洁、消毒和通风,改善环境卫生状况。2、密接去过的场所一般是需要消毒的,但具体情况是当地防控办...