5

我最近在我们的内部 javascript 库中添加了一个 HasValue 函数:

function HasValue(item) {
    return (item !== undefined && item !== null);
}

A 在与同事的交谈中,我们提出了添加另一个基本上只是相反的函数的想法:也许 HasNoValue 或 IsNothing 如果我们最终这样做,我们将拥有:

function HasNoValue(item) {
    return (item === undefined || item === null);
}
function HasValue(item) {
    return !HasNoValue(item);
}

但是,我们不确定两者兼有或 HasValue 是否更具可读性。哪个更易读/更受欢迎?

A:

if (HasValue(x) && !HasValue(y))

乙:

if (HasValue(x) && HasNoValue(y))
4

7 回答 7

20

我非常喜欢A而不是B。“!” 是大家都应该理解的编程成语。

于 2009-04-23T15:56:33.593 回答
12

如果!HasValue(y)HasNoValue(y)保证在 的整个输入范围内是逻辑等价的y,那么我会非常喜欢!HasValue(y).

我什至会犹豫是否要命名一个函数HasNoValue(y),因为不可避免地有人会写!HasNoValue(y).

于 2009-04-23T16:03:48.663 回答
8

到目前为止,我投票“A” 。

与易于理解且可读性强的“!”相比,为每个布尔返回函数执行此操作所带来的额外维护负担是不值得的,事实上,我相信“B”实际上可读性较差,因为它很容易错过名字中间的“No”。

于 2009-04-23T15:57:44.543 回答
2

我知道我会很孤单,如果我在一个合作项目中面临这个选择,我肯定会选择 A,因为很明显这是正确的做法,但我不得不说我很欣赏选项 B 的冗长。文字比符号更容易阅读和理解,即使它像我们心爱的感叹号一样平凡。

尤其是现在 IDE 的智能感知比以前好得多,我通常倾向于选择比以前更详细的命名方式。十分之九,可读性胜过小的性能差异,放下手。

于 2009-04-23T16:08:19.713 回答
1

只是为了减少代码行并且因为您的函数返回布尔值,我会说使用方法 A。如果您必须担心可读性,您可以随时尝试:

if ( HasValue(x) && !(HasValue(y)) )
于 2009-04-23T15:57:26.353 回答
0

我会说选项 A 更清楚,您确切知道它的含义。

于 2009-04-23T15:57:26.900 回答
0

我会坚持选项A,但那只是我。

于 2009-04-23T15:59:09.110 回答