
若運算式的結果為 true , 也就是條件為真,其後用大括弧圍起來的程式區塊 (block) 便會執行,而若運算式的結果為 false ,這樣一來條件就為假,程式會跳過大括弧,尋找右大括號 } 後的第一個陳述執行。
如果不用大括號圍住 if 陳述後作為分流的程式碼,通常編譯器只接受一行,因此為避免程式執行的歧異,或非預期的錯誤,養成使用大括弧會是好習慣。
以下程式示範使用單一的 if 陳述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #import <Foundation/Foundation.h> int main ( int argc, const char * argv[]) { NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc ] init ]; char a = 'h'; char b = 'h'; if (a == b) { NSLog( @"Welcome to my world!" ); } [pool drain ]; return 0 ; } /* 《程式語言教學誌》的範例程式 檔名:ifcon.m 功能:Objective-c 程式範例 作者:張凱慶 時間:西元 2013 年 4 月 */ |
編譯執行,結果如下

程式的第 9 行
9 | if (a == b) { |
由於變數 a 及變數 b 裡頭所儲存的值都是小寫字母 h 的位元編碼,所以條件為真, if 陳述後頭大括弧的陳述便會執行。
if 也可以跟關鍵字 else 連用,這樣一來, if 的條件為假時,程式跳過 if 陳述後頭的大括弧,而去找 else 後頭大括弧的陳述來執行。
以下程式示範 if-else 陳述的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #import <Foundation/Foundation.h> int main ( int argc, const char * argv[]) { NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc ] init ]; char a = 'h'; char b = 'k'; if (a == b) { NSLog( @"Welcome to my world!" ); } else { NSLog( @"How do you do?" ); } return 0 ; } /* 《程式語言教學誌》的範例程式 檔名:ifelsecon.m 功能:Objective-c 程式範例 作者:張凱慶 時間:西元 2013 年 4 月 */ |
編譯執行,結果如下

此例中,由於第 9 行
9 | if (a == b) { |
由於變數 a 不等於變數 b ,所以程式會跳到執行第 12 到 14 行
12 13 14 | else { NSLog( @"How do you do?" ); } |
if-else 也可以是巢狀的使用,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #import <Foundation/Foundation.h> int main ( int argc, const char * argv[]) { NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc ] init ]; char a = 'h'; char b = 'k'; if (a == 'a') { NSLog( @"Yes!" ); } else { if (a == b) { NSLog( @"No!" ); } else { NSLog( @"What?" ); } } return 0 ; } /* 《程式語言教學誌》的範例程式 檔名:ifnestcon.m 功能:Objective-c 程式範例 作者:張凱慶 時間:西元 2013 年 4 月 */ |
編譯執行,結果如下

所謂巢狀的 if-else 陳述就是形如第 9 到 19 行的地方
9 10 11 12 13 14 15 16 17 18 19 | if (a == 'a') { NSLog( @"Yes!" ); } else { if (a == b) { NSLog( @"No!" ); } else { NSLog( @"What?" ); } } |
第 12 行的 else 後頭的大括弧內,另外使用一組 if-else 陳述,這個地方由於我們利用縮排表現清楚原始程式碼的語意,看起來凹陷下去,看似好像巢一般,故稱為巢狀。巢狀的 if-else 經常出現在需要多重選擇判斷的的場合。
由於巢狀的 if-else 很常用,所以第 8 到 18 行若寫成
9 10 11 12 13 14 15 16 17 | if (a == 'a') { NSLog( @"Yes!" ); } else if (a == 'b') { NSLog( @"No!" ); } else { NSLog( @"What?" ); } |
編譯器 (compiler) 也接受這樣的寫法。
中英文術語對照 | |
---|---|
選擇結構 | selection |
陳述 | statement |
關鍵字 | keyword |
運算式 | expression |
條件 | condition |
編譯器 | compiler |
您可以繼續參考
控制結構
型態轉換
相關目錄
Objective-C 快速導覽
Objective-C 教材
首頁
參考資料
Programming with Objective-C: About Objective-C
Programming with Objective-C: Working with Objects
沒有留言:
張貼留言