開源技術教學文件網 宣告和使用變數 (Variable)

最後修改日期為 MAY 21, 2020

前言

在程式語言中,變數是用來操作資料的特性。本文介紹在 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.

在這個例子中,宣告了兩個變數 ab,兩者的資料型態皆為 integer,其值分別為 34

宣告變數的地方可以改寫如下:

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;

日後要修改 PIradius 時,只要修改變數及常數即可,不用逐行修改實字。

在軟工的觀點上,要減少程式中出現實字的次數。因為程式碼中的實字不具有領域知識。此外,若要修改實字,得逐行修改。比較好的方式是用變數或常數來取代實字。

命名變數名稱

在 Pascal 程式中命名變數的規則如下:

  • 首字為英文字母 (letter)
  • 第二個 (含) 以後的字為英文字母、數字 (number)、底線 (underscore)
  • Pascal 的變數不區分大小寫

根據上述規則發展出命名識別字的風格如下:

  • PascalCase
  • camelCase
  • snake_case
  • ALL_UPPERCASE (僅用於常數)

由於 Pascal 程式碼不區分大小寫,所以 PascalCasecamelCase 風格的變數實際上視為同一個變數。在 Pascal 社群中使用 PascalCase 的程式設計者較多。

至於 snake_case 是從 C 語言傳來的命名風格,在 Pascal 程式中較少用。ALL_UPPERCASE 在慣例上只用來命名常數。

在命名變數時,可參考以下建議:

  • 使用領域知識 (domain knowledge) 來命名一般變數
  • 使用短變數來命名局部變數
  • 使用 ijk 來命名迴圈的計數器

在命名變數時,建議用領域知識來命名變數。例如,以下的 Pascal 片段用來用來計算複利的本利和:

amount := principal * (1.0 + rate) ** period;

即使不加上註解,我們也可以從這段程式碼所用的變數看出該指令的目的。

分享本文
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Yahoo
追蹤本站
Facebook Facebook Twitter