前言
在程式語言中,變數是用來操作資料的特性。本文介紹在 Pascal 中宣告和使用變數的方式。
變數的要素
變數具有以下要素:
- 識別字 (identifier)
- 資料型態 (data type)
- 值 (value)
我們以實例來看如何宣告和使用變數:
program main;
var
message : string;
begin
message := 'Hello World';
WriteLn(message);
end.
在本範例中,我們宣告了變數 message
,該變數的資料型態是 string
,值是 'Hello World'
(字串)。
我們在宣告變數時,其實是在程式中建立新的識別字。以本例來說,message
原本在 Pascal 程式中是沒有意義的,經過宣告後才變成變數。從電腦程式的角度來看,當我們宣告變數時,電腦程式會根據該變數的資料型態自動配置足夠的記憶體來用。
在 Pascal 中,刻意用 :=
來賦值,這是為了和 =
(相等) 區分。大部分的程式語言是以 =
做為賦值,以 ==
做為相等。但 Pascal 家族語言刻意用不同的符號來區分,較易辨識。
再來看另外一個例子:
program main;
var
a : integer;
b : integer;
begin
a := 3;
b := 4;
WriteLn(a + b);
end.
在這個例子中,宣告了兩個變數 a
和 b
,兩者的資料型態皆為 integer
,其值分別為 3
和 4
。
宣告變數的地方可以改寫如下:
var
a, b : integer;
這種寫法比較適合在短變數或局部變數上。
宣告常數 (Constant)
常數是在程式中不會修改值的識別字。以下 Pascal 片段宣告兩個在數理上常用的常數:
const
E = 2.718281828
PI = 3.141592654
對程式設計者來說,宣告常數的用意在於預防不當修改。編譯器在編譯程式碼時會檢查常數是否遭到修改。在常數遭到不常修改時引發錯誤以提醒程式設計者。
從軟體工程的角度來說,使用變數或常數會比直接寫死實字來得更有意義。例如:以下的 Pascal 片段用來記算圓面積 (area of circle):
area := 3.14159 * 10.0 * 10.0;
雖然我們可以透過 3.14159
猜到是圓面積,改寫成這樣會更清楚:
area := PI * radius * radius;
日後要修改 PI
和 radius
時,只要修改變數及常數即可,不用逐行修改實字。
在軟工的觀點上,要減少程式中出現實字的次數。因為程式碼中的實字不具有領域知識。此外,若要修改實字,得逐行修改。比較好的方式是用變數或常數來取代實字。
命名變數名稱
在 Pascal 程式中命名變數的規則如下:
- 首字為英文字母 (letter)
- 第二個 (含) 以後的字為英文字母、數字 (number)、底線 (underscore)
- Pascal 的變數不區分大小寫
根據上述規則發展出命名識別字的風格如下:
PascalCase
camelCase
snake_case
ALL_UPPERCASE
(僅用於常數)
由於 Pascal 程式碼不區分大小寫,所以 PascalCase
和 camelCase
風格的變數實際上視為同一個變數。在 Pascal 社群中使用 PascalCase
的程式設計者較多。
至於 snake_case
是從 C 語言傳來的命名風格,在 Pascal 程式中較少用。ALL_UPPERCASE
在慣例上只用來命名常數。
在命名變數時,可參考以下建議:
- 使用領域知識 (domain knowledge) 來命名一般變數
- 使用短變數來命名局部變數
- 使用
i
、j
、k
來命名迴圈的計數器
在命名變數時,建議用領域知識來命名變數。例如,以下的 Pascal 片段用來用來計算複利的本利和:
amount := principal * (1.0 + rate) ** period;
即使不加上註解,我們也可以從這段程式碼所用的變數看出該指令的目的。