不學 JAVA 換學 C# 之覺得心累 - L1:ch5 條件判斷

AdSense

前言

條件判斷可以用來控制程式流程。透過條件語句,我們可以根據不同的條件執行不同的邏輯。

if-else 判斷式

if-else 是最常用的條件語句,用於根據布林條件執行程式碼。條件為 true 時執行 if 區塊的程式碼,否則執行 else 區塊的程式碼。

語法

1
2
3
4
5
6
7
8
if (條件)
{
// 當條件為 true 時執行
}
else
{
// 當條件為 false 時執行
}

可以使用 else if 檢查多個條件。

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
int score = 85;
if (score >= 90)
{
Console.WriteLine("成績:優秀");
}
else if (score >= 70)
{
Console.WriteLine("成績:良好");
}
else
{
Console.WriteLine("成績:需要努力");
}

switch 判斷式

檢查一個變數的多個可能值,當該 case 的條件被滿足時,執行對應的程式碼區塊。case 條件的值必須是常數

基本語法

1
2
3
4
5
6
7
8
9
10
11
12
switch (變數)
{
case1:
// 當變數等於 值1 時執行
break;
case2:
// 當變數等於 值2 時執行
break;
default:
// 當沒有匹配的值時執行
break;
}

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
string day = "Monday";
switch (day)
{
case "Monday":
Console.WriteLine("今天是星期一");
break;
case "Friday":
Console.WriteLine("今天是星期五");
break;
default:
Console.WriteLine("不是星期一或星期五");
break;
}

優點

  1. 多分支選擇:適合處理多個明確值的條件邏輯。
  2. 效率高:在某些情況下,switch 比多層 if-else 效率更好。
  3. default 區塊:用於處理未匹配的情況。

注意

1. 在 switch 中,至少一定要有一個 break

break 的作用是用來終止當前的 case 區塊,並跳出 switch 語句,避免程式繼續執行到後續的 case 區塊。如果省略 break,程式將繼續執行後續的 case 區塊,導致出現 fallthrough 穿透問題

2. 一個程式碼區塊可以有多個 case 條件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string day = "Monday";
switch (day)
{
case "Monday":
case "Tuesday":
case "Wednesday":
case "Thursday":
case "Friday":
Console.WriteLine("都是討厭的上班日。");
break;

case "Saturday":
case "Sunday":
Console.WriteLine("放假囉!");
break;

default:
Console.WriteLine("一星期有八天?");
break;
}

3. 不只比較相等,還比較大小範圍額外條件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int check = 100;
// ...
var number = 13.23;
switch (number)
{
case > 0 and < 100: // 用 and 合併條件
case > 0 when number < check: // 用 when 關鍵字添加額外條件
// ...
break;
case < 300:
// ...
break;
default:
// ...
break;
}

上面的例子中,line 4 和 line 5 是一樣的條件,不同的地方在於:

  • case > 0 and < 100:and 合併條件
    • 直接檢查 number 是否同時符合 > 0< 100 的條件。
    • 邏輯更簡潔,適用於純粹基於值的比較。
    • 條件的值必須是常數
  • case > 0 when number < 100:when 關鍵字添加額外條件
    • 先檢查 number 是否符合 > 0 的條件。
    • 再判斷 number < 100 的條件是否成立。
    • 條件可以使用變數,而且更加靈活,例如依賴外部狀態或更複雜的計算。
    • when 關鍵字稱作 Case guards

if-elseswitch 的選擇

  • if-else

    • 條件較少。
    • 條件之間有邏輯關係,需要使用 &&||
  • switch

    • 需要檢查單一變數的多個可能值。
    • 條件較多,且每個條件的處理邏輯簡單。
    • 結構比多層 if-else 更清晰。

參考資料:
選取陳述式:ifif-elseswitch