日記帳

日記です。

Eiffel の教科書

Eiffel の教科書といえば OOSC だろう,とか思って邦訳の オブジェクト指向入門 (ASCII SOFTWARE SCIENCE Programming Paradigm) を読みながら EiffelStudio を弄ってみることにします。まずは5章「Eiffel プログラミングの基礎」あたりから読んでみます.

読みながらとりあえず点クラスでも作ってみる.

class
	POINT
feature
	x, y : REAL;
end

POINTクラスを使ってみる.新しいオブジェクトを生成してその参照を変数に結び付けるには「<変数>.Create」のようにすればいいらしい.

class
	ROOT_CLASS
create
	make
feature
	p1 : POINT;
	make 
		do
			p1.Create;
			print(p1);
		end
end

いきなりコンパイルエラーが出る.

Syntax error at line 16 in class ROOT_CLASS
        do
            p1.Create;
---------------^
            print (p1)

切ない.

切ないけどとりあえずいろいろ調べてみることにする.

1Í : Šî–{“I‚ÈŠT”O‚ƍ\•¶ - Eiffel : ˆê•ài‚ñ‚¾“ü–å によると新しいオブジェクトを生成して変数に結び付けるのは「!!」を使って以下のようにするらしい.

試してみる.

class
	ROOT_CLASS
create
	make
feature
	p1 : POINT;
	make 
		do
			!!p1.make;
			print(p1);
		end
end

これもコンパイルエラー.

Error code: VEEN
Error: unknown identifier.
What to do: make sure that identifier, if needed, is final name of
  feature of class, or local entity or formal argument of routine.

unknown identifier ですか.考えてみると POINT クラスに make って feature を作ってないんだから当り前な気もする.

make を付けるからいけないんじゃない?とか思っったので消して試してみる.

make 
	do
		!!p1;
		print(p1);
		print("%N");
	end

コンパイル通ったので動かす.

POINT [0x4018D1BC]
  x: REAL = 0
  y: REAL = 0

動いたっぽい.

make 
	do
		print(p1 = Void)
		print ("%N")
		!!p1;
		print(p1 = Void)
		print ("%N")
	end

とかすると確かにオブジェクトが生成されて p1 が Void ではなくなっているのが確認できる.もうちょっと調べてみると「!!」のかわりに「Create」を変数の前に付けてもOKらしい.

もしかして Eiffel の言語仕様って結構変っているのかなーと思って調べてみるとやっぱり過去何度も変更があったらしい…Eiffel FAQcomp.lang.eiffel Frequently Asked Questions (FAQ)によると Eiffel 2.3 と Eiffel 3 で大きな変更があってその後も細かいところに変更がはいっているということらしい.

つまり オブジェクト指向入門 (ASCII SOFTWARE SCIENCE Programming Paradigm) は Eiffel 言語のテキストとしてはちょっと古すぎるってことですか.まぁもう20年近く前の本なので当然といえば当然ですか.やっぱりオブジェクト指向入門のための本なのですねぇ.OOSC2の邦訳が発売されればまた違うのでしょうけど.

じゃあ現在の Eiffel の言語仕様はどうなっているかというと ECMA-367 で標準化されている模様.

今日学んだこと.