D 1.0   D 2.0
About Japanese Translation

Last update Tue Nov 9 13:50:04 2010

プロパティ

全ての型と式は、プロパティを持っています:

プロパティの例
int.sizeof 4を返す
float.nan 浮動小数点数のNaN(Not A Number)値を返す
(float).nan 浮動小数点数のNaN値を返す
(3).sizeof 4を返す (3はintなので)
2.sizeof 文法エラー。"2." までで浮動小数点数扱いになってしまうので
int.init int型の初期値
int.mangleof 文字列 "i"
int.stringof 文字列 "int"
(1+2).stringof 文字列 "1 + 2"

全ての型の持つプロパティ
プロパティ 説明
.init 初期値
.sizeof byte単位でのサイズ (Cのsizeof(type)と同等)
.alignof アラインメントのサイズ
.mangleof 型名の'mangled'表現文字列
.stringof その型をソースコード上で表す文字列表現

整数型のプロパティ
プロパティ 説明
.init 初期値 (0)
.max 最大値
.min 最小値

浮動小数点数型のプロパティ
プロパティ 説明
.init 初期値 (NaN)
.infinity 無限大
.nan NaN
.dig 精度の10進桁数
.epsilon 最小の増分値
.mant_dig 仮数部のビット数
.max_10_exp 10の累乗での指数の最大値
.max_exp 2の累乗での指数の最大値
.min_10_exp 10の累乗での指数の最小値
.min_exp 2の累乗での指数の最小値
.max ∞を除いた最大値
.min 0を除いた最小の正規化数
.re 実部
.im 虚部

クラス型のプロパティ
プロパティ 説明
.classinfo クラスの動的な型情報

.init プロパティ

.init はデフォルト初期化値を表す定数式です。 型に適用されればその型の初期値となり、 変数やフィールドに適用されれば、 その変数/フィールドを初期化した値となります。 例:

int a;
int b = 1;
typedef int t = 2;
t c;
t d = cast(t)3;

int.init	// is 0
a.init		// 0
b.init		// 0
t.init		// 2
c.init		// 2
d.init		// 2

struct Foo
{
    int a;
    int b = 7;
}

Foo.a.init	// 0
Foo.b.init	// 7

.stringof プロパティ

.stringof プロパティは、 その対象要素のソースコード上で文字列表現を返します。 型に適用された場合、その型を表す文字列になります。 式に適用された場合、 その式のソースコード上での表現文字列になります。 式に対しては意味解析は行われません。 例:

struct Foo { }

enum Enum { RED }

typedef int myint;

void main()
{
    writefln((1+2).stringof);       // "1 + 2"
    writefln(Foo.stringof);         // "Foo"
    writefln(test.Foo.stringof);    // "test.Foo"
    writefln(int.stringof);         // "int"
    writefln((int*[5][]).stringof); // "int*[5][]"
    writefln(Enum.RED.stringof);    // "Enum.RED"
    writefln(test.myint.stringof);  // "test.myint"
    writefln((5).stringof);         // "5"
}

.sizeof プロパティ

e.sizeof は式 e のバイト単位でのサイズを表します。

メンバのサイズが欲しいときには、 this オブジェクトは必要とされません:

struct S {
    int a;
    static int foo() {
	return a.sizeof;   // 4を返す
    }
}

void test() {
    int x = S.a.sizeof;    // x を 4 とする
}

.sizeof がクラスオブジェクトに適用された場合、 インスタンスのサイズではなく、クラス参照のサイズを返します。

.alignof プロパティ

.alignof は式や型のalignmentのサイズを返します。 例えば、1 はバイト単位で整列されることを表し、 4 は32ビット単位で整列されることを表します。

.classinfo プロパティ

.classinfo はクラスオブジェクトの動的型情報を提供します。 object.TypeInfo_Class 型のインスタンスへの参照を返します。

ユーザー定義のクラス/構造体プロパティ

プロパティとは、 構文上はあたかもフィールドであるかのように扱えるメンバ関数のことです。 プロパティは読み取りも書き込みも可能です。 引数無しのメソッド呼び出しによって読み取りが行われ、 セットされる値を引数にしたメソッド呼び出しによって書き込みが行われます。

簡単なプロパティの例をあげます:

struct Foo
{
    int data() { return m_data; }	// 読み取りプロパティ

    int data(int value) { return m_data = value; } // 書き込みプロパティ

  private:
    int m_data;
}

これを使うには:

int test()
{
    Foo f;

    f.data = 3;		// f.data(3); と同じ
    return f.data + 3;	// return f.data() + 3; と同じ
}

読み取りメソッドが存在しなければ、そのプロパティは書き込み専用になります。 書き込みメソッドが存在しなければ、そのプロパティは読み込み専用です。 複数の書き込みメソッドがあっても構いません。 通常の関数オーバーロードの規則によって、適切なものが選択されます。

この他の全ての点において、これらのメソッドは他のメソッドと同様に振る舞います。 static にすることも、別のリンケージを指定することも、 複数パラメタのメソッドと多重定義にすることも、アドレスをとることなども全て可能です。

注意: プロパティは現在の所、 op=, ++, -- 演算子のlvalueとすることはできません。