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

更新於 發佈於 閱讀時間約 7 分鐘
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 使用方式,並在實際開發中靈活運用。

留言
avatar-img
留言分享你的想法!
avatar-img
HKT實驗室
24會員
261內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
HKT實驗室的其他內容
2024/11/18
在 Dart 程式語言中,除了位置參數和預設參數值外,具名參數的使用讓函式的呼叫變得更加清晰且易於理解。特別是在參數較多的情況下,具名參數的優勢尤為明顯。本篇文章將深入探討如何定義和使用具名參數,並透過實際範例來加深讀者的理解。
Thumbnail
2024/11/18
在 Dart 程式語言中,除了位置參數和預設參數值外,具名參數的使用讓函式的呼叫變得更加清晰且易於理解。特別是在參數較多的情況下,具名參數的優勢尤為明顯。本篇文章將深入探討如何定義和使用具名參數,並透過實際範例來加深讀者的理解。
Thumbnail
2024/11/17
在 Dart 程式語言中,函式不僅可以接收參數,還能為這些參數設定預設值。這樣的設計使得函式的呼叫更加靈活,並且簡化了程式碼的撰寫。本文將深入探討如何定義具有預設參數值的函式,並透過實際範例來加深理解。
Thumbnail
2024/11/17
在 Dart 程式語言中,函式不僅可以接收參數,還能為這些參數設定預設值。這樣的設計使得函式的呼叫更加靈活,並且簡化了程式碼的撰寫。本文將深入探討如何定義具有預設參數值的函式,並透過實際範例來加深理解。
Thumbnail
2024/11/16
在 Dart 程式語言中,函式不僅能執行特定任務,還能回傳值,這使得函式在程式中更具彈性和重用性。本篇文章將深入探討如何定義一個具有回傳值的函式,並透過實際範例來幫助大家理解其結構與用途。
Thumbnail
2024/11/16
在 Dart 程式語言中,函式不僅能執行特定任務,還能回傳值,這使得函式在程式中更具彈性和重用性。本篇文章將深入探討如何定義一個具有回傳值的函式,並透過實際範例來幫助大家理解其結構與用途。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
本章節帶領讀者了解 Kotlin 的流程控制語法,包括條件判斷、當做三元運算子使用的 if 表達式、用來替代 switch 語句的 when 語句、用於迴圈運作的 for 和 while 語句,以及控制迴圈執行流程的語句和標籤概念。該章節目的在於讓讀者深入掌握流程控制功能,進一步提升編程技巧。
Thumbnail
本章節帶領讀者了解 Kotlin 的流程控制語法,包括條件判斷、當做三元運算子使用的 if 表達式、用來替代 switch 語句的 when 語句、用於迴圈運作的 for 和 while 語句,以及控制迴圈執行流程的語句和標籤概念。該章節目的在於讓讀者深入掌握流程控制功能,進一步提升編程技巧。
Thumbnail
本篇介紹了Swift程式語言中的各種流程控制元素,包括條件語句(如if, else if, else),三元運算子,多條件分支判斷的switch語句,以及各種迴圈(如for迴圈,while迴圈,以及repeat-while迴圈)。同時也詳細解釋了如何進行迴圈嵌套,以及如何使用控制迴圈語句。
Thumbnail
本篇介紹了Swift程式語言中的各種流程控制元素,包括條件語句(如if, else if, else),三元運算子,多條件分支判斷的switch語句,以及各種迴圈(如for迴圈,while迴圈,以及repeat-while迴圈)。同時也詳細解釋了如何進行迴圈嵌套,以及如何使用控制迴圈語句。
Thumbnail
本文是C#入門教程的一部分,涵蓋了流程控制的各種語句與迴圈。這包括if、else if和else語句,三元運算子,switch語句,以及for、foreach和while迴圈。文中還介紹了如何在迴圈中使用break、continue、return和goto語句。
Thumbnail
本文是C#入門教程的一部分,涵蓋了流程控制的各種語句與迴圈。這包括if、else if和else語句,三元運算子,switch語句,以及for、foreach和while迴圈。文中還介紹了如何在迴圈中使用break、continue、return和goto語句。
Thumbnail
之前在條件式格式(一)提到了怎麼用條件式格式的功能,把想看到的資料、以更醒目的方法顯示,更方便我們判讀數據,來看看怎麼做更複雜的自訂公式!
Thumbnail
之前在條件式格式(一)提到了怎麼用條件式格式的功能,把想看到的資料、以更醒目的方法顯示,更方便我們判讀數據,來看看怎麼做更複雜的自訂公式!
Thumbnail
之前提過 IF 跟 IFS 這兩個可以做條件判斷的函式,但你知道其實條件判斷還有一手!今天要介紹的叫 SWITCH 函式,它跟 IF、IFS 一樣,可以做多條件的判斷,且可以在沒有相符結果時,傳回你指定的預設值。
Thumbnail
之前提過 IF 跟 IFS 這兩個可以做條件判斷的函式,但你知道其實條件判斷還有一手!今天要介紹的叫 SWITCH 函式,它跟 IF、IFS 一樣,可以做多條件的判斷,且可以在沒有相符結果時,傳回你指定的預設值。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News