【问题标题】:Javascript long else / if statement in a shortest wayJavascript long else / if语句以最短的方式
【发布时间】:2013-09-23 14:19:34
【问题描述】:

我在我的插件中写了一个 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;

【问题讨论】:

  • 那不一定运行得更快。另外,return 声明呢?
  • 截至您的编辑时,那些仍然没有做完全相同的事情。如果self.first() 为真,则第一个版本不会返回;第二个版本会(它返回 runother_run 返回的任何内容)。
  • 更少的代码通常很好,但在像这样的大逻辑场景中,你只会混淆并使逻辑在未来更难阅读(尤其是对于其他程序员)。我仍然相信最好的方法是第一种方法。

标签: javascript if-statement short


【解决方案1】:
self.first() ? ( self.second() ? self.run() : self.other_run() ) : false;

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

【讨论】:

    【解决方案2】:

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

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

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-26
      • 2012-11-26
      • 2021-09-11
      • 2016-06-21
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多