名前体

 関数は必要なものだけ引数として受け取らないと再利用性が損なわれる。クラスを引数に取るのは粒度が大きすぎる。

 しかし一つ一つ入れてくのも大変だしコレクションを入れるのも不便になる。名前体というのをつくるとそれが解消出来る。

直接記法
func Hoge(<int ID, string Name, int Age>[] persons){ ... }

戻り値は型推論出来る。
< >これで囲ったところが名前体になる。[]はリードオンリーな配列。
データまたはコンポーネントが同じ型同じ名前を持っている場合結びつけるラッパを自動的につくる。ラッパをつくる必要もなく個別に入れればいいだけならば作らない。
[E]はEnuemrable(GetEnumeratorをもつ)。[C]はコレクション(E+Countをもつ)。[L]はリスト(C+インデックスで参照出来る)[D]はディクショナリ(C+文字列で参照したり出来る)。[W]は書き換え可能な配列。これも対応する名前の関数があれば自動的に結びつけてラッパを作る。
名前体はその関数の中でしか使えず、コンポーネントに参照させたりすることは出来無い。

名なし名前体
func Hoge(<int ID, string Name, int Age>, Sex sex)

person.IDみたいにアクセスするんじゃなくて直でIDという風にアクセスしたいときに使う。


名前体定義
name NameStructure<int ID, string Name, int Age>

NameStructureという名前体を作った。

name NameStructure2<<NameStructure>, <NameStructure>[]>
func Func(<NameStructure2> huga)
名前体の型を使うときは<>で囲まなければならない。見やすくするため。


名前体変換規則
name Person(Hoge hoge)
{
  int ID < hoge.ObjID;
  string Name < hoge.FullName;
  int Age < GetAge(hoge)
}
変換規則を作る。

Func((Person)hoge);
こんな感じでキャストして使う。

名前体はコンポーネントやデータのメンバにすることは出来無い。