[Objective-C] 程式設計教學:如何建立和使用變數 (Variable)

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    使用變數

    變數 (variable) 像是資料 (data) 的標籤,程式設計師在撰寫電腦程式時,藉由使用變數在電腦程式中操作資料。

    以下簡單的程式建立和使用變數:

    #import <Foundation/Foundation.h>
    
    int main(void){
        @autoreleasepool {
            // Declare a variable `i` and assign some value
            int i = 3;
            
            // Check the value of `i`
            NSCAssert(i == 3, @"`i` should be 3");
            
            // Re-assign the value of `i`
            i = 5;
            
            // Re-check the value of `i`
            NSCAssert(i == 5, @"`i` should be 5");
        }
    
        return 0;
    }
    

    一開始,我們建立一個變數 i 並賦值,再用 NSCAssert 巨集 (macro) 確認 i 的值。接著,我們對 i 重新賦值,然後再用 NSCAssert 確認一次 i 的值。

    宣告變數

    變數包含三個要素:

    • 變數的型別 (data type)
    • 變數的識別字 (identifier)
    • 變數的值 (value)

    以下列程式為例:

    int i;
    

    這個變數的型別是 int (integer,整數),識別字是 i。由於這個變數還沒賦值,故仍停留在未初始化的階段。

    延續上例,以下的程式對 i 賦值:

    i = 3;
    

    這時候 i 的值變成 3

    我們可以把這兩個動作寫在一起:

    int i = 3;
    

    這就是我們在一開頭的範例程式看到的程式碼。

    我們再看一次先前建立記憶體池物件的例子:

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    

    這個變數的識別字 (變數名稱) 是 pool,其型別是指向 NSAutoreleasePool 的指標 (pointer),其值是一個 NSAutoreleasePool 物件 (object)。我們這裡暫不詳述指標和物件的細節,只要知道這也是一個宣告變數及賦值的指令即可。

    命名識別字

    基本上,按照 C 語言的方式來命名變數即可,如果已經很熟 C 語言可略過本節。Objective-C 的命名規則如下:

    • 第一個字元是英文字母 (letters) 或底線 (_)
    • 第二個以後的字元是英文字母、數字或底線
    • 英文字母的大小寫視為相異字

    按照這個規則,manpowerManPower 都是合法的變數,但視為不同識別字。

    識別字命名風格

    常見的有以下三種:

    • PascalCase
    • camelCase
    • snake_case

    對照先前的命名規則,這三種命名法都是合法的,所以這主要是撰碼風格 (coding style) 的議題。通常命名類別 (class) 會用 PascalCase,命名方法 (method) 會用 camelCase,命名變數則用 snake_case

    保留字 (Keywords)

    在程式語言中,有某些字 (words) 具有特定的意義,就不能拿來當識別字使用。像是從函式回傳值的 return 就是一個例子。

    筆者找不到官方版本的保留字清單,這裡維護一份非官方版本的保留字清單。寫久了自然知道那些字是保留字,編輯器也會用語法高亮 (syntax highlighting) 協助我們辨識出保留字;因此,不用刻意去背這份清單。

    宣告常數 (Constant)

    透過 const 修飾詞,可以宣告常數。常數在宣告後就不能更動其值,若試圖去更動其值會引發編譯錯誤。以下是實例:

    const double PI = 3.1415927;
    

    在這個宣告中,我們定義了常數 PI,其值是圓周率,但精準度偏低。

    一般來說,命名常數時會用全大寫 (ALL_CAPITALS),藉以和一般的變數區分。

    關於 NSCAssert 和其他斷言 (Assertion)

    如果讀者有在看國外的程式設計書籍,會發現使用斷言取代印出資料的方式慢慢流行起來。早期的程式語言教材多用 printf 或其他同質函式在終端機印出資料,這方法雖然直觀但也有一些缺點;主要的問題在於每次寫完程式後要實際執行程式再由人工確認資料是否正確。

    相對地,藉由使用斷言,是由電腦程式自行確認資料正確與否;雖然在終端機不會印出資料比較不直觀,但只要程式沒有跳出錯誤訊息就代表資料正確無誤。此外,善用斷言也是日後自動化測試 (automated testing) 的基礎,因為不需人為介入。

    原本 C 語言的斷言是 assert,而 NSCAssert 是 Objective-C 新加入的斷言,這兩種斷言都是以巨集 (macro) 撰寫。我們在這裡使用 NSCAssert 而非 assert 的原因在於前者可自行加入錯誤訊息字串,使用起來比較方便。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk