- - PR -
CONSTに関して
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-04-04 11:45
VB.NETでWeb開発をしています。下記の様に0〜2の値を
常数として使用したいのですが、CONSTとEnumのどちらを使用した方が 便利なのでしょうか? <1> #Const CNST_SUPER = 0 #Const CNST_EAST = 1 #Const CNST_WEST = 2 <2> Public Enum AdminID super= 0 east = 1 west = 2 End Enum | ||||||||
|
投稿日時: 2003-04-04 12:35
karajanです。
東西を表す場合に、 const EAST = 0; const WEST = 1; として、 次のようなメソッドがある場合、 function hoge(direction as integer) パラメータdirectionには0,1以外の数値がセットされている可能性がありますが、 enum DirectionEW { EAST, WEST } とすれば、 function hoge(direction as DirectionEW) パラメータには東、西以外の値は来ません。 といった感じで使い方によって変わってくると思いますが、 こういう場合は列挙型のほうが便利というか安全な気がします。 回答になってないかもしれませんが・・・。 | ||||||||
|
投稿日時: 2003-04-04 12:59
そうとは限りません。次のコードは実行できます。
列挙体は大してタイプセーフではありません。コードがわかりやすいとか、インテリセンスが使えるとかいう程度の機能だと思います。 | ||||||||
|
投稿日時: 2003-04-04 13:36
karajanです。
そうですね、やろうと思えばできたな・・・とは思ったのですが、あまりやらないと思ったもので・・・。 列挙型がもっている便利さ(インテリセンスや値一覧の取得等)や、コードで明示的に型を示すことで、より間違いを防ぐ効果もあると思いますので、私は上記のような場合は列挙型のがいいかな・・と思ってます。 | ||||||||
|
投稿日時: 2003-04-04 14:59
迷わず列挙型を使ってください。
例えば、方角の値を受けて仕事をする関数hoge()があった場合に const int CNST_North=0; const int CNST_South=1; const int CNST_East=2; const int CNST_West=3; void hoge(int dir){ } とすると、渡されているのは数値です。もちろん呼び出す方も呼び出される方も「北は0で、南は1で・・・」と知っていますので、方角の情報を渡すことができますが。対して、 enum Direction{ North, South, East, West, } void hoge(Direction dir){ } このようにすれば、受け渡しされているのは方角です。渡される型には「方角」という意味が与えられています。 Direction.Northは0ではなく、あくまで北なのです。 NothingButXMLInfoSetさんの例のように数値を型変換しても、渡す値を(Direction)iなどと変換した時に、プログラマは「この渡す値は方角ですよ」との意思表示しているわけです。逆にhogeから見ると「方角しか受け取らん」という格好になります。 オブジェクト指向なのですから、それぞれのオブジェクトの意味ということについて考え、迷わず列挙型を使いましょう。 | ||||||||
|
投稿日時: 2003-04-04 16:16
Enumに文字を設定するとエラーとなりますが、整数しか設定できないのでしょうか?
EastWest = Request.QueryString.Item("EastWest") if EastWest = AdminID.east then の様にしたいのですが。 Public Enum AdminID super= "0" east = "1" west = "2" End Enum | ||||||||
|
投稿日時: 2003-04-04 17:15
こんにちは。
列挙できるのは整数だけですが、こんな風にして、実現できるそうです。 | ||||||||
|
投稿日時: 2003-04-04 17:56
列挙体の型はいわゆる整数型(LongやShortも含むChar除く)にしかできません。Stringにはできません。
Request.QueryString.Item("EastWest")で得られる値のほうを数値型に変換すれば可能でしょう。 |