日記帳

日記です。

式 - プログラミング言語 D (日本語訳) を読む.

以下C言語とかには存在しない式とか主に気になったもの.

等値式,同一性式(あるいは二項 is 演算子)

オブジェクトに対しては「==」が同値性を比較する演算子で「is」が同一性比較の演算子になっている. ( a == b ) という式は a.opEquals(b) と書き換えられて opEquals() メソッドで同値性比較の処理を書くことになる.

Java では「==」が同一性比較で「Object#equals()」メソッドで同値性比較を行なう.== 演算子の役割が逆なので Java プログラマにはまぎらわしそう.要注意?

In 式

連想配列では、値が配列の要素かどうかを調べることができます

と書いてあるけれど例を見ると要素というか連想配列のキーとして含まれるかどうかを調べる式らしい.見付かったらそのキーに対応する要素のポインタを返してくれる.真偽値じゃなくてポインタが返るあたりが素敵です♪

Cat 式

配列が連結できるにょろ〜.文字列は文字の配列なので当然これも連結できる. + じゃなくて ~ なのはよい.

New 式(での配列の確保)

bar = new int[][][5];
foreach (inout a; bar)
{
	a = new int[][20];
	foreach (inout b; a)
	{
		b = new int[30];
	}
}

と書くかわりに以下のように書けるのはすばらしい.

int[][][] bar;
bar = new int[][][](5,20,30);

Delete 式

GC があるくせに Delete があるあたり素敵です♪
delete 後に変数がnullになるあたりはえらいです.

インデクス式

インデクス部分において変数 length と特殊変数 $ が使えるところが他所と一味違います.

int a[10];
a[length-1] = 10; // a[9] = 10

スライス式

配列から部分配列を得る.以下のように.

int a[] = [1, 2, 4, 8, 16];
int b[] = a[1 .. 3] // => [2, 4]

配列全体をスライスするとコピーされないらしい.

int[] a = [1, 2, 4, 8, 16];
int[] b, c, d;

b = a[1 .. length];
c = a[0 .. length];
d = a[];

printf("%d\n", a is b); // => 0
printf("%d\n", a is c); // => 1
printf("%d\n", a is d); // => 1

配列リテラル

{}ではなくて[].

関数リテラル

これはよいものだ.たぶん…

まだ関数のポインタとデリゲートのポインタの解説が出てきてないのでいまいちわかってないですが… そのうち解説にたどりつける期待.

Typeid式

指定された型の TypeInfo クラスのインスタンスを返すらしい.使い道は…?

Is式

型に対していろいろ判定できる単項演算子の is.同じく使い道は…?
やっぱりテンプレートを深くを使う用にならないとこの手の型自体を扱うような式のありがたみがいまいちわからないのだろうか?

まとめ

早くも飽きてきた… 言語のフィーチャを半分も抑えてない気がするけど… やっぱりなにかプログラムを書かないとだめですかねぇ…