2009-02-06haXeでstructual subtyping
haXeでstructual subtyping
|haXeはinterfaceを使ったnominalなsubtypingも可能ですが、無名型を使えばstructualなsubtypingを実現する事ができます。
haXeでのstructual subtypingの例を見てみます。
例えばhaXeで
{ name : String }
と書けば、この型は「nameという文字列型のフィールドを持つ何か」を表します(無名型と呼びます)。
この型を使ったshowという関数を下記の用に定義してみましょう。
static function show(x: { name : String }) {
trace(x.name);
}
nameというフィールドを持つものならどんなものでもこの関数を適用することができます。
例えば下記のようなname, ageという二つのフィールドを持つPersonクラスが定義してあったとします:
class Person { public var name: String; public var age: Int; public function new (name, age) { this.name = name; this.age = age; } }
このとき
{ var imai = new Person("Y. Imai", 26); show(imai); }
という式(expression)は引数imaiの構造を見て型が問題ないとコンパイル時に判定されます。
JavaやActionScriptなどの多くの静的型言語では、structual subtypingが無いために、このことを実現するためにはinterfaceを用意して、Personクラスの定義にimplementsすることを書き加える必要があります。しかし、ライブラリやフレームワークなど手を加えることができないときは、動的な型もしくはunsafeなcastなどを使わざるを得ない場合があります。その場合、型安全性は失われてしまいます。
structual subtypingでは「nameとageを持つ何か」や「ageは持たないけどnameとdraw():Void->Voidをもつ何か」のような型を簡単に定義できるので柔軟で抽象的な型設計を可能とします。そこにはわざわざInterfaceを用意する必要も、それをimplementしていることを明示する必要もありません。しかも、もし必要なフィールドまたはメソッドを持っていなかったときは、コンパイル時に型エラーとなり、間違っている部分の情報を得ることができます。そして実行時には、無いフィールドの参照エラーが起きないことが保証されるのです。
osiire
2009/02/09 13:05
このhaXeのstructual subtyping(構造的部分型)は暗黙的(showにpersonクラスを適用する時に型を明示する必要が無い)ですね。(色んな意味で)すごい!
Neo
2012/07/11 13:32
Keep it coming, wrtries, this is good stuff.
gdktfcgr
2012/07/12 15:01
8EvZpq , [url=http://joabmtzggnov.com/]joabmtzggnov[/url], [link=http://dfmzumgtadeu.com/]dfmzumgtadeu[/link], http://zyrxkkptsssj.com/
kpinvp
2012/07/13 02:45
Wf9jaR , [url=http://fpfitjoayhkd.com/]fpfitjoayhkd[/url], [link=http://prgurjawgodj.com/]prgurjawgodj[/link], http://fltdfvmvnbza.com/
- 2 http://ocaml-nagoya.g.hatena.ne.jp/
- 1 http://fastladder.com/reader/
- 1 http://www.google.co.jp/search?q=uxtk&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:ja:unofficial&client=firefox-a
- 1 http://jp.f106.mail.yahoo.co.jp/ym/ShowLetter?MsgId=7600_17725197_146212_1882_506_0_58028_-1_0&Idx=0&YY=15027&inc=200&order=down&sort=date&pos=0&view=a&head=b&box=ocaml-nagoya
- 1 http://www.google.co.jp/search?hl=ja&q=uxtk&btnG=Google+検索&meta=lr=&aq=f