0

我在我的插件中写了一个 else / if 语句,但为了优化(更少的代码)我希望它更短。

if ( self.first() ) {

    if ( self.second() ) {
        self.run();
    }
    else {
        self.other_run();
    }

}
else {
    return false;
}

例子

if ( check cookie is true ) {
    if ( check timezone is true  ) {
     run sth
    }
    else {
     run other thing
    }
}
else {
    do nothing
}

关于什么?

if ( self.first() ) {
    self.second ? self.run() : self.other_run();
}
else {
    return false;
}

这样写可以吗?

return self.first() ? ( self.second() ? self.run() : self.other_run() ) : false;
4

2 回答 2

0
self.first() ? ( self.second() ? self.run() : self.other_run() ) : false;

应该可以正常工作,但我不确定你为什么要这样混淆你的代码。

于 2013-09-23T14:22:39.413 回答
0

(请记住,“更短”的代码并不总是“更好”的代码。)

这可能有用,用一些明确的括号来分隔你的包装语句。虽然阅读/理解并不容易。像这样的东西怎么样?:

if (self.first() && self.second()) {
    self.run();
    return;
}
if (self.first()) {
    self.other_run();
    return;
}
return false;

这遵循 Martin Fowler 的重构模式,称为Replace Nested Conditional With Guard Clauses

这也更清楚地表明您的函数并不总是返回布尔值。(在我写这篇文章之前我没有立即注意到。)也许你的意思是这样做(一个在过于简短的代码版本中没有注意到的错误)?:

if (self.first() && self.second()) {
    self.run();
    return true;
}
if (self.first()) {
    self.other_run();
    return true;
}
return false;

当然,这段代码显然是假的,只是为了证明一个观点。但是,如果条件子句确实开始变得笨拙,您总是可以将它们提取到自己的函数中:

if (somethingIsTrue()) {
    self.run();
    return true;
}
if (somethingElseIsTrue()) {
    self.other_run();
    return true;
}
return false;
于 2013-09-23T14:25:53.637 回答