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

更新 發佈閱讀 7 分鐘
vocus|新世代的創作平台
【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
HKT實驗室
32會員
287內容數
哈囉!我是 HKT,一位專注於 AI 領域、熱愛 Vibe Coding 技術的開發者。在這個專屬的部落格空間,我將與你分享我在 AI 應用開發領域中的深入學習心得與實戰經驗。如果你也對 AI 技術充滿好奇,渴望不斷探索 AI 的無限可能,歡迎加入會員,與我一起踏上 AI 之旅,挖掘更深層的技術世界,享受學習的樂趣!
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
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
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
之前提過 IF 跟 IFS 這兩個可以做條件判斷的函式,但你知道其實條件判斷還有一手!今天要介紹的叫 SWITCH 函式,它跟 IF、IFS 一樣,可以做多條件的判斷,且可以在沒有相符結果時,傳回你指定的預設值。
Thumbnail
之前提過 IF 跟 IFS 這兩個可以做條件判斷的函式,但你知道其實條件判斷還有一手!今天要介紹的叫 SWITCH 函式,它跟 IF、IFS 一樣,可以做多條件的判斷,且可以在沒有相符結果時,傳回你指定的預設值。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
本章節帶領讀者了解 Kotlin 的流程控制語法,包括條件判斷、當做三元運算子使用的 if 表達式、用來替代 switch 語句的 when 語句、用於迴圈運作的 for 和 while 語句,以及控制迴圈執行流程的語句和標籤概念。該章節目的在於讓讀者深入掌握流程控制功能,進一步提升編程技巧。
Thumbnail
本章節帶領讀者了解 Kotlin 的流程控制語法,包括條件判斷、當做三元運算子使用的 if 表達式、用來替代 switch 語句的 when 語句、用於迴圈運作的 for 和 while 語句,以及控制迴圈執行流程的語句和標籤概念。該章節目的在於讓讀者深入掌握流程控制功能,進一步提升編程技巧。
Thumbnail
在Unity和其他應用程式中,if-else是一定會使用上的陳述式,這篇文章主要面向對只了解if-else使用方式的程式員,補足在專有名詞上的知識並且提供省略程式碼區塊的小技巧與範例。
Thumbnail
在Unity和其他應用程式中,if-else是一定會使用上的陳述式,這篇文章主要面向對只了解if-else使用方式的程式員,補足在專有名詞上的知識並且提供省略程式碼區塊的小技巧與範例。
Thumbnail
之前在條件式格式(一)提到了怎麼用條件式格式的功能,把想看到的資料、以更醒目的方法顯示,更方便我們判讀數據,來看看怎麼做更複雜的自訂公式!
Thumbnail
之前在條件式格式(一)提到了怎麼用條件式格式的功能,把想看到的資料、以更醒目的方法顯示,更方便我們判讀數據,來看看怎麼做更複雜的自訂公式!
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
本篇介紹了Swift程式語言中的各種流程控制元素,包括條件語句(如if, else if, else),三元運算子,多條件分支判斷的switch語句,以及各種迴圈(如for迴圈,while迴圈,以及repeat-while迴圈)。同時也詳細解釋了如何進行迴圈嵌套,以及如何使用控制迴圈語句。
Thumbnail
本篇介紹了Swift程式語言中的各種流程控制元素,包括條件語句(如if, else if, else),三元運算子,多條件分支判斷的switch語句,以及各種迴圈(如for迴圈,while迴圈,以及repeat-while迴圈)。同時也詳細解釋了如何進行迴圈嵌套,以及如何使用控制迴圈語句。
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News