- C系?
- オブジェクト指向!
- ネイティブ実行とJITとインタプリタと共存可能!
- C/C++の欠点は排したい。
- C/C++の長所は残したい。
@class( fvec3 )
@derive( SuperClass )
@implement( Interface1, Interface2, ... )
@sealed
{
float x;
float y;
float z;
float X @
{
get { return x; }
set(v) { x = v; }
}
## これはコンストラクタ
void @+ ( void )
:x(0.0f), y(0.0f), z(0.0f)
{
## nothing to do.
return;
}
## これはデストラクタ
@virtual
void @- ( void )
{
## nothing to do.
return;
}
## operator +を定義!
fvec3 operator + ( const fvec3 v )
{
fvec3 result = new fvec3();
result.x = v.x + x;
result.y = v.y + y;
result.z = v.z + z;
return result;
}
}
@class( className )により、クラスの定義が開始される。
クラス定義には以下の属性を指定できる
名称 | 説明 |
---|---|
@abstract | このクラスは要約クラスである。 |
@derive | クラスの継承をする。継承元は一つだけ指定できる。 |
@implement | インタフェースの実装をする。インタフェースは複数指定できる。 |
@inherit | クラスの継承をする。継承元は独立クラスに限られ、複数指定できる。 |
@scope | このクラスのスコープを指定する。指定できるスコープはinternal、externalのどちらか。 |
@sealed | このクラスを基本クラスとして、派生クラスを作成することを禁止する。 |
@static | このクラスはstaticなフィールド、メソッド、プロパティしか持たない。 |
独立クラスとは親クラス・インタフェースを持たないクラスのこと。
クラス内にはフィールド・メソッド・プロパティが定義できる。
定義 = <型> <名称>; のとき、フィールドの定義
定義 = <型> <名称>{block} のとき、プロパティの定義
定義 = <型> <名称>(arguments) [{block}] のとき、メソッドの定義
これらは以下の属性を指定できる
名称 | 説明 | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@abstract | フィールドには指定できない。このクラスでメソッド・プロパティの実装を行わないことを表す。@staticと同時に指定できない。 | ||||||||||||||||||||||||||||||||||||||||||
@new | このクラスでフィールド・メソッド・プロパティを再定義することを表す。 | ||||||||||||||||||||||||||||||||||||||||||
@override | フィールドには指定できない。このクラスでメソッド・プロパティをオーバーライドすることを表す。 | ||||||||||||||||||||||||||||||||||||||||||
@overload | フィールドには指定できない。このクラスでメソッド・プロパティをオーバーロードすることを表す。同一シグネチャのメソッド・プロパティのオーバーロードはできない。 | ||||||||||||||||||||||||||||||||||||||||||
@scope | このクラスのスコープを指定する。ただし、owner、ownectedは@staticと同時に指定できない。
|
||||||||||||||||||||||||||||||||||||||||||
@sealed | このクラスを基本クラスとして、派生クラスを作成することを禁止する。 | ||||||||||||||||||||||||||||||||||||||||||
@static | このクラスはstaticなフィールド、メソッド、プロパティしか持たない。 | ||||||||||||||||||||||||||||||||||||||||||
@virtual | @staticと同時に指定できない。 |
フィールドは自動的にアライメントされる?
class A
{
value;
func()
{
value = 11111; ## ownew アクセス
}
func( A arg )
{
value = arg.value; ## private アクセス
}
}
class B <- A
{
func()
{
value = 111111; ## ownected アクセス
}
func( B arg )
{
arg.value = 11; ## child アクセス
}
func( A arg )
{
arg.value = 11; ## これは internal アクセスです。
}
}
class C
{
func()
{
new A().value = 11111; ## internal アクセス
new B().value = 11111; ## internal アクセス
}
}
class D <- A
{
func()
{
value = 111111; ## xownected アクセス。これに制限するスコープ指定は無い。
}
func( D arg )
{
arg.value = 11; ## protected アクセス
}
func( A arg )
{
arg.value = 11; ## これは public アクセスです。
}
}
class E
{
func( A arg )
{
arg.value = 11; ## public アクセス
}
}