無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

Dをつつく7−変数And定数と型推論。永遠に変らないものってあるのかな?

今回はプログラムに絶対に必要な変数と定数について一緒に学ぼう。
じゃあ、早速プログラミングをしよう!

バサバサバサバサさんまゴックンバサバサバサバサバサ バサバサバサラバサバサバサバサ


//variable.dファイルに記述
import std.stdio;

class Foo
{
public:
    invariant int MagicNumber = 42;
    invariant int error = -1;
    const     int ID;
    
    this( int id ) { 
       this.ID = id; 
       error = 10;
    }
}

int main( char[][] ) {
    auto foo = new Foo( 10 );
    foo.ID = 10;
    foo.MagicNumber = 1000;
    return 0;
}
dmd variable.d

どう?エラーが出るでしょ?これでいいんだ。敢えて間違う事も楽習には大事ピヨ。
エラーメッセージは大体こんなんだよね

variableSample.d(12): variable variableSample.Foo.error cannot modify invariant
variableSample.d(18): Error: can only initialize const member ID inside constructor
variableSample.d(6): Error: foo.MagicNumber is not mutable
variableSample.d(19): Error: constant foo.MagicNumber is not an lvalue

このエラーメッセージが多くの事が分るピヨ。
まずは知っている人が多いと思うconst 属性(D言語では属性と呼ぶ)に関連するエラーを読むピヨ。 エラーを読むと指定したフィールドや変数は、 コンストラクタか宣言部でしか初期化出来ない 事が分るピヨ。これについては予想が出来た人が多かったと思う。
もうむずむずしていている人がいると思うけど、次はお待たせ invariant属性に関連するエラーを読もう。 エラーを読んで分るのは、この属性を指定したフィールドや変数は 絶対に変更出来ない 事ピヨ。const属性との違いは、コンストラクタ内ですら駄目 だということなんだ。厳格ピヨね。 C言語ではconstがポインタを通したら変更できたりして色々な混乱を生んだから、 D言語の設計者はこの属性を作ったんだろうね。この属性使えるピヨね。
これでお終いだと思った人もいると思うけど、実はまだ楽習するところがあるピヨ。 どこがポイントか分ったかな?
実はこの部分が新しいんだ。
auto foo = new Foo( 10 );
此処を良く見て。型が指定されていないよね。 これはauto属性と言うんだ。 この属性は、LL言語なんかに使用されている要素で、 型を推論する機能なんだ。 たった4文字で長い型名を省略できるのは便利だよね。 あれぇ?Fooだと3文字だから1文字増えているじゃん!
おっほん。その辺は置いといて話を前に進めるよ。
この属性は便利だけど、多用するとコードの可読性が低下してエラーの元になりがち だから注意してね。
今度はお終い。疑わないで。もう本当に終わるよ。
別窓 | D | コメント:0 | トラックバック:0 | ∧top | under∨
<<中の人の徒然日記31 | 無差別に技術をついばむ鳥 | Dをつつく6ーシステム型1ー文字コードに気をつけろ!>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |