Java - 選擇表達式

你好,未來的Java程序設計師!今天,我們將深入探討Java 12中引入並在Java 14中增強的最激動人心的功能之一:選擇表達式。作為你友善的鄰居計算機科學老師,我將在此旅程中引導你,即使你之前從未寫過一行代碼。所以,系好安全帶,我們開始吧!

Java - Switch Expressions

選擇表達式是什麼?

在我們跳入選擇表達式之前,讓我們快速了解一下選擇語句是什麼。想象一下,你在一個冰淇淋店,根據你的口味選擇,你會得到不同的配料。這基本上就是程序設計中的選擇語句所做的——它允許你根據不同的條件執行不同的代碼。

現在,選擇表達式採用了這個概念,並使其更加强大和簡潔。它允許我們將整個選擇區塊視為可以返回值的表達式。這就像從普通的冰淇淋甜筒升級到豪華聖代一樣!

舊方法:傳統的選擇語句

讓我們從一個傳統的選擇語句開始,看看我們以前是如何做事的:

String day = "MONDAY";
String typeOfDay;

switch (day) {
case "MONDAY":
case "TUESDAY":
case "WEDNESDAY":
case "THURSDAY":
case "FRIDAY":
typeOfDay = "Weekday";
break;
case "SATURDAY":
case "SUNDAY":
typeOfDay = "Weekend";
break;
default:
typeOfDay = "Invalid day";
}

System.out.println(typeOfDay);

在這個例子中,我們正在確定一天是工作日還是週末。注意我們需要使用break語句來防止穿透,並且我們必須在選擇區塊外部聲明typeOfDay

新方法:選擇表達式

現在,讓我們看看我們如何使用選擇表達式達到同樣的結果:

String day = "MONDAY";
String typeOfDay = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "Weekday";
case "SATURDAY", "SUNDAY" -> "Weekend";
default -> "Invalid day";
};

System.out.println(typeOfDay);

哇!看看這有多麼乾淨和簡潔。我們合並了多個案例,刪除了break語句,並直接將結果分配給typeOfDay。這就像整理你的房間——突然間一切都整潔有序!

使用 "case L ->" 標籤的選擇表達式

箭頭語法(->)是選擇表達式的關鍵特性。它允許我們以簡潔的方式指定案例標籤及其相關動作。讓我們看看另一個例子:

int dayNumber = 3;
String dayName = switch (dayNumber) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> "Thursday";
case 5 -> "Friday";
case 6 -> "Saturday";
case 7 -> "Sunday";
default -> "Invalid day number";
};

System.out.println("Day " + dayNumber + " is " + dayName);

在這個例子中,我們正在將一個日期數字轉換為其對應的名稱。箭頭語法使每個案例成為一個簡單易讀的行。這就像一個路標直接指向正確的答案!

使用 "case L:" 語句和 yield 語句的選擇表達式

有時,你可能需要在選擇表達式中返回不止一個簡單的值。這時yield語句就派上用場了。這就像說:"我完成計算了,這是最後的答案!"

讓我們看看一個例子:

int month = 8;
String season = switch (month) {
case 12, 1, 2:
yield "Winter";
case 3, 4, 5:
yield "Spring";
case 6, 7, 8:
yield "Summer";
case 9, 10, 11:
yield "Fall";
default: {
String message = "Invalid month: " + month;
System.out.println(message);
yield "Unknown";
}
};

System.out.println("The season for month " + month + " is " + season);

在這個例子中,我們正在根據月份確定季節。注意我們是如何使用yield來返回值的,尤其是在default案例中,我們進行了一些更多的處理。

高級使用:案例標籤中的表達式

選擇表達式的一個最酷的特性是你可以 在案例標籤中使用表達式。這就像給你的選擇語句一個超能力!以下是一個例子:

record Person(String name, int age) {}

Person person = new Person("Alice", 25);

String lifeStage = switch (person) {
case Person p when p.age() < 13 -> "Child";
case Person p when p.age() >= 13 && p.age() < 20 -> "Teenager";
case Person p when p.age() >= 20 && p.age() < 60 -> "Adult";
case Person p when p.age() >= 60 -> "Senior";
default -> "Unknown";
};

System.out.println(person.name() + " is a " + lifeStage);

在這個例子中,我們正在使用一個record(Java的另一個酷炫功能)來表示一個人,然後使用具有複雜條件的選擇表達式來確定他們的生命階段。這就像在你的代碼中有一個個人生活教練一樣!

結論

選擇表達式是Java中的一個強大工具,可以讓你的代碼更易讀、更簡潔、出錯率更低。它就像從翻蓋手機升級到智能手機——突然間,你可以用更少的努力做更多的事情!

記住,編程就是實踐。所以,不要害怕實驗這些概念。嘗試創建自己的選擇表達式,玩轉不同的情景,並且最重要的是,玩得開心!

在我們結束之前,以下是我們討論過的關鍵方法的摘要:

方法 描述
-> 箭頭語法,用於簡潔的案例標籤和動作
yield 從選擇表達式中返回值的語句
case L when condition 案例標籤中的模式匹配

編程愉快,願你的選擇永遠表達清晰!

Credits: Image by storyset