2012-02-28 95 views
0

我使用:是否可以使用&&并在同一行上设置变量?

MyTestFunction() && ExecuteMe(); 

快速便捷条件执行。我想通过创建提高了代码的可读性,更在一些地方:

  1. 单线后卫statments即:

    MyTestFunction() && return; 
    //prevent execution of function early, but this isn't possible 
    
  2. 单线可变setter方法:

    MyTestFunction() && myVar = 5; 
    

    (我知道我可以做myVar = MyTestFunction() || 5;但那不是我想要的)

任何人都看到一个很好的解决方法?

+2

为什么不使用'if'语句编写更多可读的代码并使用它呢?简洁不是编写代码的首要目标。当它妨碍所有其他更重要的目标如正确性和可读性时,应该牺牲简洁性。 – jfriend00 2012-02-28 02:39:05

+0

是的,我同意,我喜欢imm提供的单行任务,但对于单线控制语句,我认为缺乏更好的解决方案,我将使用:if(!myTest()){return ; } – Baconbeastnz 2012-02-28 02:48:52

回答

3

这个工作对我来说:

var num; 
TestFunc() && (num = 5); 
+0

太棒了!这些括号允许单行分配很好! – Baconbeastnz 2012-02-28 02:47:32

1

虽然我明白程序员天生就希望在更少的代码行中做更多的事情,但我认为这违反了一些关于代码清晰度的良好编程原则。 Terse代码可以节省空间,但是对于下一位查看代码的程序员来说,维护更加困难(并且您应该始终假定会有“下一个程序员”)。

0

我相信你想使用的三元声明

良好的线程在这里: Operator precedence with Javascript Ternary operator

+0

不能用三元组!!myTest()?返回; : 空值;是无效的语法。 – Baconbeastnz 2012-02-28 02:44:46

+0

由于原始表达式只有两个部分,如何用三元运算符重写'MyTestFunction()&& myVar = 5;'?你可以说'MyTestFunction()? myVar = 5:void 0;'但这不是很有用。 – nnnnnn 2012-02-28 02:47:28

1
MyTestFunction() && (myVar = 5);   // note the parens 

// has the same effect as 

if (MyTestFunction()) myVar = 5; 

但我认为后者是多少更具可读性,因此更易于维护。

+0

谢谢,看起来像是如果你在任务周围添加括号,你可以做到这一点 – Baconbeastnz 2012-02-28 02:47:52

+0

你是对的,是的,我忘了这一点。答案已更新。 – nnnnnn 2012-02-28 02:51:47

相关问题