是否值得努力使函数返回另一个函数的反函数?

chi*_*s42 5 javascript readability syntactic-sugar

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

function HasValue(item) {
    return (item !== undefined && item !== null);
}
Run Code Online (Sandbox Code Playgroud)

在与同事交流期间,我们提出了添加另一个基本上只是反过来的函数的想法:也许是HasNoValue,或IsNothing如果我们最终做到了这样我们会:

function HasNoValue(item) {
    return (item === undefined || item === null);
}
function HasValue(item) {
    return !HasNoValue(item);
}
Run Code Online (Sandbox Code Playgroud)

但是,我们不确定它们和HasValue是否更具可读性.哪个更具可读性/首选?

A:

if (HasValue(x) && !HasValue(y))
Run Code Online (Sandbox Code Playgroud)

B:

if (HasValue(x) && HasNoValue(y))
Run Code Online (Sandbox Code Playgroud)

Dan*_*Lew 20

我非常喜欢A到B."!" 是一个应该被所有人理解的编程习语.


Bil*_*ard 12

如果!HasValue(y)并且HasNoValue(y)保证在整个输入范围内在逻辑上等效y,那么我更喜欢!HasValue(y).

我甚至会犹豫,甚至一个名字的功能HasNoValue(y)因为不可避免地有人会写!HasNoValue(y).


ann*_*ata 8

到目前为止,我正在投票"A" .

对于每个和任何布尔返回函数执行此操作所带来的额外维护负担是不值得的,相对于易于理解且非常易读的"!",实际上我认为"B"实际上不太可读,因为它很容易错过名字中间的"否".