Ada 编程/表达式
外观
< Ada 编程
LRM 将表达式定义为“定义值计算或检索的公式。
”.[1] 表达式有很多形式,从字面量或名称之类的基本元素到量化表达式。
表达式通常用于赋值语句中,或者作为更大的表达式的组成部分。表达式的值通常涉及计算。但是,一些表达式的值在编译时确定;这些称为静态表达式。一个所谓的简单表达式(恰好是一个项)在以下语句中可以看到
Area := Length * Height;
文本Length * Height
具有表达式的形式,并用在赋值语句的右侧。计算表达式的值意味着将名为Length
的值乘以名为Height
的值。以下示例展示了将相同表达式用作更大表达式的组成部分
if
Cost (Paint, Area => Length * Height) > 900 * Dollarthen
...
更大的表达式以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
其他表达式测试成员资格在范围内,或在类型中
Xin
1 .. 10 | 12 Shapein
Polygon'Class
Ada 2012 中新增了一些形式,可以使表达式的值有条件地依赖于另一个表达式的值。它们有一对圆括号,并以关键字开头,这清楚地将它们与其他类型的表达式区分开来。例如
Area := (if
Is_Circularthen
Pi * Radius**2else
Length * Height);
在这个例子中,Is_Circular
的值决定了用于计算整个表达式值的表达式的哪一部分。类似的结构也存在于case
以及for
。这些类型的表达式经常用在断言中,例如在基于契约的编程的条件中。