• 締切済み

EnumとType

VB初心者です。 EnumやTypeについてよくわかりません。 何に使用するのでしょうか? また両者の違いについてもよくわかりません。 どなたかご教授ください。 ちなみにEnumは構造体でTypeは列挙型という認識はあっていますか?

みんなの回答

回答No.2

■列挙型の用途 例)信号の色を返す関数 A. 列挙を使わない場合 Function 信号(col As Integer) As Color Select Case col Case 1 信号 = vbBlue Case 2 信号 = vbYellow Case 3 信号 = vbRed Case Else 信号 = vbBlack End Select End Function B. 列挙を使った場合 Enum SignalMode sigBlue sigYellow sigRed End Enum Function 信号(col As SignalMode) As Color Select Case col Case sigBlue 信号 = vbBlue Case sigYellow 信号 = vbYellow Case sigRed 信号 = vbRed Case Else 信号 = vbBlack End Select End Function この場合 列挙を使わない方は引数が「整数」なので、 関数を使用する人が「青信号の色を取りたい」と思った時に一体引数にどんな数値を入れたらよいか分かりません。 『青信号の時は引数に「1」を渡すこと』 というのは、この関数を作った私にしかワカラナイからです。(ソースを見れば分かりますが。) 整数はいくらでもありますから、渡すべき整数を突き止めるのは困難でしょう。 一方列挙型を使う場合、 VBのエディタで 「信号(」 と打ち込んだ時点で sigBlue sigYellow sigRed のどれかを引数に入れるように表示されます。 分かりやすい定数名さえつけておけば、青信号ならば「sigBlue」を入れるんだなってことが容易に分かりますよね。 という感じに使います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>Enumは構造体でTypeは列挙型という認識はあっていますか? 逆で Enumは列挙型でTypeは構造体 という認識だと思います。 type は、いわゆるユーザー定義型で、既知のデータ型を組み合わせた複合型を宣言します。(そういう型を作る) Enum は、ある(分類上の?)組の定数を作成することに相当します。 単なる1つの定数と違うのは、その型で組があることです。 その組であらかじめEnum ステートメントで宣言した以外のものは使えないのでそのような型を引数などに使うことは意味があります。(チェックができる)

関連するQ&A

  • Enum 列挙型でお聞きします。

    Enum 列挙型でお聞きします。 一般的に、列挙型の使用度はどのくらいがベストなのでしょうか? あまり使用しない方がいいものなのでしょうか? たとえば、データベースにかきこまれているカラム名をEnumの列挙型で指定しようとした場合、 これはやるべきではないのでしょうか? やはり、最初から、確実に決められていないとだめなのでしょうか? どうもいまいち、よくわかりません。 参考URLは、 http://www.stackasterisk.jp/tech/java/jdk506_01.jsp#2_1を参考にしています。 よろしくおねがいします。

    • ベストアンサー
    • Java
  • javaによるenum型の扱い

    最近javaに親しんできたのですが、 Cとjavaにおける列挙型の扱いの違いに困っています。 javaにおけるenumはクラスであり、 各要素にメソッドを追加できることは分かったのですが…… 例えば、Cにおけるenumは確か、 typedef enum{EAST,SOUTH,WEST,NORTH} dirT; //定義 -------- (略) -------- dirT dir=EAST; //宣言・dirに要素EASTを格納 というようなことが出来たと思いますが、 javaはenumもクラスで、さらにnewでメモリ確保できないと聞きました。 つまり、このように列挙型の保持はできないということになるのでしょうか。 結局やりたいこととしては、このように「保持してある」列挙型に対して 条件分岐処理をしたいと考えています。 説明が上手くできず伝わりにくいかと思いますが、 どうか回答をお願いいたします。

    • ベストアンサー
    • Java
  • 列挙体のメンバーの先頭に記号や数字を使うとエラー

    列挙体のメンバーの先頭に記号や数字を使うとエラー こんにちは。 vbの列挙体のメンバーの頭に、以下のように数字や記号を付けると、 Public Enum extension .wav 3gp End Enum 'ステートメントはenum本体内部には記述できません。' と怒られてしまいます。 何かエスケープする方法があればご教授ねがえないでしょうか? visual studio 2008を使用しています。 宜しくお願いします。

  • VB.NETでのEnumの使用について

    こんにちは、いつも拝見させて頂いております。 今回は、VB.NETのEnumについて教えて頂ければと思い、投稿しました。 VB.NETでEnum定義をしているのですが、クラス内のEnumとして定義 しているのですが、そのクラスのインスタンスを生成しなくても クラス内のEnum定義が参照できます。 クラスのインスタンスを生成していないのであれば、そのクラス内に あるEnum定義も参照できないのではないかと考えていたのですが、 参照できたので、なぜなのかがわかりません。 自分なりに色々と調べたのですが、EnumがSystem.Enumを継承している というのはわかりましたが、それがなぜ、クラスのインスタンスを生成 しないで、クラス内のEnum定義が参照できることになるのかがわかりません。 言語は、VB.NET2005です。 一応、ここの質問一覧も検索してみたのですが、該当しそうなもの が見当たらなかったので、ここに投稿させてもらいました。 お忙しいところ、申し訳ありませんが、ご教授ください。

  • enum列挙子に使える文字列と使えない文字列

    enum Ok{A,A,月1,月1,_,?} enum Ng{1月,1月,→,!,☆} public class Main{public static void main(String[] args){ System.out.println("あああああ"); }}//終わり このJavaプログラムはエラーになります。何故ですか? 要するに、enumに使える列挙子の法則性に興味があります。「?」は通って「!」はエラーって、コンパイルを試みた後に結果を知ると、色々とムカつきます。 「!」は通って「?」はエラーだと嘘が書物に書いてあると、騙されます。 enumで使える列挙子(要素)のタイプが載ってるサイト、enumの列挙子に使うとエラーになってしまう例が載ってるサイトなどを紹介してくれるとありがたいです。 どんな文字列でもenumに使えて、何でもOKなら親切だと思うのに・・・

    • ベストアンサー
    • Java
  • typedef enumの使い方を教えてください

    enumもtypedefも知っていますが下記コードのような typedef enumを使用したものがどういった場面で有効なのかを簡単な具体例を使って教えてください。 enum {     E1,     E2 } E; typedef enum {     e1,     e2 } e; 特に前者と後者を使いを分ける状況の違いについて教えてください。

  • 列挙体(enum)と関数教えてください。

    下記、勉強中の本から抜粋したものです。 main関数の中のenum animal selected;が呼び出されたあと、 どのように読んで?進んでいったらよいのでしょうか? enum(列挙体)のenum animal { Dog, Cat, Monkey, Invalid };が 0,1,2,3,の働きをするということは、enum animal select(void)関数 に続くということでしょうか? 本の中に、enum animalが型名、 selectedが変数の宣言となってることも わかりません。ただmain関数で宣言しているだけなのでしょうか? switch文の中の (selected = select())もどういう意味なのでしょうか? enum(列挙体)とenum animal select(void)関数の関係や、 main関数の中のenum animal selected;、 switch文の中の (selected = select())などの説明していただける方 教えてください。よろしくお願いします。 #include <stdio.h> enum animal { Dog, Cat, Monkey, Invalid }; void dog(void) {      puts("ワンワン!!"); } void cat(void) {      puts("ニャ~オ!!"); } void monkey(void) {      puts("キッキッ!!"); } enum animal select(void) {      int tmp;      do {           printf("0…犬 1…猫 2…猿 3…終了:");           scanf("%d", &tmp);      } while (tmp < Dog || tmp > Invalid);      return (tmp); } int main(void) {      enum animal selected;      do {           switch (selected = select()) {                case Dog : dog(); break;                case Cat : cat(); break;                case Monkey: monkey();break;           }      } while (selected != Invalid);      return (0); }

  • enumをintとして扱う必要があるパターンはあるのでしょうか。

    enumをintとして扱う必要があるパターンはあるのでしょうか。 よく enum ENUM_SAMPLE {  A,  B,  C, }; class CLASS_SAMPLE { private:  int type; // ENUM_SAMPLEのA,B,Cしか入らない public:  int GetType(){ return type; } }; という記述を良く見かけます。 class CLASS_SAMPLE { private:  ENUM_SAMPLE type; // ENUM_SAMPLEのA,B,Cしか入らない public:  ENUM_SAMPLE GetType(){ return type; } }; のほうが良いのではないか思うのですが、intで定義することによる利点が何かあるのでしょうか。 あと、過去に // bcc利用時に問題があるのでintに変更しました int CLASS_SAMPLE::GetType {  return type; } というコメントがついたソースを見たことがあり、 自分でbccを使ってenumを返すように修正してテストしてみたことがあるのですが、何が問題なのか見つけることが出来ませんでした。 enum名を直接使用した場合に問題が発生することがあるのか、またどのような問題が発生することがあるのか、回答お願いします。

  • c言語について教えて下さい

    知り合いのコードを解析していたときのことです。 彼のコードにはマクロはあまり多くなく、構造体や列挙型を使用していました。 コードの書き方は人それぞれではありますが、マクロで一つずつ定数などを扱うよりも、一つのグループとして構造体や列挙型を使い扱ったほうがよいのでしょうか、教えてください。 また、話は変わるのですが、構造体と列挙型の違いを教えてください。調べたのですがいまいちわかりません(・・;) よろしくお願いします。

  • Enumのname()とtoString()の違いについて

    J2SE5.0から追加されたEnumを使ってみようと勉強中です。 Enumの要素の識別名を取得するためのメソッドとしてname()とtoString()の2つがありますが、違いは何なのでしょうか? APIドキュメントによると『name()よりtoString()を使う方がいい』というようなことが書かれていますが、その理由がわかりません。 同じくAPIドキュメントに『toString()はユーザフレンドリな値を返す』という記述があって、これの意味もよくわからず悩んでいます。。。 どなたか、ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう