前端 | 一些良好的代码习惯

image.png

背景

之前的一个项目,当时需求紧急,在项目结构和代码质量上有点把控不严格,为此leader命我重构,感觉这是件很有意思的事情,不仅能了解到其他同事代码风格,还能学习到其他同事的一些优秀的逻辑。
本篇将讲述一下,我在重构的过程中总结的一些良好的代码习惯。

一. 可读性强的命名

命名是提高代码可读性的第一步,也是极其重要的一步,不仅在js里要命名变量名、函数名,还要在CSS里给命名class、id,给图片命名。好的变量名要完全、准确地描述出该变量所代表的事物。下面是一些命名的规则:

  1. 以问题为导向
    一个好记的变量名反映的通常都是问题,而不是解决方案。一个好名字通常表达的是“什么(what)”,而不是“如何(how)”。

2.最适当的名字长度
研究发现,当变量名的平均长度在10到16个字符的时候,调试程序所需花费的力气是最小的(1990)。平均名字长度在8到20个字符的程序也几乎同样容易调试。这项原则并不意味着你应该尽量把变量名控制在9到15或者10到16个字符长。它强调的是,如果你查看自己写的代码时发现了很多更短名字,那么你需要认真检查,确保这些名字含义足够清晰。

表1:变量名太长、太短或更好合适的示例
太长 太短 正好
numberOfPeopleOnTheUsOlympicTeam,
numberOfSeatsInTheStadium,
maximumNumberOfPointsInModernOlympics
n, np, ntm
n, ms, nsisd
m,mp,max,points
numTeamMembers, teamMemberCount
numSeatsInStadium, seatCount
teamPontMax,pointsRecodrd

note: 并不是所有短的变量名都不好,当你把一个变量名取得很短的时候,如 i ,这一长度本身就对变量做了一些说明——也就是说,改变量代表的是一个临时的数据,它的作用域非常有限,适用于局部变量或者循环变量;
也并不是所有的较长的名字不好,较长的名字适用于很少用到的变量或者全局变量。

  1. 变量名中的计算值限定词
    很多程序都有表示计算结果的变量:总额、平均值、最大值,等等。如果你要用类似于Total、Sum、Average、Max、Min、Record、String、Pointer这样的限定词来修改某个名字,那么请记住把限定词加到名字的最后。

  2. 变量名中的常用对仗词

  • begin / end
  • first / last
  • locked / unlocked
  • min / max
  • next / previous
  • old / new
  • up / down
  1. 为状态变量命名
    像这种 statusFlag = 0x80这样的语句是反映不出这段代码是做什么的,除非你亲自写了这段代码,或者有文档能告诉你 statusFlag和0x80的含义。为了清楚起见,标记应该用枚举类型、具名常量,我们可以这样优化
const CONTROL_CHARACTER = '0x80';
characterType = CONTROL_CHARACTER;
  1. 为布尔变量命名
    下面是一些格外有用的布尔变量名:
  • done
  • error
  • found
  • success 或 ok
  1. 为枚举类型命名
    在使用枚举类型的时候,可以通过使用组前缀,如color_ , planet_ 或者 month_

二. 写好注释

代码注释一定是注明代码的目的,而不是代码的行为。

三. 降低 if else 面条代码复杂度

重构复杂的 if else代码,简单的方法是使用所谓的查找表。它通过键值对的形式来封装每个if else 的逻辑,如下代码:

function test1 (a, b, c) {}
function test2 (a, b, c) {}
function test3 (a, b, c) {}

function main (a, b, c) {
  let  product = getProduct();
  let result;
  if (product === 'aa') {
      result = test1(a, b, c);
  } else if (product === 'bb') {
      result = test2(a, b, c);
  } else if (product === 'cc') {
      result = test3(a, b, c);
  }
  return result
}

//我们可以优化成
function main (a, b, c) {
  let product = getProduct();
   let  productMap = {
         'aa' : function (a, b, c) {/* ... */},
         'bb' : function (a, b, c) {/* ... */},
         'cc' : function (a, b, c) {/* ... */},
    }
    return productMap[product](a, b, c)
}
            

优化后的代码要比用if else 简洁多了,使用这种查找表的方式可以完成更复杂的if else语句,大家可以慢慢实践。

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

推荐阅读更多精彩内容