2011-02-10 88 views
7

所以,我在课堂上有一个变量“状态”。我想声明它为一个整数,所以我可以保存一些if语句。要做到这一点使用枚举为int是一个好习惯吗?

int state; 

一种方法是声明枚举国家{一= 0,两= 1,三= 3},然后在switch语句,它会成为:

switch (state) 
{ 
case One: 
    dosomething(); 
    break; 
case Two: 
    dosomething(); 
    break; 
case Three: 
    dosomething(); 
    break; 
} 

那么,像这样使用枚举是否是一个好习惯? 有没有更好的方法来做到这一点?

谢谢!

+18

用与'0','1'和'2'值相对应的名为`One`,`Two`和`Three`的枚举数声明一个枚举是一个非常糟糕的主意。 – 2011-02-10 21:40:50

+4

相应的值实际上是0,1和3。:) – Marlon 2011-02-10 22:01:38

回答

12

是的,这是一个很好的方法来做到这一点。您通常使用enums来使生活更轻松,许多不同的数字并没有真正告诉其他编码人员,但这些数字并不是很有用。

所以这是一个非常好的使用它的方式,它使你的代码易读易懂。

尽管@James McNellis指出,命名像“1,2,3,4”这样的枚举是一个坏主意,因为它并没有表达它的真实含义。

但我怀疑这只是你身边的一个例子。

考虑此来代替:

switch (operationState) 
{ 
    case Waiting: 
     dosomething(); 
     break; 
    case Running: 
     dosomething(); 
     break; 
    case Ended: 
     dosomething(); 
     break; 
} 

在这种情况下,“动作”可以是:等待,跑步或端,这使得它易于阅读和理解。现在考虑没有枚举的方式:

switch (iState) 
{ 
    case 997: 
     dosomething(); 
     break; 
    case 998: 
     dosomething(); 
     break; 
    case 999: 
     dosomething(); 
     break; 
} 

997告诉你什么?绝对没有!使用可读和易懂的代码使每个人的生活更轻松。

0

在switch语句中使用可读状态名而不是数字,对我来说似乎很好。 而且我不认为它也会影响性能。

所以没有理由不使用枚举!

7

如果您将state声明为State而非int,则上述所有代码都可以正常工作。您可以在switch语句中使用它,为其分配新的值,与它进行比较等。在这里使用int确实没有任何好处,因为它本质上是“位于源代码中”。你的变量不是一个整数。将它乘以一个值或将它除以一个值是没有意义的,或者将它左移或右移一位。将变量标记为State可以更清楚地表明您确实拥有多个值中的一个,并防止出现上述某些错误。另外,它使编译器有更好的机会来诊断这样的事情:

state = 137; // Error! Can't do this assignment without a cast. 

一般情况下,使用类型系统,你的优势。如果它是int,请将它设为int。如果它是枚举类型,则将其设为枚举类型。

相关问题