你好!今天的課不會很長,但絕對有用:) 我們要講的就是所謂的三元運算符。
三元的意思是“由三部分組成”。
順便說一句,條件周圍的括號不是必需的:我們添加它們是為了提高可讀性。它也可以在沒有它們的情況下工作:
它匯集了針對程序員的最佳實踐和建議,這將幫助您編寫不僅實用而且易於閱讀的代碼。

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 
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》就是專門討論這個話題的。 
GO TO FULL VERSION