Written by CreativeGP
Sep 29 / 2017
Xallerの型は他の言語のように単純ではありません。基本的に型には名前と種族があります。
名前は型の名前で形の識別に使います。
種族は型をグループ分けするもののようなもので いくつかの種類があります。
全ての型はこれらの種族のどれかに必ず属します。
種族 | 詳細 |
Number | 数字関係 |
String | 文字列 |
Boolean | 論理値 |
Dirty | 汚れた型の識別子 |
このうち、Dirty種族以外は全て純粋な種族と呼び、純粋な種族に属する型を純粋な型といいます。
Dirty種族の型は汚れた型といいます。
型のうちでももともとXallerが定義している型があります、これを基本型と呼んでいます。 基本型は全部で3つあり、全て純粋な型です。
型名 | 種族 | 詳細 |
int | Number | 数字を格納できます、現在は小数の区別はされません。 |
string | String | 文字列を格納できます。1文字も文字列として扱います。 |
bool | Boolean | 論理値を格納できます。 |
基本型以外にも自分で型を作りたいと思ったときに自分仕様の型を作ることができます、これをユーザー型といいます。 ユーザー型は次のようなコードで作ることができます。
-(name):inh1 :inh2 ... {
}
name 新しい型の名前
inh1, inh2, ... 継承する型の名前
型の継承は既存の型をコピーする機能ですが、注意点があります。 まず、純粋な型をコピーする場合はそれ一つしかコピーすることができません。 つまり、純粋な型をいくつかコピーしたり、純粋な型と汚れた型を一緒にすることはできません。 純粋な型を継承した場合は新しい型も純粋な型です。それ以外の場合は新しい型は汚れた型になります。
汚れた型はメンバを持つことができます。メンバは他の言語で言う構造体やクラスのようなものです。 コードは型の定義のときに使用する中括弧の中に変数や関数を作るように書いていけばいいだけです。 メンバを持った型で変数を作った場合、「変数の名前.メンバ名」のような名前の関数や引数が自動的に生成されます。 例として次のようなコードで型を作ってみます。
-(Test) {
(member1)int
@ (func) {
return .member1
}
}
注意:メンバ関数の中で他のメンバにアクセスするときは.メンバ名と書きます。 このTestという型はmember1という純粋なメンバ変数とfuncというメンバ変数を返すメンバ関数を持っています。 このTestを使ってhogeという名前の変数を作った場合はこれらの変数と
変数名 | 型名 | 種族 |
hoge | Test | Dirty |
hoge.member1 | int | Number |
hoge.funcというhoge.member1を返す関数が自動定義されます。 ここでDirty型の変数が定義されているのが解ると思います。
Xallerの関数は他の言語の関数とほとんど同じ仕様です、中に処理をまとめておいてそれを何回も呼び出すことができます。 関数は以下のコードで創ることができます。
@ (name arg1(arg1type) arg2(arg2type) ...) {
content
return expression
}
注意:returnは関数を終了します、引数がある場合はその横に書けば自動的に返されます。 returnは必須ではありません、なかった場合は閉じ括弧で戻り値無しで終了します。