前言

上一篇文章我們簡單介紹了基本的資料型別與建構子,而這一篇控制流程也屬於較基礎的文章,若您已經有高階程式開發經驗,只需要看看語法上的差異。控制流程主要介紹 if, switch 判斷、 for, foreach, while 迴圈與breank, continue 跳躍指令,若不考慮可讀性、可維護性、物件導向...等,您可以透過這些語法完成大部分的程式,但這篇文章,仍會告知您如何使用比較佳。本篇文章若有錯誤或任何建議,請各位先進不吝指教,謝謝。



介紹

程式流程主要可以分成三大類:判斷、迴圈與跳躍,而這些控制流程也是程式主要組成的要素。判斷為依據目前情境,進行不同運算與操作;迴圈為有規律地、重複地進行特定區塊的程式;跳躍則是略過某些程式流程,直達下一步,我們將逐一介紹:


if else 敘述式

if - else 為我們判斷敘述式,以下列程式為例:
1. 當變數 input 大於 0 的時候, classify 內容被指定為 positive
2. 當變數 input 等於 0 的時候, classify 內容被指定為 0
3. 當變數 input 不符合上述所有條件的時候, classify 內容被指定為 negative
if (input > 0)
{
    classify = "positive"
}
else if (input == 0)
{
    classify = "zero";
}
else
{
    classify = "negative";
}
若您的 if 內程式區塊只有一行,您可以不加上 { } 區分程式區塊。但依據經驗,這區塊程式修改後是最常發生問題的區塊:往往增加程式行數後遺忘 { };另一方面為了程式閱讀的一致性,在 C# 程式開發,我們強烈建議加上 { },無論你的 if 內程式有幾行。
(X)
if (input > 0)
    classify = "positive";
(O)
if (input > 0)
{
    classify = "positive";
}


我們可以透過 ? 運算子,增加判斷式的可讀性。以下面程式為例...
if (input > 0)
{
    classify = "positive";
}
else
{
    classify = "negative";
}

我們能改寫成下列:當 input 大於 0 成立的時候,classify 為 positive;反之則為 negative,這是一個有效縮短程式,且增加可讀性的撰寫方法。
classify = (input > 0) ? "positive" : "negative";

另一個 ?? 運算子則是用於判斷 NULL,以下列程式為例,若 x 為 null, y 則被指定為 -1
int? x = null;
int y = x ?? -1;
(O)處理 null 是一件相當耗費人力與效能的事情,無論在程式或資料庫,請盡可能不要讓您的資料、變數可為 null。



switch 判斷式

switch 也是判斷式之一,依據不同的情境案例,進行不同的程式運算,可以用來取代 if-else判斷式。如下列程式為例,整數變數 case 若為1,則印出 "Case 1"於銀幕上;若為 2,則印出 "Case 2";若皆不符合條件,則印出 "Default"。
int choice = 1;

switch (choice)
{
    case 1:
       Console.WriteLine("Case 1");
       break;
    case 2:
        Console.WriteLine("Case 2");
        break;
    default:
        Console.WriteLine("Default");
        break;
}


for 迴圈

透過迴圈,我們能夠重複執行某程式區塊數次,如下列程式為例,我們指定計數器 i 從 0 開始,,每執行一次程式計數器 +1 ,直到 計數器 < 10 為止。程式會列印出 10 次 this is a loop !!
for (int i = 0; i < 10; i++)
{
    Console.WriteLine("this is a loop !!");
}

迴圈也常常用於 array 與 list 等集合型別操作,以下列程式為例,我們有個大小為 10 陣列,儲存10份成績,我們可以藉由迴圈對陣列內每一個元素作操作。程式會列印出所有成績。
string[] score = {"63", "70", "50", "88", "77", "65", "100", "75", "77", "70"};
for (int i = 0; i < score.Length; i++)
{
    Console.WriteLine(score[i]);
}

foreach 迴圈

類似於 for 迴圈,foreach 能依序對集合內的元素進行操作,不同於 for 迴圈的地方, 在於沒有計數器,能呈現的迴圈操作較少。
List<string> score = new List<string>();
score.Add("67");
score.Add("99");
score.Add("83");

foreach(var item in score)
{
    Console.WriteLine(item);
}

while 與 do while 

判斷式與迴圈的結合,莫過於使用 while 與 do while,在達到符合條件之前,迴圈會持續執行。而兩者的差異在於 do while 是先執行後判斷,而while 為先判斷在執行。
int n = 1;
while (n < 6)
{
    Console.WriteLine("Current value of n is {0}", n);
    n++;
}
int x = 0;
do<
{
    Console.WriteLine(x);
    x++;
} while (x < 5);

break 與 continue

break 與 continue 為跳躍指令。以迴圈為例:當迴圈程式執行到這兩個指令,會進行跳出迴圈與持續下一迴圈的操作行為。
for (int i = 1; i <= 100; i++)
{
    if (i == 3)
    {
        break;
    }
    Console.WriteLine(i);
}
// 輸出
1
2

for (int i = 1; i <= 10; i++)
{
    if (i < 5)
    {
        continue;
    }
    Console.WriteLine(i);
}
//輸出
6
7
8
9
10
上一篇:[C#][Visual Studio] 資料型態與運算子
下一篇:[C#][Visual Studio] 方法 Method

參考資料

1. Study4TW 內部教材
2. ?: 運算子 (C# 參考) - Microsoft docs
2. ?? 運算子 (C# 參考) - Microsoft docs