枚举
让我们来了解一下枚举。
简单枚举
在所有应用领域中,都存在取值为字符串且具有固定可能值列表的属性。这类属性被称为枚举属性,而定义其可能字符串值的固定值列表则称为枚举。例如,在管理人员数据时,我们通常需要包含性别信息。gender 属性的可能取值可以限定为以下枚举标签之一:“man”、“woman”和“other”,或限定为以下枚举代码之一:“M”、“W”和“O”。当使用代码时,我们也需要提供对应的标签,至少应在说明表中解释每个代码的含义。
为了避免直接使用枚举字符串值作为枚举属性的内部表示,更优的做法是采用简化的内部表示形式,例如正整数 1、2、3 等,这些数字用于对可能的取值进行编号。然而,由于这些整数本身不体现其语义(语义由枚举标签指示),因此我们使用一种特殊的常量,称为枚举字面量,如 MAN 或 M,并以枚举名称作为前缀,例如 this.gender = GenderEL.MAN。这种写法在程序代码中提高了可读性。注意,我们遵循命名规范:枚举字面量名称全部使用大写字母。同时,我们约定将枚举数据类型的名称后缀加上 “EL”(表示枚举字面量)。这样,从名称 GenderEL 就能明确知道,该类型的所有实例都是“性别枚举字面量”。
记录型枚举
还存在一类枚举,其成员为记录类型,其中某个字段用于表示枚举字面量的名称。一个典型的例子是单位制的枚举列表:
| 单位符号 | 单位名称 | 维度 |
|---|---|---|
| m | 米 | 长度 |
| kg | 千克 | 质量 |
| s | 秒 | 时间 |
注意到,“单位符号”和“单位名称”两列的值均唯一,因此任一列均可作为枚举字面量的名称。
快速总结
综上所述,我们可以区分以下三种枚举形式:
- 简单枚举:定义一组自解释的枚举标签。
- 编码列表:定义一组代码与标签的配对。
- 记录枚举:由一组记录组成,其结构类似于类,通过简单的属性来定义记录字段。
由于枚举被用作枚举属性的取值范围,因此它们被视为数据类型。
枚举还可以具备额外功能。例如,我们可能希望基于已有枚举扩展出新的枚举。在编程语言及其他计算语言中,枚举的具体实现方式和特性各不相同。