2012-02-28 98 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

相關問題