‫お帰りなさい｡
‫このビデオでは､ 構造体について説明します｡
‫また､ 構造体はクラスとよく似ていますが､ クラスは参照型であり､ 構造体は値型です｡ つまり､ クラスのオブジェクトを作成しても､
‫その中には何も入れることができません｡
‫つまり､ 空でもいいのですが､ 構造体は値を持たなければなりません｡
‫gameという構造体を作るので､ structキーワードを使って､ 名前をつけてみましょう｡
‫だから､ 見た目的には授業に近いものがありますね｡
‫つまり､ この名前があれば､ あとはここに変数を作ればいいわけです｡
‫そこで､ nameという名前のものを作り､ developerという名前のものを作り､
‫raatingという名前のものを作ることにします｡
‫では､ このゲームの評価と､ それから公開された文字列の発売日はどうなっているのでしょうか？
‫では､ いつ発売されたのでしょうか？
‫つまり､ 単純な構造体ですね｡
‫この構造体のオブジェクトを作成して､ 「ゲーム､ ゲーム1」というように､ 先に進むことができるようになりました｡
‫それで今､ このゲームをやっているんです｡
‫しかし､ そのゲームを使うためには､ 先に指定する必要がある｡
‫だから､ ゲームの仕様が必要なんです｡
‫1つは､ 例えば名前を決めて､ 仮に「ポケモンGO」だとすると､ ゲーム1には開発者が必要です｡
‫だから､ ナイアンティックとか言って､ ゲームワンにはレーティングが必要なんです｡
‫仮に3だとしよう｡ 5つ星のうち5つ､ いよいよ発売日です｡
‫だから､ そのように値を設定するだけでいいのです｡
‫つまり､ 授業でやることとよく似ているんですね｡
‫2016年に発売されたわけですが､ それが今回ご紹介するゲームの構造です｡
‫これで､ ゲーム機にゲーム情報を書き込むことができるようになりました｡
‫では､ ゲームの名前を書くとしましょう｡
‫そこでCWゲーム1｡
‫そして､ 彼の名前は､ 中括弧のゼロとゲームドット名､ または実際にはゲーム1名です｡
‫ですから､ ご覧のように､ 単に先に進んで変数と呼べばいいので､ 名前だけでなく､ 同じことができるのです｡
‫それは､ 他のすべてのものにもできることです｡
‫だから､ それをそのままコピーするんです｡
‫ゲーム1は開発元が､ 今はゲーム名ではなく､ 開発元になっています｡
‫そして､ こちらも同様です｡
‫評価はゲームワンのものです｡
‫レーティングはというと､ ここにレーティングがあります｡
‫そして､ ついにゲーム1がゲーム1リ発売日に発売されました｡
‫では､ 実行してみましょう｡
‫赤いキーをコンソールして､ 何が起こっているのか見てみましょう｡
‫そして､ 私たちはゲームなのです｡
‫1つは､ 「ポケモンGO」という名前です｡
‫ゲームワンはナイアンティック社が開発しました｡
‫評価は3です｡ 5 となり､ 2016年7月1日に発売されました｡
‫わかりました｡
‫そうであるように｡
‫とても基本的なことですが､ 授業とよく似ています｡
‫そうですね｡
‫では､ どのように違うのでしょうか？
‫まあ､ もうひとつだけ違わないところがあるんですけどね｡
‫そこで､ 情報を表示すべきpublic void displayを作成することにします｡
‫そして､ これからやることは､ 単純にそこにあるものをすべて実行することです｡
‫だから､ 名前を教えてくれるんです｡
‫開発者を出してくれそうです｡
‫レーティングと発売日を教えてくれるんです｡
‫わかりました｡
‫その代わりに､ 単純にdisplayメソッドを呼び出して､ ゲーム1を呼び出して､ すべての情報を表示してくださいと言えば､
‫そうすることができます｡
‫では､ もう一度実行すると､ すべての情報が得られることが確認できます｡
‫わかりました｡
‫だから､ 変数を作ることができるのです｡
‫メソッドを作成することができます｡
‫しかし､ どのように違うのでしょうか？
‫さて､ 何ができないかというと､ コンストラクタを作ることができないのです｡
‫構造体は､ 明示的なパラメータレスコンストラクタを含むことができません｡
‫ですから､ ここでデフォルトのコンストラクタを作成することはできません｡
‫そして､ 1つまたは複数のインターフェースを実装することができます｡
‫ですから､ 先に進んで､ cleanableなどのインターフェースを実装することができます｡
‫それから､ 相続をサポートしない｡
‫そのため､ 構造体には継承を使うことができません｡
‫デフォルトのコンストラクタを持つことはできません｡
‫構造体のメンバにはabstract, virtual, protectedの指定ができないので､ publicのような表記になります｡
‫つまり､ パブリック構造体を持つことも､ プライベート構造体を持つこともできるのです｡
‫ただし､ 構造体は､ 定義されたコンストラクタを持つことができます｡
‫つまり､ public gameのようなものがあり､ ここに文字列の名前があるわけです｡
‫それがあれば､ それが名前になるし､ この名前は名前に等しく､ このドット開発者は開発者に等しくなります｡
‫星評価はイコール評価です｡
‫そして､ このDOTの発売日はイコール発売日なのです｡
‫さて､ あなたはもちろん､ この中に入れてもらう必要があります｡
‫文字列の開発者､ そして二重の評価と文字列の発売日｡
‫しかし､ 例えば､ ここでdisplayメソッドを表示しようとすると､ 未割り当てのローカル変数game
‫oneを使用しているため､ エラーに陥ります｡
‫だから､ 第1試合は割り当てられなかった｡
‫ですから､ 仮にここまでですべての情報を入手した後に､ 試したとしても､ まだエラーがあることがわかりますね｡
‫だから､ このゲームの1つに関するすべての異なる情報を持っている必要があります割り当てられる｡
‫そうでなければ､ この遊びは成立しません｡
‫だからここでも､ レーティングを受けた後でも､ 同じエラーが出る｡
‫すべての値を割り当ててから､ 初めて仕事ができる｡
‫つまり､ クラスが行うような参照ではなく､ 値によって動作するわけです｡
‫そうですね｡
‫だから､ 短い要約が必要な場合は､ StackOverflowがあなたの味方です｡
‫そこで､ 各クラスのサポート継承について簡単にまとめます｡
‫参照プロトタイプはNULLにすることができ､ 新しいインスタンスごとにヒープ上のメモリを持つことができます｡
‫構造体のみでは継承に対応できない｡
‫我々の値型は整数と同様に値で渡され､ 先ほど見たようなヌル参照を持つことができず､ 新しいインスタンスごとにメモリオーバーのヒープを持つことはありません｡
‫そして､ どちらも複合型を持つか､ または複合型データ型であることが一般的で､ 何らかの論理的関係を持ついくつかの変数を含み､
‫メソッドやイベントを含むことができ､ インターフェースをサポートすることが可能である｡
‫たとえSimon Stephensが､ クラスは常にヒープに置かれるとは限らないし､ ストックは常にスタックに置かれるとは限らない､ と主張していてもです｡
‫わかりました｡
‫また､ このStackOverflowのエントリーには､ 構造体に関するかなり貴重な情報が含まれています｡
‫つまり､ 構造体とクラスの違いです｡
‫でも､ ここにあるのはほとんど見たことありますよね｡
‫しかし､ いつも通り､ より理解を深めるために､ ドキュメントもチェックすることをお勧めします｡