20130608

VBScript 變數

什麼是變數?
變數代表一個指向電腦記憶體位置的預留空間。在這個空間中,您可以儲存一些在 script 執行過程中會變動的程式資訊。舉例來說,在某個網頁中,您可以建立一個稱做 ClickCount 的變數來儲存使用者用滑鼠點選某一個物件的次數。變數儲存在電腦記憶體中的哪個位置並不重要,重要的是您只需用變數的名稱即可檢視儲存在其中的值、或更改這個值。在 VBScript 中,基本資料型態就是 Variant
宣告變數
使用 Dim 陳述式、Public 陳述式、或 Private 陳述式在 script 中明確宣告一個變數。比如像:
 Dim DegreesFahrenheit
可以同時宣告多個變數,變數之間以逗號隔開即可。比如像:
 Dim Top, Bottom, Left, Right
在 script 中使用時宣告一個變數。不過一般來說,這並不是一個好的方法。因為您可能會在使用時拼錯了變數的名稱,而產生不可預期的執行結果。基於這個理由,您可以使用 Option Explicit 陳述式來要求所有變數都要明確宣告。您應該在 script 的開端都放上 Option Explicit 陳述式。
命名的限制
在 VBScript 中,變數的命名必須遵循一標準規則。一個變數名稱中:
  • 必須以字母開頭。
  • 中間不能包含句點(.)。
  • 不能超過 255 個字元。
  • 在宣告的有效範圍中必須唯一。
變數的有效範圍和生命週期
一個變數的有效範圍是由其宣告的地點來決定。當您在一個程序中宣告變數時,那麼就只有程序中的程式碼可以存取或更改這個變數的值。它有區域的有效範圍,同時稱之為程序層級變數。如果您是在程序之外宣告一個變數,那麼 script 中的所有程序將都能使用這個變數。這是一個 script 層級的變數,同時它有 script 層級的有效範圍。一個變數的存在時間稱之為變數的生命週期。一個 script 層級變數的生命週期是從變數被宣告開始一直到 script 執行完畢為止。而程序層級變數就只有在程序執行時會存在。當離開程序時,這些變數就會消失。當程序執行時,區域變數是一個用來暫存資料的絕佳選擇。您可以在許多個不同程序中宣告同樣名稱的區域變數,因為只有變數所在的程序才會認得該變數。
指定值給變數
指定值給變數所要使用的運算式如下:變數在運算式的左邊,您要指定給變數的值在右邊。舉例來說,像:
 B = 200
單一值變數和陣列變數
在大多數的情形下,您只會想指定單一個值給您宣告的變數。一個含有單一個值的變數稱為單一值變數。在某些情形中,指定數個相關的值給一個變數會比指定一個來得方便。此時,您就可以建立一個可以包含一群值的變數。這種變數稱之為陣列變數。 宣告陣列變數和宣告單一值變數是相同的,但是在宣告陣列變數時,您需要在變數名稱後面加上括號 ( )。在下面的例子中,我們宣告了一個含有 11 個元素的一維陣列:
 Dim A(10)
雖然在括號中的數字是 10,不過因為在 VBScript 中的所有陣列都是以零為基底的陣列,所以這個陣列實際上包含了 11 個元素。在以零為基底的陣列中,陣列的元素個數永遠是括號中的數字再加 1。這種類型的陣列稱為固定大小的陣列。您可以使用索引來指定值給陣列中的元素。索引的值由零開始,其最大值到 10。您可以用下列的方式把資料指定給陣列中的元素:
 A(0) = 256
 A(1) = 324
 A(2) = 100
 . . .
 A(10) = 55
同樣地,您也可以使用索引值來讀取特定陣列元素中的資料。比如像:
 . . . 
 SomeVariable = A(8)  
 . . . 
陣列並不一定要是一維陣列,它最大可以到達 60 維。不過大部分的人通常最多都只用到三或四維。宣告多維陣列的方法是在括號中填入陣列各個維度的大小,而每個數字之間是以逗號隔開。在下面的例子中,MyTable 這個變數是一個二維陣列,它包含了 6 個資料列和 11 個資料行:
 Dim MyTable(5, 10)
在一個二維的陣列中,第一個數字代表資料列的數目;第二個則代表資料行的數目。您也可以宣告一個在 script 執行過程中大小會改變的陣列。這種陣列稱之為動態陣列。在程序中,您可以用 Dim 陳述式或 ReDim 陳述式來宣告動態陣列。然而在動態陣列的宣告中,括號內不必填入任何維度或陣列的大小。比如像:
 Dim MyArray()
 ReDim AnotherArray()
當您要使用動態陣列時,您必須先使用 ReDim 來決定陣列的維度以及每個維度的大小。在下面的例子中,ReDim 首先將動態陣列的起始大小設為 25,之後的ReDim 陳述式則將大小修改為 30,同時它使用了 Preserve 這個關鍵字,它可以在陣列大小改變時,使原來儲存在陣列中的資料得以保存。
 ReDim MyArray(25)
 . . . 
 ReDim Preserve MyArray(30)
動態陣列之大小變化的次數並沒有任何限制。不過,您應該注意的是,當您縮小陣列的大小時,存放在被刪除掉的元素中的資料都會消失不見。

沒有留言:

張貼留言