[Pascal] 程式設計教學:宣告和使用變數 (Variable)

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

    前言

    在程式語言中,變數是用來操作資料的特性。本文介紹在 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 Email
    【追蹤網站】
    Facebook Facebook Twitter Plurk
    【支持本站】
    Buy me a coffeeBuy me a coffee