gpt4 book ai didi

javascript - 应该重构这个如果否则

转载 作者:行者123 更新时间:2023-11-28 06:39:51 24 4
gpt4 key购买 nike

有人给了我关于如何重构 if-else 代码的示例。

function doSomething(a) {
if (a === 'x') {
doX();
} else if (x === 'y') {
doY();
} else {
doZ();
}
}

它应该重构为:

function doSomething(a) {
var lookup = {x: doX, y: doY}, def = doZ;
(lookup[a] || def)();
}

但我说这是一个坏例子。第一段代码已经足够样本了。我认为有那些 if-else 是可以的。第二段代码不如第一段清晰。

然后他给了我另一个例子:

function rank(score) {
var star
if (score > 89) {
star = 9
} else if (score > 74 && score < 90) {
star = 8
} else if (score > 59 && score < 75) {
star = 7
} else if (score > 44 && score < 60) {
star = 6
} else if (score > 29 && score < 45) {
star = 5
} else if (score >10 && score < 30) {
star = 4
} else if (score > 8 && score < 11) {
star = 3
} else if (score > 6 && score < 9) {
star = 2
} else if (score < 7) {
star = 1
}
return star
}

我仍然认为它被接受了。它并不大也不复杂。很容易知道正在做什么。我将像这样编码,只是删除 && 之后的条件。我不喜欢像这样写那么多if-else,但我找不到更好的方法。

我问他如何重构它,他给了我他重构的代码。

function rank(score) {
var ranges = {
9: [90: Infinity],
8: [75, 90],
7: [60, 75],
6: [45, 60],
5: [30, 45],
4: [11, 30],
3: [9, 11],
2: [7, 9],
1: [-Infinity, 7]
}
var count = _.findKey(ranges, function(range) {
return range[0] <= score && score < range[1]
})
return count >>> 0
}

我认为重构后的代码比原始代码复杂,容易出错。而且我不喜欢使用 HashMap 来重构 if-else。

他说我应该读一些关于函数式编程的文章。他们没有 if-else。他们使用模式匹配和防护。我对 Scala 和 Haskell 知之甚少。我认为模式匹配就像 switch 语句一样。只是更强大。

我从 wiki 中复制了一段 Haskell 代码:

describeLetter :: Char -> String
describeLetter c
| c >= 'a' && c <= 'z' = "Lower case"
| c >= 'A' && c <= 'Z' = "Upper case"
| otherwise = "Not an ASCII letter"

如果我用Haskell来写这个逻辑,我会这样写,而且我觉得和原始代码类似,而不是他重构后的代码。

我的问题是,原始代码和重构代码哪个更好?为什么?或者还有其他方法可以重构这段代码吗?

使用 HashMap 来重构 if-else 是一个好习惯吗?

感谢您的回答!

最佳答案

我认为答案取决于您的情况。

如果您自己工作,请选择您更喜欢的工作风格;毕竟,您是要(重新)阅读您的代码的人 - 您需要能够相当容易地理解它。我想说,如果你能训练自己一眼就能理解 HashMap ,那就去做吧,它将节省键盘上那些宝贵的敲击。

如果您在专业环境中工作,您必须明白此代码不是“您的”。您的同事以及您的许多继任者都将阅读此代码。您需要确保您的代码尽可能具有可读性和连贯性 - 如果各处额外的 1-2 行代码使整个程序更具可读性,那么投资是值得的。没有什么比从那些在编写时试图“太聪明”的人那里继承代码更糟糕的了,最终却得到了难以阅读的复杂代码块,即使对于作者来说也是如此。

您还必须考虑同事的偏好,也许甚至有一个指南来规定如何在代码中写出这些情况。在这些情况下,您应该选择团队选择的首选样式 - 有时这可能是可读性较差的版本,但连续性也将有助于确保易读性。

关于javascript - 应该重构这个如果否则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com