真偽の二者択一はboolを使いますが、その他の択一選択肢は列挙型であるenumを使いましょう。
次のようにデータの有無で分岐する処理があるとします。
(1)
1| private const int DATA_ARI = 1; // データ無しステータス値 2| private const int DATA_NASHI = 0; // データ有りステータス値 3| 4| private void NanikanoSyori(int dataUmu){ 5| 6| if(dataUmu == DATA_ARI){ 7| // データが有る時の処理 8| }else if(dataUmu == DATA_NASHI){ 9| // データが無い時の処理 10| } 11| 12| }
一応処理はうまく流れるかもしれません。。
しかし既にお気づきの通り、メソッドのパラメータであるdataUmuは、定数定義している 0, 1 以外も当然受け付けます。
そのことが考慮されていません。
というと、次のように修正する人がいます。(実話です)
(2)
1| private void NanikanoSyori(int dataUmu){ 2| 3| if(dataUmu == DATA_ARI){ 4| // データが有る時の処理 5| }else{ 6| // データが無い時の処理 7| } 8| 9| }
処理分岐は全てのintに考慮されています。。って、そもそもデータ有りの 1 を勝手に基準にしているだけで、1以外はデータ無しの扱いなの?? 逆に別の人は、データ無しの 0 を勝手に基準にしてしまって、データ有りの時に 2 を入れちゃうかもしれないし・・いやいやいや・・・・。
なんて、言い争うのはもうやめて、enumを使いましょう。そもそも間口が必要以上に広いのが問題の元。
(3)
1| // データ有無ステータス 2| private enum DataUmu{ 3| Ari, 4| Nashi 5| } 6| 7| private void NanikanoSyori(DataUmu dataUmu){ 8| 9| if(dataUmu == DataUmu.Ari){ 10| // データが有る時の処理 11| }else{ 12| // データが無い時の処理 13| } 14| 15| }
このようにenumを使えばパラメータにはDataUmuで定義された2値以外が設定されることはあり得ません。よって安全、安心です。
この例は 有り/無し の2値ですが、それでも真偽でない場合はboolよりも効果があります。
意味をそのまま名前付けすることができるからです。なので、2値以上の列挙ならenumはいつでも効果を発揮します。
しかも、IDEでは型の後に "." を打つことで入力補完してくれます。正に列挙!
(1),(2)での争い、問題を吹き払い、わかりやすく使いやすいenum、使わない手はありません。