设为首页 - 加入收藏 阜新站长网 (http://www.0418zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 用户 2000 阿里 宣布
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

重构的艺术:五个小妙招助你写出好代码!

发布时间:2019-11-07 03:21 所属栏目:[优化] 来源:读芯术
导读:糟糕的代码可以运作,但早晚会让我们付出代价。你有没有遇到过这样的问题:几周后,你无法理解自己的代码,于是不得不花上几个小时,甚至几天的时间来弄清楚到底发生了什么。 解决这个常见问题的方法是使代码尽可能清晰。如果做得更好的话,即使是非技术人

糟糕的代码可以运作,但早晚会让我们付出代价。你有没有遇到过这样的问题:几周后,你无法理解自己的代码,于是不得不花上几个小时,甚至几天的时间来弄清楚到底发生了什么。

解决这个常见问题的方法是使代码尽可能清晰。如果做得更好的话,即使是非技术人员也应该能理解你的代码。

代码

是时候停止寻找借口,提高我们的代码质量了!

编写清晰的代码并没有那么复杂。本教程将向你展示五种改进代码的简单技巧,并提供一些实例:

1. 不用switch语句

我们通常使用switch语句来代替大型if-else-if语句。但是,switch语句非常冗长,很难维护,甚至很难调试。这些switch语句把我们的代码弄得乱七八糟,而且这些语句的语法很奇怪,很不舒服。在添加更多的case时,我们不得不必须手动添加每个case和break语句,而这就很容易出错。

接下来看一个switch语句的例子:

  1. function?getPokemon(type)?{?
  2. ??let?pokemon;?
  3. ??switch?(type)?{?
  4. ????case?'Water':?
  5. ??????pokemon?=?'Squirtle';?
  6. ??????break;?
  7. ????case?'Fire':?
  8. ??????pokemon?=?'Charmander';?
  9. ??????break;?
  10. ????case?'Plant':?
  11. ??????pokemon?=?'Bulbasur';?
  12. ??????break;?
  13. ????case?'Electric':?
  14. ??????pokemon?=?'Pikachu';?
  15. ??????break;?
  16. ????default:?
  17. ??????pokemon?=?'Mew';?
  18. ??}?
  19. ??return?pokemon;?
  20. }?
  21. ?
  22. console.log(getPokemon('Fire'));?//?Result:?Charmander?

Switch语句

如果需要在switch语句中添加更多的case的话,需要编写的代码量是相当大的。我们可能最终会复制粘贴代码,而其实我们都知道这种行为的后果是什么。

那么,如何避免使用switch语句呢?可以通过使用对象文本。对象文本简单,易于编写,方便读取,维护轻松。我们都习惯用javascript处理对象,对象文本语法比switch语句更新鲜。下面举个例子:

  1. const?pokemon?=?{?
  2. ????Water:?'Squirtle',?
  3. ????Fire:?'Charmander',?
  4. ????Plant:?'Bulbasur',?
  5. ????Electric:?'Pikachu'?
  6. ??};?
  7. ?
  8. function?getPokemon(type)?{?
  9. ??return?pokemon[type]?||?'Mew';?
  10. }?
  11. console.log(getPokemon('Fire'));?//?Result:?Charmander?
  12. ?
  13. //?If?the?type?isn't?found?in?the?pokemon?object,?the?function?will?return?the?default?value?'Mew'?
  14. console.log(getPokemon('unknown'));?//?Result:?Mew?

使用对象文本替代switch

如你所见,可以使用运算符 || 添加默认值。如果在pokemon对象中找不到type,getpokemon函数将使mew返回为默认值。

小贴士:你可能已经注意到,我们在函数外部而不是内部声明pokemon对象。这样做是为了避免每次执行函数时都重新创建pokemon。

用映射也能达到同样的效果。映射就像对象一样是键-值对的集合。不同的是映射允许任何类型的键,而对象只允许字符串作为键。此外,映射还有一系列有趣的属性和方法。

以下是使用映射的方法:

  1. const?pokemon?=?new?Map([?
  2. ????['Water',?'Squirtle'],?
  3. ????['Fire',?'Charmander'],?
  4. ????['Plant',?'Bulbasur'],?
  5. ????['Electric',?'Pikachu']?
  6. ??]);?
  7. ?
  8. function?getPokemon(type)?{?
  9. ??return?pokemon.get(type)?||?'Mew';?
  10. }?
  11. ?
  12. console.log(getPokemon('Fire'));?//?Result:?Charmander?
  13. console.log(getPokemon('unknown'));?//?Result:?Mew?

用映射代替switch语句

如你所见,当用对象文本或映射替换switch语句时,代码看起来更清楚、更直接。

2. 把条件语句写的更有描述性

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章