講義メモ:文法編

文法編:ジェネリックコレクションクラス、インターフェイスなど

コレクションクラス

・コレクションとはデータ構造を表す仕組み。
・例:配列は同じ型のデータをまとめて番号(添字)で扱う仕組み
 構成:配列名[0]、配列名[1]、配列名[2]、…
・例:レコードは複数の項目から成る1行のイメージの情報で型は異なって良く、項目名が必要
 構成:「項目名①、項目名②、…」が並んでいる
・例:リストは同じ型のデータをまとめて順番で扱う仕組み
 構成:要素①⇒要素②⇒要素③⇒…
・コレクションクラス:コレクションを扱うためのクラスで、C#システムが多種を提供している
・C#などでは、配列は言語仕様に含まれているので、クラスは不要で便利だが、配列の欠点に注意が必要
 例:要素数が変更不可、途中挿入や削除を行うには後続要素全ての移動が必要 など
・そこで、C#mなどでは配列に代わるコレクションクラスとしてArrayListクラスを提供している
 利用方法: using System.Collections; を指定(Unityではデフォルト)
 生成方法: ArrayList 変数名 = new ArrayList(); //要素数は指定不要で自動拡張/縮小
 格納方法: 変数名.Add(要素値) メソッドで
 要素数: 変数名.Count プロパティで得る
 検索方法: 配列と同様に 変数名[添字]

ミニ演習 mini0310a.cs

・Monstersという名のArrayListを生成し、適当な文字列をいくつか格納する
・要素数を得て、格納した全要素をDebug.Logしよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mini0310a : MonoBehaviour {
    void Start() {
        ArrayList monsters = new ArrayList(); //生成
        monsters.Add("Veldra"); //要素を追加
        monsters.Add("VelGrimnd"); //要素を追加
        monsters.Add("VelZerd"); //要素を追加
        Debug.Log("要素数:" + monsters.Count); //プロパティで得る
        for (int i = 0; i < monsters.Count; i++) { //全要素繰返す
            Debug.Log(i + ":" + monsters[i]);
        }
    }
}

ミニ演習 mini0310a.cs・改

・p.118のforeachを用いてシンプルにしよう
・作業変数の型は匿名型のvarにすると良い
・添え字は用いないので「i」の表示は不要とし、要素の名前のみで良い

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mini0310a : MonoBehaviour {
    void Start() {
        ArrayList monsters = new ArrayList(); //生成
        monsters.Add("Veldra"); //要素を追加
        monsters.Add("VelGrimnd"); //要素を追加
        monsters.Add("VelZerd"); //要素を追加
        Debug.Log("要素数:" + monsters.Count); //プロパティで得る
        foreach (var w in monsters) { //全要素繰返す
            Debug.Log(w);
        }
    }
}

ジェネリックコレクションクラス

・コレクションクラスであるArrayListは格納したデータの型を「object」にしてしまうことで、どんな型のデータも格納できる
・しかし、要素を取り出して用いるときに型がわからないので不具合にもなる
・そこで、型を指定できるようにしたのが、ジェネリックコレクションクラスであるList<T>
・List<T>クラスを用いると、配列と同様に型を決めたコレクションを利用できる
・なお、メソッドやプロパティはArrayListクラスとほぼ同様
 利用方法: using System.Collections.Generic; を指定(Unityではデフォルト)
 生成方法: List<型> 変数名 = new List<型>(); //要素数は指定不要で自動拡張/縮小
 格納方法: 変数名.Add(型が一致する要素値) メソッドで
 要素数: 変数名.Count プロパティで得る
 検索方法: 配列と同様に 変数名[添字]

ミニ演習 mini0310b.cs

・Monstersという名のList<string>を生成し、適当な文字列をいくつか格納する
・要素数を得て表示し、foreachで格納した全要素をDebug.Logしよう

作成例

using System.Collections;
using System.Collections.Generic; //List<T> 用
using UnityEngine;
public class mini0310b : MonoBehaviour {
    void Start() {
        List<string> monsters = new List<string>(); //生成
        monsters.Add("Rimuru"); //要素を追加
        monsters.Add("Shuna"); //要素を追加
        monsters.Add("Sion"); //要素を追加
        Debug.Log("要素数:" + monsters.Count); //プロパティで得る
        foreach (var w in monsters) { //全要素繰返す
            Debug.Log(w);
        }
    }
}

インターフェイス

・元の意味は「異なる要素をつなげる仕組み」
・C#などのオブジェクト指向では「無関係なクラスを関連付ける仕組み」でクラスの性格を表すことができる
・例えば、ドラゴンクラスとF14クラスは継承関係にはならないが「飛ぶもの」というインターフェイスを実装することで、
 オブジェクトをまとめて扱える
・インターフェイスは抽象クラスと同様に定義できる。中身は空でも良い
・例: interface FlyAble {} //飛ぶものを示すインターフェイス
・クラスにインターフェイスを結びつけることを実装といい、継承と同じ書式でできる
・例: class Dragon : FlyAble {…} //飛ぶものであるドラゴンクラスの定義
・例: class F14 : FlyAble {…} //飛ぶものであるF14クラスの定義
・同じインターフェイスを実装するクラスのオブジェクトはまとめて扱える
・例えば、インターフェイスを型とする配列に入れられる
例:
 Dragon Veldra = new Dragon();
 F14 Blue = new F14();
 FlyAble[] flyers = {Veldra, Blue}; //飛ぶものの配列に格納できる

提出:ミニ演習 mini0310b.cs

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です