因此,我目前正在学习JavaScript,而正在教我目前正在观看的课程的讲师不断谈论降低循环复杂性。他使用了一些我无法理解的技巧。我想我理解为什么将switch语句替换为map会降低循环复杂性的原因-从许多可能的情况来看,只有一种。但是,他一直在做以下类似的事情来降低圈复杂度:
if (condition) {
arr.push(element);
} else {
arr.pop();
}
成为:
const actionsMap = {true: "push", false: "pop"};
arr[actionsMap[condition]](element);
我更喜欢第二个,但是它如何降低圈复杂度?现在仍然有两种情况只能以另一种方式调用。如果这确实降低了圈复杂度,是否可以将每个键替换为具有真假键的映射以降低圈复杂度?他还使用||和&&来降低循环复杂度,但我已经将它们列为循环复杂度的一部分。如何降低圈复杂度?在相同条件下,它不只是形状不同吗?
编辑:我确实意识到有些switch语句不能轻易被map取代。感谢您指出降低的可维护性,但是我的问题是:降低复杂度在这里如何工作?为什么actionMap比if更好。这不是条件吗?另外,逻辑运算符如何降低复杂度?
return (a>5 && a) || a-1;
就圈复杂度而言,这比以下哪一项更好:
if (a>5) return a;
else return a-1;
我知道这些示例不是生产质量代码,但是它们很好地说明了我的观点。
IMO,作为开发人员,您的首要任务是编写以下代码:
如果您的项目像第二个示例一样充满了代码片段,那么下一个要维护它的人将会遇到很多困难。这很好地演示了如何使用替代模式来实现相同的结果,但是对我来说,替换简单的if / else实在是太过分了。