亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用條件?:(三元)運算符的好處

使用條件?:(三元)運算符的好處

C#
瀟瀟雨雨 2019-07-03 09:57:06
使用條件?:(三元)運算符的好處與標準的if-etc語句相比,?:操作符的優缺點是什么?顯而易見的是:有條件的?:運算符在處理直接值比較和賦值時更短、更簡潔似乎不像if/Else構造那樣靈活。標準IF/Else可以應用于更多情況(例如函數調用)。往往是不必要的長根據語句的不同,每個語句的可讀性似乎各不相同。在第一次接觸到?:操作符之后,我花了一段時間來理解它是如何工作的??紤]到我與許多非程序員一起工作,您會建議在可能的情況下使用它嗎?還是堅持使用if/Else?
查看完整描述

3 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

我基本上建議,只有在結果語句非常短并且相對于if/etc等效時,簡潔性顯著增加而不犧牲可讀性時,才建議使用它。

很好的例子:

int result = Check() ? 1 : 0;

壞例子:

int result = FirstCheck() ? 1 : SecondCheck() ? 1 : ThirdCheck() ? 1 : 0;


查看完整回答
反對 回復 2019-07-03
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

其他答案幾乎涵蓋了這一點,但“這是一個表達”并不能真正解釋為什么這是如此有用的.

在C+和C#等語言中,可以使用它們定義本地只讀字段(在方法體中)。這在常規if/list語句中是不可能的,因為必須在該語句中分配只讀字段的值:

readonly int speed = (shiftKeyDown) ? 10 : 1;

與以下不同:

readonly int speed;  if (shifKeyDown)  
    speed = 10;    // error - can't assign to a readonlyelse  
    speed = 1;     // error

以類似的方式,您可以在其他代碼中嵌入一個三級表達式。除了使源代碼更緊湊(在某些情況下,它的可讀性更強)之外,它還可以使生成的機器代碼更加緊湊和高效:

MoveCar((shiftKeyDown) ? 10 : 1);

.可能生成的代碼比必須調用同一方法兩次更少:

if (shiftKeyDown)
    MoveCar(10);else
    MoveCar(1);

當然,它也是一種更方便、更簡潔的形式(更少的輸入、更少的重復,并且如果必須在if/etc中復制代碼塊,則可以減少出錯的可能性)。在這種干凈的“常見模式”情況下:

object thing = (reference == null) ? null : reference.Thing;

..閱讀/解析/理解(一旦你習慣了)要比冗長的if/etc更快,所以它可以幫助你更快地“摸索”代碼。

當然,僅僅是因為有用并不意味著這是最好的使用在每一種情況下。我建議只在含義明確(或更清楚)的短代碼中使用?:-如果您在更復雜的代碼中使用它,或者在彼此之間嵌套三元操作符,則會使代碼很難讀懂。


查看完整回答
反對 回復 2019-07-03
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

當我有很多重復的代碼時,我通常會選擇一個三元操作符,否則。

if (a > 0)
    answer = compute(a, b, c, d, e);else
    answer = compute(-a, b, c, d, e);

使用三元操作符,可以通過以下方法實現這一點。

answer = compute(a > 0 ? a : -a, b, c, d, e);


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 899 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號