Javascript long else / if语句以最短的方式

Posted

技术标签:

【中文标题】Javascript long else / if语句以最短的方式【英文标题】:Javascript long else / if statement in a shortest way 【发布时间】: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 返回的任何内容)。 更少的代码通常很好,但在像这样的大逻辑场景中,你只会混淆并使逻辑在未来更难阅读(尤其是对于其他程序员)。我仍然相信最好的方法是第一种方法。 【参考方案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;

【讨论】:

以上是关于Javascript long else / if语句以最短的方式的主要内容,如果未能解决你的问题,请参考以下文章

Javascript切换与if ... else if else

javascript中用&&跟||来简化if{}else{}的写法

JavaScript if...Else 语句

Javascript 条件返回语句(简写 if-else 语句)

简写 if/else 语句 Javascript

javascript中的if / if else逻辑