跳转到内容

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 章:表达式 [带注释的]
华夏公益教科书