基本型

コンピュータの頭脳はCPUであることを見てきた。プログラムのほとんどのタスクはCPUによって実行され、残りはコンピュータの他の部分に割り当てられる。

コンピュータの最小のデータ単位はビットと呼ばれる。ビットの値は0または1のいずれかである。

0と1の値しか保持できないデータ型では用途が非常に限られるため、CPUは1ビット以上の組み合わせによるより大きなデータ型をサポートしている。例えば、バイトは通常8ビットで構成される。Nビットのデータ型がCPUがサポートする最も効率的なデータ型である場合、そのCPUはNビットCPUであるとする。32ビットCPU、64ビットCPUなどである。

しかし、CPUがサポートするデータ型だけではまだ不十分だ。学生の名前 やトランプの数字のような、より高レベルの概念を表現することはできない。同様に、Dの基本データ型も、多くの高レベルの概念を表現するには不十分だ。このような概念は、基本型を利用して、構造体や クラスとしてプログラマが定義する必要がある。構造体とクラスについては、後の章で説明する。

Dの基本型は、他の多くの言語の基本型と似ている。これらの型については、後の章で詳しく説明する。

論理式型

これは、論理式で使用される型だ。真の場合はtrue、偽の場合はfalseの値を取る。

定義初期値
boolブール型false
整数型

整数は、小数部分のない数値でである。例えば、3は整数だが、3.5は整数ではない。

負の値と正の値を持つことができる型は、符号付き型だ。これらの型の名前は、負の符号に由来している。正の値しか持てない型は、符号なし型だ。これらの型の名前の先頭にあるu、符号なし(unsigned)に由来している。

定義初期値
byte符号付き8ビット0
ubyte符号なし8ビット0
short符号付き16ビット0
ushort符号なし16ビット0
int符号付き32ビット0
uint符号なし32ビット0
long符号付き64ビット0L
ulong符号なし64ビット0LU
浮動小数点型

浮動小数点型は、1.25のような小数点を含む値を表現できる型だ。浮動小数点計算の精度は、型のビット数に正比例する。ビット数が多いほど、結果はより正確になる。小数点を表現できるのは浮動小数点型のみだ。intなどの整数型は、1や2などの整数値しか表現できない。

整数とは異なり、浮動小数点型には無効な値を表す特別な値がある。これらの特別な値は、.nanというプロパティとして記述され、"not a number"(数値ではない)の略語だ。

定義初期値
float32ビットfloat.nan
double64ビットdouble.nan
real少なくとも64ビットだが、ハードウェアがより多くのビット数を提供する場合、
になる
real.nan
文字型

これらの型は、アルファベットの文字やその他の文字体系の記号を表すために使われる。

定義初期値
charUTF-8コード単位0xFF
wcharUTF-16コード単位0xFFFF
dcharUTF-32コード単位
とUnicodeコードポイント
0x0000FFFF

上記に加えて、キーワードvoidは型がないことを表す。

キーワードcentおよびucentは、符号付きおよび符号なしの128ビット値を表すために将来使用するために予約されている。

特に理由がない限り、intを使用して値全体を表現することができる。小数点以下の値を持つ概念を表現するには、doubleを使用しよう。

型のプロパティ

Dの型には、その型に関する情報を提供するプロパティがある。プロパティには、型の名前の後にドットを付けてアクセスする。例えば、intsizeofプロパティには、int.sizeofとアクセスする。この章では、型プロパティの一部についてのみ説明する。

intのこれらのプロパティを出力するプログラムは、次の通りだ。

import std.stdio;

void main() {
    writeln("Type           : ", int.stringof);
    writeln("Length in bytes: ", int.sizeof);
    writeln("Minimum value  : ", int.min);
    writeln("Maximum value  : ", int.max);
    writeln("Initial value  : ", int.init);
}

プログラムの出力は次の通りだ:

int
バイト数4
最小値-2147483648
最大値2147483647
初期値0
size_t

size_t型も出てくる。size_tは独立した型ではなく、既存のunsigned型の別名である。その名前は"サイズ型"から来ている。サイズや数などの概念を表すのに最も適した型だ。

size_tは、プログラムが潜在的に使用できるメモリのバイト数を表現するのに十分な大きさだ。実際のサイズは、システムによって異なる。32ビットシステムではuint、64ビットシステムではulongとなる。そのため、32ビットシステムでは、ulongsize_tより大きくなる。

.stringofプロパティを使用すると、size_tがシステム上でどのようなエイリアスであるかを確認できる。

import std.stdio;

void main() {
    writeln(size_t.stringof);
}

私のシステムでは、このプログラムの出力は次の通りだ。

ulong
演習

他の型のプロパティを出力しよう。注