编写单行if语句的最佳方法

时间:2013-02-12 14:38:25

标签: javascript

所以我在过去的5年里一直用JavaScript编写,并且都是自学成才。我遇到越来越多的程序员时遇到的一个问题。我发现我并不总是以最好的方式编码。

我一直在试图找出在JS中编写单行if语句的最佳方法。我不关心可读性,项目不是开源的,所以我并不担心其他人加入它。

我如何写我的陈述

condition = true;
if (condition)
  runFunction();
else
  runSecondFunction();

但我发现每个人都在告诉我使用括号。我一直在写这个,因为他们总是抛出以下一行“它使阅读更容易”

condition = true;
if (condition) {
  runFunction();
}else{
  runSecondFunction();
}

最后有人终于告诉我,我应该写if语句,以便更接近我在C#中编写的内容,如下所示

condition = true;
if (condition) 
{
  runFunction();
}
else
{
  runSecondFunction();
}

当然还有速记,但我通常只用它来切换像这样的变量

condition = true;
(condition) ? condition = false : condition = true;

但是也可以使用常规if语句的简写。例如:

condition = true;
(condition) ? runFunction() : runSecondFunction();

所以问题是

在编写单行JavaScript的所有方法中,这是编程以最快速运行的最佳方法。我不关心可读性,所以请不要说建议以这种方式或那样写它,因为它更容易阅读。还请举例说明为什么一种方式比另一种方式更快或更慢。

要清除

我不关心可读性并不是说这些陈述对我来说都难以阅读,它们在所有版本中对我都有意义。所以你们中的一些人可能认为难以阅读我可能不会。这就是我下一步的原因,因为这些都不是我难以阅读的,也许我应该把它写成JS处理它的最佳方式。

例如,我发现JS需要更长时间才能运行

counter++;

然后呢

counter = counter + 1;

所以最后要清楚我没有问题阅读其中任何一个,我只想知道哪个最适合JS处理。

4 个答案:

答案 0 :(得分:3)

看看一些jsperf测试:

它们似乎都相对平等(除了我刚刚运行的测试中布尔版本更慢),所以我会选择你喜欢的最佳外观。

答案 1 :(得分:1)

你的速记可以缩短:

而不是:

(condition) ? condition = false : condition = true;

尝试:

condition = condition ? false : true;
var a = condition ? 'conditionTrueValue' : 'conditionFalseValue';
// Or in this case, since you're just toggling the boolean:
condition = !condition;

而不是:

(condition) ? runFunction() : runSecondFunction();

您可以保存以下几个字符:

(condition ? runFunction : runSecondFunction)();

现在,这方面的表现差异(如果有的话)将是微不足道的。

让您的代码可读。如果你必须在一年内回到你的代码,你会很高兴。

答案 2 :(得分:0)

我通常会因为将每个花括号放在单独的行中而感到烦恼,我不喜欢那个闭合的花圈后来有一些东西。另外,我不喜欢它们根本不用的时候。

这将是我的方式。

condition = true;
if (condition) {
  runFunction();
}
else {
  runSecondFunction();
}

当问题是关于三元的时候,我不得不说,只有当条件或结果中没有涉及函数时才使用它。

result = (number == 521 : "equal to 521" : "some other number");

我关心我的代码的可读性,重要的是,当你有几千行代码的文件时,看起来非常相似 - 如果它是不可读的,很难调试或升级代码。

答案 3 :(得分:0)

如果你'真的'不关心可读性/可维护性,那就按照感觉最舒服的方式写它。

根据我的编程经验,人们推荐使用大括号的原因是为了可维护性,当有人必须为if语句添加一段代码时,一个参数是,如果你输入一次,你就不会必须记住在需要代码块而不是单个语句时插入它。

我建议使用下面的表单,因为Javascript有一些带有大括号的怪癖(来自内存),我相信它与闭包/函数的概念有关)某些代码将无法运行。当我调试破碎的代码然后我读了它但很久以前,它让我感到惊讶。

if (expression) {
}

至于性能因素,我认为这更多地与正在执行的逻辑和代码有关,而不是你编写if语句的方式。