Objective-C 快速導覽 - 運算式

運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成,每個運算式都會計算出一個值,最簡單的運算式為常數運算式,也就是只有以常數為運算元的運算式,如

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    if (true) {
        NSLog(@"Hello, World!");
    }
 
    [pool drain];
    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:const.m
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


第 6 行
if (true) {


if 後面所接的小括弧需要一個運算式,此處只代入布林值 true ,亦即為常數運算式。


編譯執行,結果如下



建立物件 (object) 或傳遞訊息也都是運算式,例如
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *s = @"There is no spoon.";
    NSLog(s);
    NSLog(@"length: %d", [s length]);
    
    [pool drain];
    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:const.m
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


第 4 行是建立 NSAutoreleasePool 型態的物件,利用 NSAutoreleasePool 傳遞 allocinit 訊息
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


第 8 行,向 NSString 型態的物件變數 s 傳遞 length 訊息,藉以取得字串長度
NSLog(@"length: %d", [s length]);


編譯執行,結果如下



由運算子與運算元所組成的運算式,會依結合規則及優先次序進行計算,全部運算子如下列表
運算子結合規則
() [] -> . :左到右
! ~ ++ -- + - * & (type) sizeof右到左
* / %左到右
+ -左到右
<< >>左到右
< <= > >=左到右
== !=左到右
&左到右
^左到右
|左到右
&&左到右
||左到右
?:右到左
= += -= /= %= &=右到左
^= |= <<= >>=右到左
,左到右


其中,小括弧具有最高的優先權,因此當運算式中任何部份需要先計算時,可以直接用小括號圍起來,無須考量運算子的優先次序。


中英文術語對照
運算式expression
運算元operand
運算子operator
物件object


您可以繼續參考
運算式


相關目錄
Objective-C 快速導覽
Objective-C 教材
首頁



參考資料
Programming with Objective-C: About Objective-C
Programming with Objective-C: Working with Objects

沒有留言: