簡體   English   中英

三元運算符如何工作?

[英]How does the ternary operator work?

請演示三元運算符如何與常規 if/else 塊配合使用。 示例:

Boolean isValueBig = value > 100 ? true : false;

完全重復: 如何使用三元運算符?

Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

if(  value > 100 ) { 
      isValueBig = true;
} else { 
     isValueBig = false;
}

三元運算與 if/else 的區別在於,三元表達式是求值結果的語句,而 if/else 則不是。

要使用您的示例,從使用三元表達式更改為 if/else 您可以使用以下語句:

Boolean isValueBig = null;
if(value > 100)
{ 
    isValueBig = true 
}
else
{
    isValueBig = false;
}

但是,在這種情況下,您的語句等效於:

Boolean isValueBig = (value > 100);

當我剛接觸 C++ 時,我發現它有助於閱讀以下構造:

Boolean isValueBig = if condition ? then x else: y;

(請注意,這不是有效代碼。這只是我訓練自己在腦海中閱讀的內容。)

Boolean isValueBig;

if (value > 100)
{
   isValueBig = true;
}
else 
{
   isValueBig = false;
}

我從來不是三元運算符的粉絲,因為我認為它很難閱讀。 碰巧的是,Jon Skeet 和他的書, C# in Depth最終擊中了這只老狗的頭,讓它沉入其中。Jon 說,我解釋說,把它當作一個問題。

值 > 100?

“是”:“否”

現在盲人可以看見了。

希望這可以幫助您使其成為第二天性。

Boolean isValueBig;

if(value > 100) { isValueBig = true; } else { isValueBig = false; }

正如引用自?: Operator MSDN page ,“條件運算符 (?:) 根據布爾表達式的值返回兩個值之一。”

因此,您可以使用三元運算符返回的不僅僅是布爾值:

   string result = (value > 100 ) ? "value is big" : "value is small";

PHP 示例

<?php

  // Example usage for: Ternary Operator
  $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

  // The above is identical to this if/else statement
  if (empty($_POST['action'])) {
    $action = 'default';
  } else {
    $action = $_POST['action'];
  }

?>

“表達式(表達式1)(表達式2):(表達式3)的計算結果為表達式2如果expr1的評估為,並且如果表達式3 expr1的評估為”。

關於比較運算符的 PHP 文檔

不好的例子,因為你可以很容易地寫

Boolean isValueBig = value > 100 ? true : false;

如:

bool isValueBig = value > 100

除此之外,其他人都已經回答了。 我只是不建議使用三元運算符來設置 bool 值,因為您正在評估的已經是一個布爾值。

我意識到這只是一個例子,但值得指出。

確保不要在 Java 中的真/假部分混合類型。 它產生奇怪的結果:-(

其他人已經回答了它,但是關於三元的用法,您應該真正了解一件事,我的意思是永遠不要這樣做。

讓我們假設你有一段代碼,它應該為某個值的每個可能的變化返回一個不同的對象,為了簡單起見,我們假設一個 1 到 5 之間的整數。你的代碼如下所示:

if(i==1) {
    return new ObjectOne();
} else if(i==2) {
    return new ObjectTwo();
} else if(i==3) {
    return new ObjectThree();
} else if(i==4) {
    return new ObjectFour();
} else if(i==5) {
    return new ObjectFive();
} else {
    return new DefaultObject();
}

這很容易理解,但有點沉重。 由於三元只是編寫 if..else 語句的另一種方式,可以重構為

return (i==1) ? new ObjectOne() :
       (i==2) ? new ObjectTwo() :
       (i==3) ? new ObjectThree() :
       (i==4) ? new ObjectFour() :
       (i==5) ? new ObjectFive() : new DefaultObject();

它被稱為嵌套三元 這是邪惡的,既然你知道了,請永遠不要使用它。 它的用途似乎與上面的情況類似,但很可能在現實生活中,您需要在失去可讀性的地方使用它(考慮使用可變數量的參數更改配置等)。

獎勵部門:永遠不要在 if() 中設置屬性值,看看這個: if(bool=true!=false) { .. }

引用自 MSDN(在前一篇文章中提到)

字符串結果 = (值 > 100 ) ? "價值大" : "價值小";

可以讀作:

值是否大於 100? 如果是,字符串結果是“值大”,如果不是,字符串結果是“值小”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM