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()
为真,则第一个版本不会返回;第二个版本会(它返回 run
或 other_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{}的写法