2024-10-31|閱讀時間 ‧ 約 7 分鐘

【Flutter 學習筆記】switch-case 多重條件判斷

raw-image
【Flutter 學習筆記】線上課程教學影片:連結
【Flutter 學習筆記】系列文章目錄:連結

在上一節中,我們探討了 if 條件判斷式,這種結構適合處理一個或少數幾個條件。然而,當面對需要進行多個判斷的情況時,使用 switch 敘述會更加合適。在本篇文章中,我們將深入探討 Dart 語言中的 switch-case 條件控制,並透過實際範例來說明其用法。

1. 基本的 switch-case 條件控制

switch 敘述根據表達式的值來判斷執行對應的 case 區塊。如果沒有任何 case 符合,則會執行 default 區塊的程式碼。以下是 switch 的基本語法:

switch (表達式) {
case1:
// 當表達式的值等於值1時,執行這裡的程式碼
break;
case2:
// 當表達式的值等於值2時,執行這裡的程式碼
break;
default:
// 當表達式的值不等於任何 case 時,執行這裡的程式碼
}

在這段語法中,表達式 的型別可以是整數 (int)、字串 (String) 或枚舉 (enum)。需要特別注意的是,switch 陳述式中,表達式的資料型別必須與所有 case 的型別一致。如果有任何一個 case 的型別不一致,編譯器將會報錯。例如,如果表達式是整數,那麼所有的 case 也必須是整數,不能混用字串或其他型別。

1.1 實際範例:根據星期幾判斷活動

讓我們來看一個實際的範例,根據星期幾來判斷今天的活動:

String today = "星期五";

switch (today) {
case "星期一":
print("今天是星期一,新的開始了!");
break;
case "星期二":
print("今天是星期二,加油!");
break;
case "星期三":
print("今天是星期三,已經過了一半!");
break;
case "星期四":
print("今天是星期四,週末要來囉!");
break;
case "星期五":
print("今天是星期五,迎接週末到來!");
break;
default:
print("今天是不用工作的日子!");
}

在這段程式碼中,我們定義了一個變數 today,並將其設為「星期五」。接著,使用 switch 敘述來判斷今天是星期幾,並根據不同的情況輸出相對應的訊息。由於 today 的值是「星期五」,因此程式會印出「今天是星期五,迎接週末到來!」。

2. switch 的特性

使用 switch 敘述有幾個特性需要注意:

2.1 貫穿 (fall-through)

如果在某個 case 區塊中沒有使用 break,程式會繼續執行後面的 case 區塊,這種情況稱為「貫穿」。這在某些情況下是有用的,但通常需要小心使用,以免造成不可預期的錯誤。以下是一個範例:

switch (day) {
case "星期六":
case "星期日":
print("今天是週末,可以好好放鬆!");
break;
default:
print("今天是工作日,努力工作吧!");
}

在這個範例中,無論是「星期六」還是「星期日」,都會執行相同的程式碼,輸出「今天是週末,可以好好放鬆!」。

Dart 3 新特性概述

在 Dart 3 中,switch-case 語句的行為發生了重要變化,特別是在處理 case 的結束方式上。過去,開發者在每個 case 的結尾必須使用 break 語句,以防止程式碼意外地繼續執行下一個 case,這種情況稱為「fall-through」。然而,從 Dart 3 開始,這一要求被移除,讓程式碼變得更加簡潔。

  • 移除 break 的必要性:在 Dart 3 中,非空的 case 主體結束後不再需要 break 語句。這意味著如果一個 case 沒有明確的結束語句,程式將自動跳出 switch 語句,而不會繼續執行下一個 case 的內容。這一改變不僅減少了開發者的負擔,也降低了因為忘記添加 break 而導致的錯誤。
  • 空 case 的行為:如果一個 case 是空的,則它會自動穿透到下一個 case,這使得多個 case 可以共享同一個主體。這在某些情況下是非常有用的,但開發者仍需小心使用,以免造成不可預期的錯誤。

這些變更使得 Dart 的 switch-case 語句更加靈活和易於使用,並且提高了程式碼的可讀性和可維護性。隨著 Dart 語言的演進,這些新特性無疑將為開發者帶來更好的編程體驗。

2.2 default 區塊

default 區塊是可選的,但建議在 switch 敘述中使用它,以處理所有未被列舉的情況。這樣可以避免程式在遇到不符合任何 case 的情況下,發生不可預期的錯誤。以下是使用 default 區塊的範例:

String day = "星期三";

switch (day) {
case "星期一":
print("今天是星期一,新的開始了!");
break;
case "星期二":
print("今天是星期二,加油!");
break;
case "星期三":
print("今天是星期三,已經過了一半!");
break;
case "星期四":
print("今天是星期四,週末要來囉!");
break;
case "星期五":
print("今天是星期五,迎接週末到來!");
break;
default:
print("今天是不用工作的日子!");
}

在這個範例中,若 day 的值不在任何 case 中,則會執行 default 區塊的程式碼,這樣可以確保程式不會因為未處理的情況而崩潰。

3. 小結

在 Dart 中,switch-case 是一種非常有效的多重條件判斷工具,特別適合用於處理多個可能的值。透過 switch 敘述,我們可以清晰地組織程式碼,並根據不同的條件執行相應的邏輯。以下是使用 switch-case 的幾個要點:

  • 表達式的型別一致性:確保 switch 表達式的型別與所有 case 的型別一致。
  • 貫穿特性:注意 case 區塊之間的貫穿行為,必要時使用 break 來避免意外執行後續的 case
  • 使用 default 區塊:建議在 switch 敘述中使用 default 區塊,以處理所有未被列舉的情況,增強程式的健壯性。

透過這些特性,switch-case 不僅能提高程式的可讀性,還能讓我們更有效地管理多重條件判斷。希望這篇文章能幫助你更深入地理解 Dart 中的 switch-case 使用方式,並在實際開發中靈活運用。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.