跳轉到內容

Ada 程式設計/表示式

來自華夏公益教科書,開放的書籍,面向開放的世界

Ada. Time-tested, safe and secure.
Ada。經久耐用,安全可靠。

表示式

[編輯 | 編輯原始碼]

LRM 將表示式定義為“定義值計算或檢索的公式。”.[1] 表示式有很多形式,從字面量或名稱之類的基本元素到量化表示式。

表示式通常用於賦值語句中,或者作為更大的表示式的組成部分。表示式的值通常涉及計算。但是,一些表示式的值在編譯時確定;這些稱為靜態表示式。一個所謂的簡單表示式(恰好是一個)在以下語句中可以看到

   Area := Length * Height;

文字Length * Height 具有表示式的形式,並用在賦值語句的右側。計算表示式的值意味著將名為Length的值乘以名為Height的值。以下示例展示了將相同表示式用作更大表達式的組成部分

   if Cost (Paint, Area => Length * Height) > 900 * Dollar then
     ...

更大的表示式以Cost開頭,以Dollar結尾。它包含另一種形式的表示式,一個關係,並將函式呼叫和另一個乘法表達式分別放置在關係的運算子>的左側和右側。這兩個被稱作運算元,結果是布林表示式。

表示式型別

[編輯 | 編輯原始碼]

基本表示式包括字面量,例如十進位制(實數)、列舉、字串和訪問值字面量

  2.5e+3
  False
  "и"
  null

使用其中很多,可以編寫聚合(一個基本元素),

  (X => 0.0,
   Y => 1.0,
   Z => 0.0)

但也可以包含任意複雜的子元件,從元件表示式建立聚合,

  (Height => 1.89 * Meter,  
   Age    => Guess (Picture => Images.Load (Suspects, "P2012-Aug.PNG"),
                    Tiles   => Grid'(1 .. 3 => Scan, 4 => Skip)),
   Name   => new Nickname'("Herbert"))

Age 與巢狀的函式呼叫的值相關聯。Tiles 的實際引數具有型別名稱Grid 限定了後面的陣列聚合;元件Name 與一個分配器相關聯。

眾所周知的“數學”表示式在 Ada 語法中具有非常對應的簡單表示式,例如 2.0*π*r,或者關係

  Area = π*r**2

其他表示式測試成員資格在範圍內,或在型別中

  X in 1 .. 10 | 12
  Shape in Polygon'Class

條件表示式,量化表示式

[編輯 | 編輯原始碼]

Ada 2012 中新增了一些形式,可以使表示式的值有條件地依賴於另一個表示式的值。它們有一對圓括號,並以關鍵字開頭,這清楚地將它們與其他型別的表示式區分開來。例如

  Area := (if Is_Circular then Pi * Radius**2 else Length * Height);

在這個例子中,Is_Circular 的值決定了用於計算整個表示式值的表示式的哪一部分。類似的結構也存在於case 以及for。這些型別的表示式經常用在斷言中,例如在基於契約的程式設計的條件中。

參考資料

[編輯 | 編輯原始碼]
  1. 第 4 章:表示式 [帶註釋的]
華夏公益教科書