D言語入門記事 ~識別子の名前、データ型と定数の表現(1)~

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

D言語入門記事 ~識別子の名前、データ型と定数の表現(1)~

投稿記事 by tk-xleader » 12年前

この布教記事(笑)は1ヶ月くらい集中的に書き続ける予定です。今回の話題は、「識別子の名前と型と変数について」です。

[1] 識別子と命名ルール

 プログラミングをしていると、関数やら変数やら、とにかく名前を付けなければならないときが多いですね。それらの名前を識別子というのですが、D言語ではC言語とほとんど同じように名前を付けることができます。具体的には、次のようなルールに従います。

・使える文字は、半角数字、半角アルファベット、_(アンダースコア)のみ
・最初の一文字に数字を用いることは出来ない
・文字数に制限は無い。

 ただし、コンパイラが、自分たちで使う為に予約している識別子というものがありまして、それらを使うことは出来ないです。具体的には…

・__(アンダースコア×2)で始まる名前
・後述の予約語

[2] 予約語

 C言語と同じで、D言語にも予約語というものがあります。これらは、プログラムコードの中で、ある特定の意味を持つ単語として使われるもので、プログラムの流れを制御する為の目印などとして使用されているものですね。
 予約語は、次の通りです。

abstract alias align asm assert auto body bool break byte case cast catch cdouble cent cfloat char class const continue creal dchar debug default delegate delete deprecated do double else enum export extern false final finally float for foreach function foreach_reverse goto idouble if ifloat immutable import in inout int interface invariant ireal is lazy long macro mixin module new nothrow null out override package pragma private protected public pure real ref return scope shared short static struct super switch synchronized template this throw true try typedef typeid typeof ubyte ucent uint ulong union unittest ushort version void volatile wchar while with __FILE__ __LINE__ __gshared __thread __traits

[3] データ型

 D言語は、C言語と同じで、値に型が存在します。型には、次のような種類があります。

基本データ型

 コンパイラによって定義されている、すべての基本となるデータ型。これらの型名は予約語になっています。

・整数型
・浮動小数点数型 - 複素数型
・論理型
・文字型

構造データ型

 基本データ型の組み合わせや、拡張によってできるデータ型。

・ポインタ
・配列
・連想配列
・関数型
・デリゲート

ユーザー定義型

 プログラムコードの中で定義される型。それらの名前は当然識別子になる。

・構造体型(struct)
・クラス型(class)
・共用体型(union)
・列挙型(enum)

[4] 基本データ型
1.整数型

 整数型とはその名の通り、整数を扱うための型です。これらにはいくつか種類がありますが、扱う値の範囲によって使い分けます。それと、整数型には、符号つきと符号なしの二種類がありまして、符号なし整数のほうが符号つき整数よりも大きい数まで扱えますが、負の数を扱うことが出来ません。符号なし整数型の名前は、同じbit数の符号つき整数型の名前の前に 'u' をつけたものになっています。
 以下、サイズごとに説明していきます。

・8bit整数型 byte (符号つき -128 ~ 127)/ ubyte (符号なし 0 ~ 255)

最も小さいサイズの整数型です。Windowsなど大抵の処理系では、8bit = 1バイトになります。

・16bit整数型 short (符号つき -32768 ~ 32767)/ ushort (符号なし 0 ~ 65535)

16ビットの整数型。大抵の処理系では2バイトになる。

・32bit整数型 int (符号つき -2147483648 ~ 2147483647)/ uint (符号なし 0 ~ 4294967295)

最も頻繁に使われる整数型。大抵の処理系では4バイトになる。
プログラムの中では、最も基本となる型で、整数型が必要な場合は大抵これをつかっておけば問題はない。というよりも、どうしても必要な場合以外、整数型にはint型を使うべきです。

・64bit整数型 long (符号つき -9223372036854775808 ~ 9223372036854775807)/ ulong (符号なし 0 ~ 9223372036854775807)

int/uint型よりも大きな整数を扱うときに使う型、大抵の処理系では8バイトになる。
WindowsでC言語を扱っていた人には注意が必要。C言語ではlongは32bitだったが、D言語では64bitである。要するに、C99のlong longに相当する型である。
► スポイラーを表示
2.浮動小数点数型

 これは実数、要するに数学で使われる数を扱う型です。D言語の浮動小数点演算は、IEEE 754を満たすことが保証されています。専用のハードウェアが存在する場合、それが使われるように最適化されることもあります。
 そして、D言語は虚数型と複素数型を組み込みでサポートしています。虚数型と複素数型の名前は、それぞれ対応する実数型の前に 'i','c' をつけたものになります。
 以下、サイズごとの説明

・32bit浮動小数点型(単精度浮動小数点数型) float (実数型)/ ifloat (虚数型)/ cfloat (複素数型)

最もサイズの小さな浮動小数点型、大抵の環境では4バイト。
DirectX プログラミングでは頻繁に使われる。

・64bit浮動小数点型(倍精度浮動小数点数型) double (実数型)/ idouble (虚数型)/ cfloat (複素数型)

C/C++では頻繁に使われる浮動小数点型、大抵の環境では8バイト。

・処理系がサポートする最大の浮動小数点型 real (実数型)/ ireal (虚数型)/ creal (複素数型)

処理系がサポートする最大の浮動小数点数を扱うための型、D言語では、メモリ節約などの特別の理由が無い限り、この型をつかっておけば問題ない。
x86系CPUの処理系では80bit(10バイト)になる。

3.論理型

 論理型は、真か偽かを表すための型です。これは、bool 型によって表します。bool型は8bitです。

4.文字型

 文字型は、文字を表すための型です。D言語では、utf-8/utf-16/utf-32をサポートしています。それぞれ、char(8bit)/wchar(16bit)/dchar(32bit)によって表現されます。C言語では、char及びwchar_tは整数型との区別が明確ではありませんが、D言語では、整数型と明確に区別されています。ただし、文字型を整数として扱うことは出来ます。

[5] 数値リテラル

 前節で説明した基本データ型は、その定数をプログラムコードの中に埋め込む必要が出てきます。プログラム中に埋め込まれた定数を、リテラルと呼びます。リテラルは、暗黙のうちに別の型に変換される場合があります。具体的には、「int型のリテラル → uint型の定数」などがあります。特に、基本データ型を表すリテラルのうち、整数型と浮動小数点型を表すリテラルを総称して、数値リテラルと呼ぶことがあります。
 表記法自体は、C言語と共通する部分が多いですが、違う部分も結構あります。
► スポイラーを表示
 まず、整数の表記法は、10進数、2進数、8進数、16進数の4つがあります。10進数は、ただ数字を並べるだけです。2進数、8進数、16進数は、それぞれ数字の並びの前に、0b / 0 / 0x という基数接頭辞を付けて標記します。16進数は、アルファベットのA~Fを必要に応じて用いながら表記しますが、小文字でも大文字でもかまいませんし、混在してもいいです。それと、数字の並びの中に、_(アンダーバー)を挿入することも出来ます。

CODE:

300 ……… 10進数の300
1_48_0 ……… 10進数の1480
0b11 ……… 2進数の11 (10進数の3に相当する)
037 ……… 8進数の37 (10進数の31に相当する)
0x1Cf ……… 16進数の1CF (10進数の463に相当する)
int型のリテラルは必要に応じてint型から他の整数型に変換されますが、long型の定数を扱いたいときには、int型のリテラルでは表せないことがありますから、その場合は、数字の最後に L という接尾辞を付けて対応します。それと、U という接尾辞を付けると、符号なし整数のリテラルになります。これらの順番は問わないです。

CODE:

30000U ……… uint型の整数リテラル
30000u ……… これも上と同じ
2802380432042380L ……… long型の整数リテラル
2802380432042380UL ……… ulong型の整数リテラル
2802380432042380Lu ……… 一つ上と同じ
 次に、浮動小数点数リテラルの表記法を説明します。まず、浮動小数点数のリテラルは、型を指定しない場合double型になります。表記法が二つありますが、整数リテラルと同じように_(アンダーバー)を挿入することが出来ます。、一つ目は、小数のように表記する方法。これは、直感的で、整数リテラルとほぼ同じような表記法ですが、小数点を .(ドット)で表記します。

CODE:

3.14 ……… double型の定数
 もう一つは、科学計算的な表記方法で、丁度、3.943×10-2のような数の表し方に対応するものです。これは、10進表記と16進表記の二つの記法があります。具体的には、小数表記の後ろに、10進数ならば、e-4のように、アルファベットeの後ろに指数を10進数で表記します。16進数の場合は、p+6のように、アルファベットpの後ろに、10進数で指数を表記します。いずれの場合も、+記号は省略できます。

CODE:

3.943e-2 ……… 3.943×10^-2
6.28e+3 ……… 6.28×10^3
6.28E3 ……… 上記と同じ
0xFF.FP2 ……… FF.F×2^2
そして、これらの浮動小数点型のリテラルをfloat型のリテラルにしたい場合は、これらのリテラルの後ろに F という接尾辞を、real型にしたい場合は、同じく L という接尾辞を付けます。

CODE:

3.14F ……… float型のリテラル
3.14e3f ……… これもfloat型のリテラル
0xCA.5P-4L ……… real型のリテラル
虚数リテラルは、数値リテラルの最後に i を付けます。複素数リテラルは存在しませんが、虚数リテラルと実数リテラルの和によって表記できます。ちなみに、int型のリテラルの最後に虚数接尾辞iを付けることもできますが、この場合はidouble型になります。

CODE:

3.8i ……… idouble型
5.8Li ……… ireal型
9i ……… idouble型
8.3 + 3.2i ……… double + idouble → cdouble型
前の記事「Hello World,コメントと式(1)」 ←→ 次の記事「リテラル(2)、変数
最後に編集したユーザー tk-xleader on 2012年3月21日(水) 22:49 [ 編集 2 回目 ]

アバター
GRAM
記事: 164
登録日時: 13年前

Re: D言語入門記事 ~識別子の名前、データ型と定数の表現(1)~

投稿記事 by GRAM » 12年前

cent型ってなんか響きがいいですね

アバター
tk-xleader
記事: 158
登録日時: 13年前
連絡を取る:

Re: D言語入門記事 ~識別子の名前、データ型と定数の表現(1)~

投稿記事 by tk-xleader » 12年前

GRAM さんが書きました:cent型ってなんか響きがいいですね
まだ幻の型なんですけど、128bitCPUなんかが出てくると、使われるようになるのではないかと思います。