昨天介紹了「變數」、變數的「類型」,以及「宣告」、「初始化」分別代表的意義,相信大家對於變數已經有一定程度的了解。然而,變數的類型,除了最基本的 字元(char)、字串(string)、整數(int)、浮點數(double、float) 這幾種以外,其實也能夠依使用需求來自定義。
例如,在 Revit 中,最常見的類型 「Element」 ,就是 Revit API 自定義的類型,它代表的是 Revit 中的物件,每一個物件即是一個 Element。如果還是不太清楚 Element 是什麼也不要慌張,等之後介紹到 LookUp 時,思路自然會清晰很多,現在只需要記得,除了最基本的幾個變數類型以外,其實也能夠自定義新的變數類型。
製作 Revit 外掛,其目的一定是要對 物件(Element) 做些什麼事,可能是要移動物件、複製物件,又或者是要獲取物件的某些參數。但無論要做何事,首先一定得獲取要使用的物件,而要使用的物件經常不只一個,可能會是幾十,甚至上百個。但是一個類型為 Element 的變數,只能儲存一個物件,正如一個類型為整數的 x 變數 (int x),可以等於 1、等於 2,或等於任何整數,但它不可能同時等於 1 又等於 2。
這時候我們就會使用到 「清單(List)」,清單就像是一個容器,可以容納多個變數。與變數相同,清單也需要被 “宣告”,並且放入的變數,其類型也必須與清單宣告的類型相同。而清單宣告的方式與變數一樣,需要包含 “名稱” 及 “變數類型”。以一個類型為 “整數”、名稱為 “mylist” 的清單為例,宣告的方式便會是:
=> List < int > mylist;
其中,“List” 是在告訴程式,我們宣告的是一個清單,而非變數。而 “括弧<>” 內的文字是在告訴程式,這個清單將容納的是,類型為整數的變數們。最後, “mylist” 則是在告訴程式,這個 “將要容納整數們的清單” 的名稱。
變數的宣告,除了是為變數命名,以及指定變數的類型之外,其實也是在告訴記憶體:「我將要儲存一個值,麻煩你讓出一個位置給我」。事實上,每個類型所佔用的記憶體空間不盡相同,但是目前可以暫時將它想像為,一個變數便會佔用一個記憶體位置。
然而,清單(List)的情況與變數有些不同,上述所展示的清單宣告(List< int > mylist),就真的單純是在告訴程式,這個清單的名稱及類型。此時,若將變數放入清單中,程式便會顯示錯誤,因為記憶體還未讓出空間給清單使用。清單宣告之後,還需加上 “new List< int >()”,記憶體才會為這個清單闢出一個空間,讓清單能夠放置變數。完整的清單宣告,以及借用空間的程式就會是:
=> List< int > mylist = new List< int >();
(今天先說明到這裡,我們明天再繼續)