2011-02-10 14 views
7

私はクラス内に変数 "状態"を持っています。私は整数として宣言したいので、if文をいくつか保存することができます。これを行うにはenumをintとして使用するのは良い方法ですか?

int state; 

一つの方法は、列挙型の国家{= 0、一つ、二つ= 1、スリー= 3}を宣言することで、その後、switch文で、それはなる:

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

だから、このようなenumを使うのは良い習慣ですか? これを行うより良い方法はありますか?

ありがとうございます!

+18

値 '0'、 '1'、および '2'に対応する 'One'、' Two'、および 'Three'という名前の列挙子で列挙を宣言することは非常に悪い考えです。 –

+4

対応する値は実際には0,1,3です。:) – Marlon

+1

これは例だった。 – Snowfish

答えて

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はあなたに何を伝えますか?絶対にNothing!すべての人生をより楽にするために、読みやすく分かりやすいコードを使用してください。

+0

enumsがとても役立つ理由をうまく説明しました。彼らはコードを開発するときに実際に自分自身に入り、コードヒントを持ち、 'myEnum ::'をタイプして、あなたが使うことができるすべての値のリストを持っているのが素晴らしいです。列挙型の実際の値が何であるかを変えることができ、コードを "破るべきではない"というコードを変更することができますが、列挙型の値を読み取るのと同じように、それはその価値です。しかし、私はそれが自分のコードではなく、あなたのものではないと言います。 – thecoshman

0

番号の代わりにswitch文で読み取り可能な状態名を使用すると、うまくいくようです。 そしてパフォーマンスにも影響はないと思います。

enumを使用しない理由はありません。

7

stateintではなくStateと宣言されている場合、上記のコードはすべて同様に機能します。 switch文で使用したり、新しい値を代入したり、それと比較したりすることができます。intを使用すると、実質的に「ソースコードに横たわっています」という利点はありません。あなたの変数は整数ではありません。それを値で乗算または除算すること、またはビットを左右にシフトすることは意味がありません。変数をStateとマークすると、実際に複数の値のいずれかを保持しており、上記の間違いを防ぐことができます。さらに、コンパイラには次のようなものを診断する良い機会が与えられます。

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

一般的に、あなたのタイプのシステムを使用してください。 intの場合は、intにしてください。列挙型の場合は、列挙型にします。

関連する問題