Javascript 让一个函数返回另一个函数的倒数值得吗?

Javascript 让一个函数返回另一个函数的倒数值得吗?,javascript,readability,syntactic-sugar,Javascript,Readability,Syntactic Sugar,我最近在我们的内部javascript库中添加了一个HasValue函数: function HasValue(item) { return (item !== undefined && item !== null); } A在与一位同事的讨论中,我们想到了添加另一个函数的想法,该函数基本上是相反的:可能是HasNoValue,或者是IsNothing 如果我们最终这样做,我们会: function HasNoValue(item) { return (item

我最近在我们的内部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);
}
但是,我们不确定这两种方法是更具可读性,还是更具价值。 哪个更容易阅读/更喜欢

A:

B:


与B相比,我更喜欢A.“!”是一个大家都应该理解的编程习惯用法。

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

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

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

到目前为止,我投的是A


对于每一个布尔函数来说,这样做的额外维护负担不值得理解,而且很容易理解,“事实上,我相信“B”实际上是不可读的,因为它很容易错过中间名中的“否”。

< P>我将坚持选择A,但那只是我。

< P >如果<代码>!HasValue(y)和
HasNoValue(y)
保证在
y
的整个输入范围内逻辑等效,那么我更喜欢
!HasValue(y)


我甚至不愿意使用名为HasNoValue(y)的函数,因为不可避免地会有人编写
!HasNoValue(y)

我知道我会独自接受这个观点,如果我在一个合作项目中面对这个选择,我肯定会选择a,因为这很明显是正确的,但我必须说我很欣赏选项B的冗长。文字比符号更容易阅读和理解,即使它像我们心爱的老感叹号一样平凡


特别是现在IDE的智能感知比以前好了很多,我通常倾向于选择比以前更详细的命名方式。10次中有9次,可读性压倒了小的性能差异,这是显而易见的。

what is!==我知道了是正在使用!==not的等价物==?我以前从未见过这种用法。@John Isaacks是的is to===as!=is to==@John:请参阅有关===和!==的信息的答案在JavaScript中。@John-是的,确实如此,但在这种情况下,我不得不质疑它,因为一个简单的“item!=undefined”会捕获一个未定义的值和一个空值,为什么不用一个cap来启动函数名呢?事实上,这正是库最初的设计方式,所以我也这么做了。对,这就是为什么我们提出了第二个选择,最后我确实认为A是正确的解决方案,但我喜欢可读性。我非常同意这一点。我讨厌人们编写像
这样的代码,而(!IsNotDisabled())…
,因为我花了太多的脑力去找出否定的所有否定。返回布尔值的函数名称中不应有
not
或任何变体。
if (HasValue(x) && HasNoValue(y))
if ( HasValue(x) && !(HasValue(y)) )