こんにちは､ ようこそ｡
データ型についての話を続けて､ もう2つほど話をしましょう｡
この講義では､ enumデータ型とchar careデータ型について説明します｡
つまり､ 敵項目とは､ プログラマーが変数を定義し､ その変数に格納されうる有効な値を指定できるデータ型なのである｡
だから､ enumはとても強力なのです｡
実はデータ型を指定しているのです｡
enumというキーワードですが､ 基本的に特定の値だけを含む独自のデータ型を持つことができます｡
例えば､ my colorという変数を作って､ それがあるenum型であれば､ 赤､ 黄､ 青といった原色の値しか含まない､
あるいは代入できないように設定し､ それ以外の値は代入できないようにすることができるわけですね｡
コンパイラはエラーを出します｡
それで､ 作成できるデータ型を指定するようなものですが､ それで､ データ型を定義して､
その型の変数を作成することになります｡
つまり､ enumがキーワードになるわけです｡
このenumデータ型を使うには､ まずenumデータ型を定義して､
変数名と同じような識別子を付ける必要があります｡
そして､ enumキーワードの後に､ 識別子のような名前を指定します｡
そして､ 識別子の後に､ 有効な値のリストをすべて中括弧で囲みます｡
そして､ このenumは基本的にこれらの値しかありえないということですね｡
そして､ 後でそのenumを使いたいときには､ そのenum型の変数を作ると宣言します｡
では､ 実際に見てみましょう｡
ここでは､ primary colorというenum型を定義しています｡
enumキーワードとenumの名前（primary color）､ そしてその型のすべての値を定義しています｡
そして､ 左中括弧と右中括弧で囲まれているのがわかると思います｡
今回は､ 赤､ 黄､ 青の値のみを保持できる原色という名前のenumの種類を用意しました｡
そして､ 原色に値を代入しようとしても､ 他のものは格納できませんし､ 原色データ型を使って､ 他のものに変数値を代入しようとしても､
それはうまくいきません｡
つまり､ これはあくまで私たちの定義です｡
まずenumを定義し､ それを再び使用する必要があります｡
定義とは､ こういうものだと言っているだけです｡
そして､ このように白を基調とした色になっています｡
赤､ 黄､ 青のようにすることができます｡
そのため､ 原色型と宣言された変数には､ 赤､ 黄､ 青の値しか割り当てられない｡
プログラム内部では､ 他の値は動作しません｡
だからまた､ それを定義する最初のステップ｡
第二段階は､ 使うことです｡
ですから､ 定義した後は､ このprimary colorという型の変数を宣言する要領で
今の変数は､ まだenumキーワードを使っています｡
そして､ 実際に定義したときに指定したenumの名前が表示されます｡
そして､ 最後の最後に､ 変数リストでフォローするのです｡
ここでは､ enumキーワードを使用して､ 使用するenumの名前（先ほど作成したPrimary
Color）を指定します｡
あとは､ 名前だけですね｡
つまり､ ここには原色系の敵が2人いるわけです｡
グレッグの色に私の色｡
ここでもenumを使っているわけです｡
enumができるのは､ 赤､ 黄､ 青だけで､ すでに定義済みです｡
そして今､ my colorとgray colorという2つの変数があり､ これら3つの値のうち1つだけを含むことができ､ 他の値を含むことはできない､
と言っているのです｡
ここでは､ 原色という変数を宣言しているわけです｡
そしてまた､ これは私の色とグレイの色の2つの変数を原色型に定義しています｡
これらの変数に割り当てることができる唯一の許容値であるenum型である｡
この2つの変数が赤､ 黄､ 青です｡
だから､ 私の色は赤に等しいと言えるのです｡
そして､ それはまったくもって妥当なことです｡
私の色＝緑とは言えなかったのです｡
これらの値はその列挙型では有効ではないので､ うまくいきません｡
私の色は､ 原色列挙型の3つの値しか含むことができないので､ 私の色がジェイソンに等しいとは言えません｡
つまり､ 特定の値のみを格納できるデータ型を独自に定義していることになるので､ 非常に強力なデータ型と言えます｡
別の例として､ month 型の列挙型を作成し､ month は January, February, March, April, May, June,
July, August のいずれかとする場合について説明します｡
10月､ 11月､ 12月｡
繰り返しになりますが､ これが定義です｡
ここで､ 有効な値が何であるかを言っているのです｡
もし､ monthを使うなら､ Enum Monthという変数を作り､ それに好きな名前をつけます｡
そして､ その名前には､ 1月から12月までの有効な月のどれかを割り当てることができます｡
そして､ これがenumの使い方です｡
さて､ C言語で所得がどのように実装されているかということですが､ 本当に数字で表現されているのでしょうか？
そのため､ コンパイラは実際には列挙型識別子を整数定数として扱います｡
つまり､ 定義したリストの最初の名前は､ 値をプリントアウトしようとすると､ ゼロになるわけです｡
このことはまた､ どのように定義されているのか､ ということです｡
もし､ 出力を表示させるとしたら､ 実際の値はどうなるのでしょうか？
つまり､ 今月という月がある場合､ enum month型の新しい変数を作成し､
今月は2月に等しいとします｡
今月は実際に整数に等しくなりそうです｡
それでも比較はできるし､ 2月との比較にも使える｡
しかし､ この月をコンソールに出力するとしたら､ この月は実際には､ リストで定義されたときに対応する整数値である｡
だから､ この場合､ 2月は1回になる｡
なぜなら､ この月の列挙は､ 2番目が2月だからです｡
そうだろ？
そこで､ 話を戻すと､ 定義したときのことを思い出していただくと､ 2番目は2月です｡
そして､ 2枚目なのに1枚であることに気づくはずです｡
なぜなら､ その意味はリストスタートがゼロであることだからです｡
つまり､ 1月は0､ 2月は1､ 3月は2というように｡
そして､ これは2月のような実際の値との比較と同様に比較することができるので､
重要です｡
さて､ 特定の整数値を列挙識別子と関連付けたい場合は､ 代入演算子を使って明示的に何かを代入することができます｡
実際に型を定義するとき
例えば､ ここで新しいenum型directionを定義し､ directionの有効な値をup,
down, left, rightとすると､ 3番目の値leftにはleftは10に等しいという等号があることがわかるでしょう｡
この場合､ enum型の方向は､ up, down, left, rightの値で定義されます｡
割り当てることができる有効な値は､ これだけです｡
このタイプの変数は､ リスト定義の最初の要素であるため､ 0に等しくなる｡
1は2番目の要素なので､ downと同じになる｡
今回もゼロからスタートです｡
10は左と同じになるんです｡
明示的に10に等しいと割り当てているので､ 2に等しくなるわけではありません｡
だから､ 左は10になる｡ それは､ 私たちが定義に入れたものだからだ｡
そして､ 右は11に等しくなります｡ なぜなら､ その直後の次の1が､ その次の1であるからです｡
だから､ もし別の値があって､ 12になるとしたら｡
そのため､ 必要であれば､ 明示的に値を割り当てることができます｡
しかし､ ここでも重要なのは､ 比較するとき､ あるいは値をプリントアウトするときに､ ゲノムはシステム内部で実際に整数として表現されていることを知らなければならないからです｡
しかし､ enumに署名するとき､ それらの値を別の値と実際に比較するとき､
2月､ 3月､ 1月を実際に使用することができます｡
そこで､ もう少し慣れていただくために､ 敵に関するちょっとした課題､ チャレンジを用意しました｡
しかし､ ここで重要なのは､ どのようにしてenum型を作ることができるのか､ ということです｡
そして､ その型の変数を作って値を割り当てるにはどうしたらいいのでしょうか｡
そしてまた､ 何が割り当てられているかをコントロールできるのがいいですね｡
方向を割り当てたくない場合は､ 右隅とかね､ 上下左右を定義すればいいんです｡
もう一つ重要なデータ型として､ CHAまたはケア（発音によって異なる）について説明します｡
これまで主に数値データ型についてお話ししてきました｡
今､ enumについてお話しました｡
Char は L a のような一文字を表す｡
桁の文字6またはセミコロン｡
そして､ ここに表示されているのはシングルクォートです｡
1は数字なのに､ その文字がわかるのは､ シングルクォーテーションで囲まれているからです｡
したがって､ プログラム中の一重引用符の中にあるものは､ 文字データ型と呼ばれる｡
そして､ 一般的にはABCD､ FGのような英数字の文字になりますが､ 実際の数字やキーボードの他の文字にすることも可能です｡
また､ 文字変数を符号なしと宣言することも可能です｡
符号なしというのは､ マイナスになりえないという意味だけです｡
だから､ それはあまり意味がないんです｡
しかし､ 符号なし文字があるときにコンパイラに伝えるのは､
正の数だけであるということです｡
それについては､ これからお話しします｡
しかし､ 文字データ型と文字列を混同しないようにしましょう｡
文字データ型は､ 一重引用符で囲まれた1文字だけです｡
弦楽器については､ 別のコーナーでご紹介しています｡
これは､ 文字列､ 文字数になります｡
ですから､ characterやcharとstringやstringを混同しないようにしましょう｡
文字を宣言して使用する場合は､ データ型､ charまたはcare､ そして識別子を指定するだけでよい｡
つまり､ この例では炭焼きをしたわけです｡
これはchar型のbroiledという変数を宣言していることになります｡
その変数に代入するときに､ それを入れるのです｡
一重引用符の中に値を入れています｡
だから､ ブロイルイコールtは全く問題ない｡
もし､ boiledイコールteaと言おうとして､ teaが引用符の中に入っていなかったら､ teaは変数なので､ それはダメなんです｡
そして､ RTもchar型でなければ成立しない｡
ここでは､ ロイヤルイコール二重引用符で囲んでいます｡
T 繰り返しになりますが､ ダブルクォートとCは文字列という意味なので､ これは有効ではありません｡
ですから､ このシングルクォートを省略すると､ コンパイラはTを変数名と勘違いしてしまい､
うまくいかないのです｡
ダブルクォートを使うと､ 文字列を使っていると思われます｡
先ほど述べたように､ 文字に値を割り当てるのに数値コードを使っても､ ASCIIテーブルを使うだけでいいのです｡
つまり､ ASCII表は､ コンピュータの中で文字を数字として表現する方法なのです｡
だから､ このテーブルがあるんです｡
また､ 基本的に文字型に数値を代入すると､ ASCII値を代入していると勘違いしてしまうんです｡
それでどうするかというと､ グレードに65を割り当てるのです｡
ASCIIテーブルで65を検索し､ その文字に相当するものを表示します｡
そして､ その文字が何であるかは､ ASCII表を見なければわからない｡
でもね､ Bは48みたいなもんでしょ｡
つまり､ 繰り返しになりますが､ これはコンピュータがある文字を数字で表現する方法なのです｡
つまり､ 文字に数字を割り当てることはできず､ ASCIIテーブルの内容に基づいて1文字に変換されるだけなのです｡
エスケープ文字｡
これは､ 基本的にアクションを表す特殊な文字で､ C言語のプログラミング言語について聞くことになる特定の用語である｡
ですから､ 例えば､ バックスペースを表す特殊文字や､ 改行を表す特殊文字を用意することができます｡
または､ ターミナルベルのリングを表す特殊文字｡
そして､ これらのアクションを表すには､ 基本的に一重引用符の中に文字のような厄介な記号を使用します｡
そして､ いくつかの例を挙げます｡
これらはエスケープシーケンスとも呼ばれます｡
アクションを表す特殊文字です｡
ですから､ エスケープシーケンスも文字変数に代入されるときはシングルクォートで囲まれます｡
文字列の中にも､ このようなエスケープシーケンスをよく見かけますが､ これは動作を表すものです｡
例えば､ ここでは文字xがシングルクォートのバックスラッシュnと等しいとします｡
また､ 多くのエスケープ文字がバックスラッシュで始まっていることにお気づきでしょう｡
でも､ バックスラッシュ・エンドは1文字なので､ なんだか変な感じです｡
プログラム上では改行を意味する｡
ですから､ その文字を出力しようとすると､ 実際にはバックスラッシュnは出力されず､ 改行が出力されることになります｡
新しい線が見えてくるはずです｡
プリントアウトしてください｡
だから､ Char Xはこのキャラクターを表すことになる｡
また､ 変数xを表示するとしたら､ 次の行を進めるだけです｡
そして､ 脱出の手順も何通りもあります｡
これは､ 海の入門書から引用した､ 行動を表すすべてのエスケープ文字を表す素敵な小さな表です｡
そこで､ バックスラッシュの話をしました｡
N それは新しい路線ですね｡
バックスラッシュ
R キャリッジリターンです｡
バックスラッシュ V は垂直タブです｡
バックスラッシュTは水平タブだと思います｡
それでは､ この例と､ 素敵なコードブロックエディタ内でのEnumの例をいくつか挙げてみましょう｡
ここでは､ mainメソッドとenumでおなじみのプログラムを作ってみましょう｡
繰り返しになりますが､ enumは､ どのような値を割り当てるかを決められるのが良いところです｡
でも､ 2段階あるんですよ｡
enumを作るときは､ 型を定義して､ その型の変数を作らなければならない｡
そして､ そのどちらにもenumキーワードを使用します｡
したがって､ 新しいタイプのenumを作成し､ このenumにいくつかの値と等しい名前を付けたい場合､
例えば､ aというタイプのenumを作成することができます｡
enum type genderを見ると､ enum genderがあります｡
そして､ 背面の四角いブラケットを使うだけです｡
角括弧のスクイグリーブラケットと混同しないように｡
そして､ ジェンダーの価値観のリストを定義したのです｡
基本的には男性だけで､ それをカンマで区切って､ 女性､ そしてセミコロンで終わらせるということでいいんです｡
そして､ これは何を言っているかというと､ 私たちはジェンダーという新しいタイプを持っているということです｡
型enumである｡
そして､ このタイプの変数に割り当てられる値は､ maleとfemaleだけである｡
このenumを使用する場合は､ 新しい変数を作成します｡
型の性別の名前をenumと言えばいいだけです｡
そして､ 私の､ 私の性別と言えばいいのです｡
そうだろ？
そして､ このように変数を宣言しているのです｡
変数my genderを宣言していますが､ 値を代入したり初期化したりしていません｡
男性か女性かという価値観しかないのです｡
だから､ 私の性別は男性に等しいと言うことができ､ それは有効です｡
そして､ コンパイルしてくるとしたら｡
これなら大丈夫でしょう｡
エラーはない｡
また､ 他のものを割り当てようとした場合､ 例えば､ 文字列を割り当てたいとした場合､
44という数字で割り当てたいと言ってみましょう｡
さて､ これを作ろうとすると
intなのでエラーにならずに無事ビルドされたことがわかると思います｡
でも､ それを紐でくくったりすると､ もっと価値が上がると思うんです｡
アサイン時に互換性のない型と言われそう｡
だから､ そこにエラーがあるんです｡
かなり見にくいですね｡
でも､ 基本的にここでは文字列を代入してはいけないんです｡
44型に合っていないから｡
サインは男性か女性しかできません｡
そしてまた､ これが整数で何を表しているのかを確認しようとすると､ タイプできるように､ 男性と言うことができます｡
そして､ 実際に他の変数と比較することで､ 別の性別のenum gender型を作成することができます｡
ここでは､ 常に良い命名規則を使いたいものです｡
スペルが正しいか確認する｡
その時に女神と言えるし､ 実際にブーリアン値を作って見ると言うこともできる｡
trueかfalseでboolは男性だと言うことができ､ それは男性イコール女性ということになる｡
男性イコール女性ではなく､ 自分の性別がイコールなんですね､ すみません｡
私の性別は他の性別と等しくないので､ これは実際にはfalseを返すでしょう｡
私の性別は男性に等しく､ 別の性別は女性の失敗と等しく､ 男性は偽の値またはゼロ値に設定されるでしょう｡
また､ 敵の値をプリントアウトして実際に見ることもできますが｡
そして､ もし私たちが気づくのは､ 実際にenum genderの値をプリントアウトするとしたら､
まだ変数をプリントアウトする方法を学んでいませんが､ print fのようなことができることに気づくでしょう｡
別の性別が1つに等しくなる｡
だから､ かなりキレイなんです｡
また､ 例題の中のcharsについて少し話をしたいと思います｡
変数名でchars単体を作ることができる｡
char型を使って､ Char, my characterのように言うだけで､ 一重引用符で囲めば何でもイコールになります｡
j fでも何でもいいし､ 変数に符号を付けて､ 表中のASCII番号を表すこともできる｡
しかし､ これはバックスラッシュnのような特定の動作を表すエスケープ文字を割り当てることができるのが良いところです｡
そして､ これを使おうとしたり､ プリントアウトしようとすると､ 改行されるので､
print Fと言えば､ 次回の講義でお話しするパーセントCのようなことをして､ 自分の文字をプリントアウトしなければならないのです｡
そうすると､ 実際に画面に改行が表示されます｡
だから､ もしこれを作るとしたら｡
そして､ 私たちはそれを実行すべきなのです｡
実際に出力されるのは､ 新しい行だけです｡
だから､ あそこまで見えるんですね｡
そこには新しいラインがある｡
つまり､ 具体的な行動なんですね｡
出力されてないじゃん｡
しかし､ もっと多くの例を見て行きましょう｡
私がここで示したかったのは､ enumと文字､ エスケープシーケンス､ エスケープ文字という素晴らしい概念です｡
このようなことを学ぶには､ IDの中にタイプコードを入れて､ それが何をするのか見てみるのがよいでしょう｡
しかし､ それを補うために､ 評価の一助となるような課題を提供します｡
お役に立てれば幸いです｡
ありがとうございます｡