返回
以独到观点剖析eslint和no-magic-string#
前端
2024-01-04 16:34:18
最近参加了几次公司组内的Code Review,发现了一些问题。其中一些问题可以通过工具(比如eslint)解决。我们想着通过工具自动化的方式进行解决。而这些工具中有一些是现成的,比如 魔法数。大家对魔法数的看法也是莫衷一是。本文通过讲解什么是魔法数,eslint 是如何检测魔法数,魔法数的危害有哪些,以及如何在代码中避免使用魔法数,并通过一些实践建议帮助大家写出高质量的代码。
魔法字符串是什么?
魔法字符串,顾名思义,就是代码中出现的未被明确定义的字符串常量。例如:
// 这是一个魔法字符串
const myString = 'Hello World!';
这个字符串常量没有被明确定义,也没有被赋予任何语义,仅仅是一个文本文字。
eslint是如何检测魔法字符串的?
ESLint 使用正则表达式来检测魔法字符串。正则表达式为:
/('.*?')|(^|\W)"(.*?)"(\W|$)/g
该正则表达式匹配以下类型的字符串:
- 单引号或双引号括起来的字符串
- 不是以字母或下划线开头,也不是以字母、数字或下划线结尾的字符串
魔法字符串的危害有哪些?
魔法字符串的危害主要有以下几点:
- 可读性差。魔法字符串难以理解和维护,因为它没有被明确定义,也没有被赋予任何语义。
- 可维护性差。魔法字符串不易于修改,因为它们没有被明确定义。
- 可扩展性差。魔法字符串不易于扩展,因为它们没有被明确定义。
- 可重用性差。魔法字符串不易于重用,因为它们没有被明确定义。
如何在代码中避免使用魔法字符串?
在代码中避免使用魔法字符串,可以通过以下几个方法:
- 使用字符串常量。字符串常量是一种明确定义的字符串,它可以被赋予语义,并可以被重用。
- 使用模板字符串。模板字符串是一种新的字符串语法,它允许使用表达式来动态生成字符串。
- 使用i18n工具。i18n工具是一种国际化工具,它可以帮助将字符串翻译成不同的语言。
- 使用正则表达式。正则表达式是一种强大的字符串处理工具,它可以帮助查找和替换字符串中的文本。
实践建议
为了帮助大家写出高质量的代码,这里有一些实践建议:
- 在代码中避免使用魔法字符串。
- 使用字符串常量、模板字符串、i18n工具和正则表达式来处理字符串。
- 使用ESLint来检测代码中的魔法字符串。
- 定期对代码进行Code Review,以发现和修复代码中的问题。
总结
魔法字符串是一种危害很大的代码风格,它会降低代码的可读性、可维护性、可扩展性和可重用性。在代码中避免使用魔法字符串,可以显著提高代码的质量。