Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸
3.3 Case 语句
如果您的 if 语句变得非常复杂,并且它们基于对序数值的测试,您可以考虑将它们替换为 case 语句。case 语句包括一个用于选择值的表达式,以及一系列可能的值或值范围。这些值是常量,必须是唯一的且属于序数类型。最终,可能有一个 else 语句,如果您指定的值都不对应于可以选择的值,则执行这个语句。虽然没有相应的 endcase
语句,但 case 总是以 end
结束(在这种情况下不是块终结符,因为没有匹配的 begin
)。
注解: 创建 case 语句需要一个序数值。目前不允许基于字符串的 case 语句。在这种情况下,您需要使用嵌套 if 语句或不同的数据结构,比如字典(正如我在本书第14章中后面展示的)。
下面是一个示例(CaseTest 项目的一部分),该示例使用在数字输入控件 NumberBox
中输入的数字的整数部分作为输入:
varANumber: Integer;AText: string;
beginANumber := Trunc(NumberBox1.Value);case ANumber of1: AText := 'One';2: AText := 'Two';3: AText := 'Three';end;if AText <> '' thenShow(AText);
另一个例子是将前面复杂 if 语句扩展为 case 测试的多个不同条件:
case AChar of'+': AText := 'Plus sign';'-': AText := 'Minus sign';'*', '/': AText := 'Multiplication or division';'0'..'9': AText := 'Number';'a'..'z': AText := 'Lower-case character';'A'..'Z': AText := 'Upper-case character';#12032..#12255: AText := 'Kangxi Radical';elseAText := 'Other character: ' + AChar;
end;
注解: 正如您在前面的代码片段中所看到的,数值范围的定义与子范围数据类型的语法相同。单个分支的多个值则用逗号分隔。在 "康熙部首 "部分,我使用的是数值而不是实际字符,因为 IDE 编辑器使用的大多数固定大小字体都无法正确显示符号。
包含 else 部分以提示未定义或意外情况是一种良好的做法。Object Pascal 中的 case 语句只选择一条执行路径,并不将自己置于入口点。换句话说,它执行所选值冒号后的语句或代码块,并跳到 case 后的语句。
这与 C 语言(及其某些派生语言)截然不同,C 语言将 switch 语句的分支视为入口点,并将执行所有后续语句,除非您特别使用了 break 请求(尽管这是 Java 和 C# 在实现上存在差异的一种特定情况)。C 语言的语法如下:
switch (aChar) {case '+': aText = "plus sign"; break;case '-': aText = "minus sign"; break;...default: aText = "unknown"; break;
}