C in ObjC系列(2) 流程控制

C in ObjC系列(2) 流程控制

C in ObjC系列為Objective-C中保留C語言語法的系列介紹。

流程控制

程式中可以去判斷條件成立時要利用程式做什麼樣的動作,這就稱為流程控制,下面介紹的語法中,會利用不同語法來呈現相同輸出結果。

if

if 的功能可以有很多種配合方式,當你只需要條件成立時執行程式內容時:

    if (<#condition#>) {
        <#statements#>
    }

除了條件成立外,條件不成立時也要執行程式內容時可以增加:

    if (<#condition#>) {
        <#statements#>
    } else {
        <#statements#>
    }

多種條件成立時與不成立時各別執行程式內容時:

    if (<#condition#>) {
        <#statements#>
    } else if (<#expression#>) {
        <#statements#>
    } else {
        <#statements#>
    }

多種條件判斷時,依照下面格式增加條件判斷:

    if (<#condition#>) {
        <#statements#>
    } else if (<#expression#>) {
        <#statements#>
    } else if (<#expression#>) {
        <#statements#>
        :
        :
    } else if (<#expression#>) {
        <#statements#>
    }  else {
        <#statements#>
    }

  • <#condition#> 條件判斷式
  • <#statements#> 執行程式內容

程式範例:

//-----------start-----------
    for (NSInteger m = 4; m > 0; m --) {
        if (m == 1) {
            NSLog(@"1     m = 1");
        } else if (m == 2) {
            NSLog(@"2     m = 2");
        } else {
            NSLog(@"Other m = %ld",m);
        }
    }
//------------end------------

輸出結果:

2014-08-17 16:18:33.318 LoopDemo[65795:303] Other m = 4
2014-08-17 16:18:33.318 LoopDemo[65795:303] Other m = 3
2014-08-17 16:18:33.318 LoopDemo[65795:303] 2     m = 2
2014-08-17 16:18:33.318 LoopDemo[65795:303] 1     m = 1

switch

    switch (<#expression#>) {
        case <#constant#>:
            <#statements#>
            break;
        default:
            break;
    }

  • <#expression#> 傳入變數的名稱
  • <#constant#> 依據傳入變數值內容成立時,執行下面的程式內容
  • <#statements#> 執行程式內容
  • default:條件都未成立時,會執行default這個預設的程式內容

每個case條件成立時,執行程式內容結束後必需要增加break來中斷switch/case

//-----------start-----------
    for (NSInteger m = 4; m > 0; m --) {
        switch (m) {
            case 1:
                NSLog(@"1     m = 1");
                break;
            case 2:
                NSLog(@"2     m = 2");
                break;
            default:
                NSLog(@"Other m = %ld",m);
                break;
        }
    }
//------------end------------

輸出結果:

2014-08-17 16:41:57.648 LoopDemo[66124:303] Other m = 4
2014-08-17 16:41:57.649 LoopDemo[66124:303] Other m = 3
2014-08-17 16:41:57.649 LoopDemo[66124:303] 2     m = 2
2014-08-17 16:41:57.650 LoopDemo[66124:303] 1     m = 1

未加入break時程式會繼續執行下一個內容:

//-----------start-----------
    for (NSInteger m = 4; m > 0; m --) {
        switch (m) {
            case 1:
                NSLog(@"1     m = 1");
            case 2:
                NSLog(@"2     m = 2");
                break;
            default:
                NSLog(@"Other m = %ld",m);
                break;
        }
    }
//------------end------------

輸出結果:

2014-08-17 16:34:29.942 LoopDemo[66010:303] Other m = 4
2014-08-17 16:34:29.943 LoopDemo[66010:303] Other m = 3
2014-08-17 16:34:29.943 LoopDemo[66010:303] 2     m = 2
2014-08-17 16:34:29.943 LoopDemo[66010:303] 1     m = 1
2014-08-17 16:34:29.943 LoopDemo[66010:303] 2     m = 2

m = 1時,執行程式內容完成後未加入break,所以會繼鑟執行case 2:後的內容,然而輸出結果會多印出2 m = 2

有先前未加入break的方式,所以您要多個判斷都執行程式內容的相同結果,那可以寫成這樣:

//-----------start-----------
    for (NSInteger m = 4; m > 0; m --) {
        switch (m) {
            case 1:
            case 2:
                NSLog(@"1,2     m = 1 or 2");
                break;
            default:
                NSLog(@"Other m = %ld",m);
                break;
        }
    }
//------------end------------

輸出結果:

2014-08-17 16:38:16.872 LoopDemo[66067:303] Other m = 4
2014-08-17 16:38:16.873 LoopDemo[66067:303] Other m = 3
2014-08-17 16:38:16.873 LoopDemo[66067:303] 1,2     m = 1 or 2
2014-08-17 16:38:16.874 LoopDemo[66067:303] 1,2     m = 1 or 2