2012-12-25 41 views
3

我想知道:「三元運算符何時比'if-else'塊更糟?」三元運算符何時比簡單的if-else塊更糟?

我想,這可能是與調試的時間(例如三元運算符是不好的調試)

這樣的美女有用嗎?也許有些情況下簡單if-else塊更適合使用?

謝謝

+1

恕我直言,三元運營商幾乎無處不在。任何具有體面經驗的程序員應該沒有問題調試它們。 –

+0

@VaibhavDesai由於我測試了一些弱IDE |調試器可能會使用三元運算符跳過確切的表達式,但如果只有if-else塊,則不會跳過。 Visual Studio可以正常工作,但不太有名的功能強大的IDE /調試器通常會跳過這樣的表達式,並且您可能不僅僅在調試器中通過三值運算符在調試時查看該表達式中的某些值。 – Secret

+0

正如馬克在下面回答的那樣,你指的是僅僅看着表達式不會告訴你任何事情的情況。那麼也可以去if-else。 –

回答

6

當你要根據條件計算兩個簡單的表現之一,做一些簡單,結果(例如其分配給一個變量或歸還)三元運算符是非常有用的。像這樣的東西是三元運算符的可接受的使用:

var status = a.isActive() ? a.status : defaultStatus; 

如果你的代碼複雜得多,這則它通常是更清晰的if語句,否則你可能試圖做太多的單行使用碼。這不僅僅是簡單的調試 - 複雜表達式的冗長線條很難理解。

在許多語言中,不允許在? :表達式中使用語句(而不是表達式)。如果您需要執行一系列語句,則除了使用if語句外別無選擇。

+0

即使對於調試時的簡單表達式它可能沒有用處(或者它是更多關於調試器的問題,也許一個會給你正確的調試,但其他人會跳過三元運算符,不是嗎?) – Secret

+0

@OlegOrlov:三元運算符不會被跳過。與用if語句編寫的相同代碼相比,在三元運算符中遍歷代碼可能更困難,但這取決於您的IDE如何支持它。 –

1

三元組應該用於非常簡單的分支,僅在一個語句中,IMO。我會說,爲了清楚起見,任何時候你都想在多行上寫一個三元組,現在是時候使用其他形式的分支了。我個人也發現複合三元運算符很難閱讀並認爲它是不好的形式。

而忘了IDE。如果你必須能夠在調試器中完全分解所有的小東西來理解你的代碼,那麼你就會遇到更大的結構問題。

在JavaScript中,我傾向於只在函數開頭的初始var聲明塊中使用三元組,當我根據函數參數進行設置時。他們主要評估非常簡單的事情,如數組的長度,可選參數的存在或參數的類型。除了最初的準備點之外,邏輯通常會變得更加複雜或需要多個簡單的檢查,因此使用基於塊的切換結構或某種映射形式拼出它更有意義。

但是,如果沒有IDE,首先要考慮易讀性。組織好你的代碼,好像你沒有IDE一樣會幫助你更好地理解代碼,IMO。