对用户界面函数使用枚举类型是个好主意吗?

Is using enum types for user interface functions a good idea?

本文关键字:好主意 类型 枚举 用户界面 函数      更新时间:2023-10-16

假设我正在构建一个简单的类,该类可以在屏幕上打印一些文本,并且它有可能更改文本的颜色。

myclass a("this is the text");
a.setColor("green");

我还在学习C++,最近我被介绍给enum,我想我会试一试。我想知道在界面函数中使用enum类型是否是一种好习惯,如上述setColor

在接口函数中使用enum类的优点或缺点是什么?是否存在它们更适用的情况,是否存在它们不好使用的情况?

如果我想合并属性怎么办?

例如
a.setAttribute("bold reverse");

我不知道接口是否是我想描述的正确术语:我的类用户最终将使用的功能。

在您的情况下,(至少)有两个优点:

  • 无需在运行时解析字符串,从而提高效率。 可以直接在 switch 语句中使用枚举变量。
  • 枚举(在某种程度上)是自我记录的,代码的用户必须努力提供无效值。

一个潜在的"缺点"是颜色字符串来自例如运行时用户输入(他们输入文本框或其他内容)。 您需要解析此字符串并将其转换为枚举。 但这并不是一个真正的缺点,因为无论如何你都需要这样做。 最佳做法是让用户界面逻辑验证字符串并尽早转换为枚举。

如果我想合并属性怎么办?

我至少可以想到三个选项:

  • 使用多个调用来setAttribute
  • 传递属性数组。
  • 将每个枚举值定义为 2 的幂,然后您可以将枚举与 | 组合在一起。

是的,在这种情况下使用 enum 似乎比实际字符串更好。

一个明显的优势 - 强打字。

如果setColor接受char*,就像你的情况一样,你可以做:

 a.setColor("horse");

您只能在运行时将其检测为错误。

如果setColoreColors作为参数:

 a.setColor(eGreen);
 a.setColor(eRed);

会编译,但是

 a.setColor(eHorse);

不会。

在这种情况下

,枚举肯定比字符串更明确。至于值的串联,你可以使用一些小摆弄来做到这一点。将枚举的值设置为增加 2 的幂,然后您可以将它们放在一起或。

enum TextAttributes {
    Bold = 1,
    Italic = 2,
    Reverse = 4,
    StrikeThrough = 8,
    Underline = 16
};
TextAttributes attr = Bold | Reverse;