【发布时间】:2015-08-08 20:45:42
【问题描述】:
为什么这是“良好的编码习惯”?例如,当我制作剪刀石头布控制台游戏时,大多数人建议使用枚举而不是字符串。有什么区别?
【问题讨论】:
-
Answer by Jon Skeet as found by user3360241 有很好的解释,但遗憾的是由于 C#/Java 标签不匹配,不能用作重复项。 Guffa 在下面的回答提供了 C# 的风味。
为什么这是“良好的编码习惯”?例如,当我制作剪刀石头布控制台游戏时,大多数人建议使用枚举而不是字符串。有什么区别?
【问题讨论】:
这只是使编译器为您工作的方法之一。如果您使用字符串,编译器无法帮助您发现值中的拼写错误:
if (move == "rokc") { // just never matches
但如果你使用枚举,编译器只允许你使用有效值:
if (move == Moves.Rokc) { // compilation error
【讨论】:
switch。即使用户输入恰好与枚举标识符相同,也有必要将用户界面与内部使用的值分开。例如,如果您想将应用程序翻译成不同的语言,您不想更改枚举标识符。
查看此详细说明
枚举类型(也称为枚举或枚举)提供了一个 定义一组命名整数常量的有效方法 分配给一个变量。
【讨论】:
第一个枚举只是数字的标签。这意味着,当您的代码呈现纸、剪刀和石头时 - 程序会看到 1、2 和 3。计算机没有阅读或记忆问题,但人类有,因此您的代码将读取纸节拍岩石,而计算机看到 1 节拍3. 从性能的角度来看,这很重要。
列表也是有限的。使用枚举意味着您只能拥有这三个值之一,否则将无法编译。使用字符串意味着您的代码必须在运行时不断检查是否相等 - 因此它变得臃肿、缓慢且容易出错。
【讨论】:
部分原因是沟通的简洁性。字符串是一般的东西,枚举是特定的。部分原因是为了防止错误。使用字符串,您可能会出现拼写和大小写差异,从而导致错误。如果您拼写错误/错误大小写枚举,您将收到编译错误。如果你只是代表石头、纸、剪刀这三种简单的状态,它可能看起来并不太重要,但是随着你编写的代码变得越来越大,你会发现你想利用每一个机会来减少错误的变化和清晰度的表达。任何编程时间足够长的人都会有在尝试理解他们过去编写的代码时遇到很大困难的经历。
【讨论】: