web 命名规范

命名规范

名字的重要性不言而喻,在项目愈发复杂的今天,大量的变量和方法充斥在项目中,很多时候我们的时间浪费在识别乱七八糟的变量名上,尤其在重构和修改他人代码时,浪费了程序员宝贵的创造时间。

一个好的名字,应该要 看其形知其义

  1. 名副其实
    名副其实说起来很简单。我们想要强调,这事很严肃。选个好名字要花时间,但省下来的时间比花掉的多。注意命名,而且一旦发现有更好的名称,就替换旧的。这么做,读你代码的人(包括你自己)都会很开心。

  2. 避免误导
    程序员必须避免留下掩藏代码本意的错误线索。应当避免使用与本意相悖的词。

  3. 做有意义的区分
    如果程序员只为满足编译器或解释器的需要而写代码,就会制造麻烦。例如,因为统一作用范围内两样不同的东西不能重名,你可能会随手改掉其中一个名称,有时干脆一错误的拼写充数。

例如:

以数字系列命名

let list1;
let list2;

这样的命名存属误导,完全没有提供正确的信息,没有提供导向作者意图的线索。

废话区分

假设你有一个Product类,如果还有一个ProductData或者ProductInfo类,那他们的名称虽然不同,意义却无区别。Info和Data就像a、an、the一样,是意义含混的废话。

废话都是冗余。Variable一词永远不应当出现在变量名中,NameString比Name好吗?难道Name会是一个浮点数不成?如果是这样就触犯了关于误导的规则。

getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();

当这三个方法出现在一个类中,调用者知道该掉哪个?

如果缺少明确规定,变量moneyAccount与money没区别,customerInfo与customer没区别,accountData与account没区别,theMessage与message没区别。要区别名称,就要以读者能鉴别不同之处的方式来区别。

文件、目录名

  • 命名方法:小写字母
  • 命名规范:一律使用名词,单词以短横线做间隔。
  • 命名建议:
    1. 目录、文件名不允许使用非字母开头
    2. 目录、文件名不允许使用动词类名称(一律使用名词)
    3. 目录名称不允许使用超过二个单词,文件名不允许超过三个单词
// 坏的命名
_login.js
1login.js
healthinform
getToken

// 好的命名
login.js
health-inform
token-utils

JS 命名

变量名

  • 命名方法:LowerCamelCase(小驼峰命名法)
  • 命名规范:{意义描述+可选类型描述}的组合,首字母小写
  • 命名建议:如下

尽量在变量名字中体现所属类型,如:length、count等表示数字类型;而包含name、title表示为字符串类型。

let commentList;
let content;

尽量不要用缩写,除非这个缩写是公认的,如:library => lib。单词缩写附表:

icon          ic
color         col
divider       di
selector      sl
average       avg
background    bg
buffer        buf
control       ctrl
delete        del
document      doc
resource      res
error         err
escape        esc
increment     inc
infomation    info
initial       init
image         img
length        len
library       lib
message       msg
password      pwd
position      pos
server        srv
source        src
string        str
temp          tmp
window        win
...           ...

boolean值定义

检查某个属性是否为空或者某条记录是否存在的方法,通常命名为 hasXXX(),例如 hasJoined()。
检查对象状态的方法通常以 is+形容词 命名。例如 isClosed(),isReady()

常量名

  • 命名方法:全部大写
  • 命名规范:单词之间用下划线分开
  • 命名建议:无
const PAGE_SIZE = 20;

方法名

  • 命名方法:LowerCamelCase(小驼峰命名法)
  • 命名规范: 方法名通常是动词或动词+名次。
  • 命名建议:如下
动词 含义 备注
init 初始化方法 例:init
to或on 按钮点击方法 例:toLogin(路由跳转) 或 onVerify(事件执行)
set 设置方法 例:setData
get 具有返回值的获取方法 例:getData
load 通过异步加载数据的方法 例:loadData
is 判断是否为某个值 函数返回一个布尔值。true:为某个值;false:不为某个值
has 判断是否含有某个值 函数返回一个布尔值。true:含有此值;false:不含有此值
can 判断是否可执行某个动作(权限) 函数返回一个布尔值。true:可执行;false:不可执行

资源命名

资源的字母名称必须全为小写,这是因为在某些对大小写字母敏感的操作系统中,当文件通过工具压缩混淆后,或者人为修改过后,大小写不同而导致引用文件不同的错误,很难被发现。

图片资源

  • 命名方法:全部小写
  • 命名规范: 采用{ 前缀 + 范围 }命名方式,用短横线区分
  • 命名建议:如下
图标类,添加ic前缀
背景类,添加bg前缀

示例:

// 好的命名
ic-share.png
ic-avatar.png
bg-head.png

// 坏的命名
cheats-one.png
bg-2.png
new-1.png
accidentBanner.png

CSS 命名

遵守的原则

首先是命名要讲究简单而不失语义化,其次要时刻思考复用性,选择器的性能等。鉴于此,BEM 的命名规范逐渐风靡起来,BEM 是由Yandex团队提出的一种前端命名方法论。BEM 命名约定更加严格,而且包含更多的信息,同时避免了后代选择符带来的性能问题。

BEM 方法论


BEM的意思就是块(block)、元素(element)、修饰符(modifier),命名约定的模式如下:

.block{}
.block__element{}
.block--modifier{}
  • .block 代表了更高级别的抽象或组件。
  • .block__element 代表 .block 的后代,用于形成一个完整的.block的整体。
  • .block--modifier 代表 .block 的不同状态或不同版本。

BEM 的关键是光凭名字就可以告诉其他开发者某个标记是用来干什么的。通过浏览HTML代码中的class属性,你就能够明白模块之间是如何关联的:有一些仅仅是组件,有一些则是这些组件的子孙或者是元素,还有一些是组件的其他形态或者是修饰符。我们用一个类比 / 模型来思考一下下面的这些元素是怎么关联的:

.person{}
.person__hand{}
.person--female{}
.person--female__hand{}
.person__hand--left{}

顶级块是‘person’,它拥有一些元素,如‘hand’。一个人也会有其他形态,比如女性,这种形态进而也会拥有它自己的元素。下面我们把他们写成‘常规’CSS:

.person{}
.hand{}
.female{}
.female-hand{}
.left-hand{} 

这些‘常规’CSS都是有意义的,但是它们之间却有些脱节。就拿.female来说,是指女性人类还是某种雌性的动物?还有.hand,是在说一只钟表的指针(译注:英文中hand有指针的意思)?还是一只正在玩纸牌的手?使用BEM我们可以获得更多的描述和更加清晰的结构,单单通过我们代码中的命名就能知道元素之间的关联。BEM真是强大。

参考连接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容