CodeGym /Java Blog /Toto sisi /三元運算符
John Squirrels
等級 41
San Francisco

三元運算符

在 Toto sisi 群組發布
你好!今天的課不會很長,但絕對有用:) 我們要講的就是所謂的三元運算符三元運算符 - 1三元的意思是“由三部分組成”。if-else它是您已經遇到的控制流語句的替代方法。讓我們舉個例子。假設有人決定去看一部 R 級電影(17 歲以下需要父母或成年監護人陪同)。接待員在門口檢查年齡:如果年齡檢查合格,則允許進入;如果沒有,他將被送回家。讓我們聲明一個Person類並使用if-else語句檢查它:

public class Person {

   private int age;

   public Person(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
控制台輸出:

"Everything is in order. Come in!"
如果我們刪除控制台輸出,那麼我們的檢查如下所示:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
這裡的邏輯非常簡單:檢查一個條件(年齡 >= 18),根據結果,usherResponse將變量分配給兩個字符串之一,並附上引座員的回复。這種情況(“一種情況 - 兩種可能的結果”)在編程中極為常見。這就是創建三元運算符的原因。我們可以使用它來將我們的檢查簡化為一行代碼:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
下面是這個運算符的工作原理。它被稱為三元運算符,因為它涉及 3 個組件:
  • 一個條件 ( person.getAge() > 18)
  • 兩種可能的結果(“一切正常。進來吧!”“這部電影不適合你的年齡!”
首先,我們寫下條件,然後是問號。

person.getAge() > 18 ?
“這個人的年齡超過十八歲了嗎?” 然後我們寫入第一個值如果條件評估為true:,則使用此值:

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
這個人的年齡是否超過 18 歲?如果是,將 usherResponse 變量設置為“一切正常。進來吧!” 接下來是“ :”符號和第二個值如果條件評估為false:,則使用此值:

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
這個人的年齡是否超過 18 歲?如果是,將 usherResponse 變量設置為“一切正常。進來吧!” . 如果不是,請將 usherResponse 變量設置為“這部電影不適合您的年齡!” 通常,三元運算符的邏輯如下所示。健康)狀況 ?outcome 1 : outcome 2 三元運算符 - 2順便說一句,條件周圍的括號不是必需的:我們添加它們是為了提高可讀性。它也可以在沒有它們的情況下工作:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
那麼你應該使用什麼?語句if-else還是三元運算符?在性能方面,沒有區別。更準確地說,也許有,但微不足道。這裡最大的考慮是代碼的可讀性。您編寫的代碼不僅要能正常工作,而且要易於閱讀。畢竟,它可能會被其他程序員、您的同事“繼承”!如果很難理解,就會使他們的工作和你的工作複雜化(他們會每 5 分鐘跑來找你解釋)。 一般的建議是:如果條件簡單且易於驗證,則可以無害地使用三元運算符。這使您可以減少代碼量和if-else聲明(可能已經有很多)。但是如果條件比較複雜,涉及多個步驟,還是用if-else語句比較好。例如,在這種情況下使用三元運算符不是一個好主意:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
目前還不清楚這裡發生了什麼!代碼變得非常難以閱讀。而這一切都是因為複雜的條件:
  • 如果有人年滿 18 歲,有門票(或免費通行證)並且沒有年幼的孩子,他可以進來。
  • 如果條件的一部分是假的,那麼他就不能。
這裡顯然使用if-else. 是的,我們的代碼會更大,但會更易讀。而且你的同事如果繼承了這段代碼就不會打臉了:) 最後,我可以為你推荐一個好東西。我們在課程中談到了代碼的可讀性。Robert Martin 的經典之作《Clean Code》就是專門討論這個話題的。 三元運算符 - 4它匯集了針對程序員的最佳實踐和建議,這將幫助您編寫不僅實用而且易於閱讀的代碼。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION