[1] 論理値リテラルと文字リテラル
1.論理値リテラル
bool型は、真か偽かを表す型ですが、これに対応して、true と false という定数が存在し、それぞれ真と偽に対応します。
一方で、bool型は整数型と相互に変換しあうことが出来て、「bool型 → 整数型」の場合、真の場合は1、偽の場合は0に変換されます。逆に、「整数型 → bool型」の場合、0の場合は偽に変換され、それ以外の場合は真に変換されます。
2.文字リテラル
文字リテラルは、半角一文字を'(一重引用符)で括ります。エスケープシーケンスもまた、半角一文字として考えます。
数値としては、その文字のUnicodeにおける文字コードになります。
出力結果
u
► スポイラーを表示
C言語と同じで、D言語で一時的なデータの保存、読み出しを行うには、変数というものを使います。そして、宣言や定義の方法はC言語とほとんど同じです。単純に言えば、
型名 変数名;
というように宣言します。当然、変数名は識別子の命名ルールに従います。C言語と見た目は同じですが、変数は型ごとに決められた初期値に基づいて初期化されます。
当然、C言語と同様に、宣言と同時に初期化することも出来ます。
全く同じ型であれば、やはりC言語と同様に複数の変数を一気に宣言することが出来ます。具体的には、,(コンマ)で区切ります。
import std.stdio;
void main(){
int value1 = 100,value2 = 200;
writefln("value1 = %d,value2 = %d",value1,value2);
}
► スポイラーを表示
[2] 記憶クラスと変数の生存範囲、型推論
変数の性質を決定付けるものの一つに、「記憶クラス」というものがあります。記憶クラスとは、変数の生存範囲や、定値性を指定する為のものです。D言語では、主に次のような種類があります。
・auto
・const
・immutable
・scope
・static
・synchronized
・__gshared
これらを変数に付けたい場合、型名の前に記述します。複数の変数を同時に宣言した場合は、その全てに記憶クラスが付加されます。 ここでは、変数の生存範囲に関わる、「auto,static,__gshared」について説明しようと思います。
1.auto
これは、自動変数のを表す記憶クラスです。自動変数とは、スコープが存在する変数です。簡単に言えば、関数の内部、ブロックの内部だけで有効な変数です。普通は、記憶クラスを省略して宣言します(C言語でも、autoを付けて変数宣言をするような助長なことはしませんが、それと同じです)。
これらの規則は、C言語と全く同じ規則です。
2.static
これは、静的変数を表す記憶クラスです。静的変数は、プログラムの終わりまで生存する内部変数です。
静的変数についても、C言語と全く同じ規則です。
3.__gshared
D言語にもグローバル変数が存在します。ところが、記憶クラスを付けずに宣言されたグローバル変数は、スレッドごとに変数が生成されてしまいます(いわゆるTLS)。そこで、すべてのスレッドで共有したいグローバル変数を使うときには、__gshared記憶クラスを付加します。
*型推論
変数の宣言時に初期値が与えられるとき、変数の型はなくても、コンパイラにはその変数を初期値の型にすればいいということが分かるはずですよね。そこで、D言語では一定の条件を満たしたときに、変数の型を省略することが出来ます。これが型推論です。まず、記憶クラスが吹かされていて、変数に初期値が与えられている場合が、それに相当します。
import std.stdio;
void main(){
auto val1 = 0,val2 = -9.2; //変数の型が省略されている!!
writefln("%d,%f",val1,val2);
}
0,-9.200000
これ以外にもありますが、それはまた後日解説します。
前の記事「識別子の名前、データ型と定数の表現(1)」 ←→ 次の記事「比較演算とプログラムの制御文(1)」